使用 Docker 的命令行 (CLI) 手册
这是在 shell 环境中使用 CLI(命令行界面)控制 Docker 的命令手册,无需使用 Docker GUI。我们介绍如何创建和控制 Docker 镜像、创建和控制 Docker 容器以及保存和加载镜像或容器。
尝试连接到 Docker 守护程序套接字时权限被拒绝
当您安装 Docker 并尝试执行 Docker 相关命令时,会出现与访问 /var/run/docker.sock
相关的权限错误。从系统角度来看,Docker 的操作似乎需要root
权限。
1
2
3
$ docker images -a
permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/images/json?all=1": dial unix /var/run/docker.sock: connect: permission denied
使用以下命令授予您的 Ubuntu 帐户对/var/run/docker.sock
的访问权限。
1
sudo chmod 666 /var/run/docker.sock;sudo chown -R ${USER}:users /var/run/docker.sock
图像
构建 Docker 镜像
使用 Docker 需要做的第一件事可能是创建 Docker 镜像。您可以使用以下命令构建 Docker 映像。此命令根据您编写的Dockerfile
构建 Docker 映像。
1
2
3
4
5
6
7
8
9
# build general
docker build -f <Dockerfile> -t <tag> .
# build without cache
docker build -f <Dockerfile> --no-cache -t <tag> .
# -----------------------------------------------
# example
docker build -f Dockerfile -t img-my .
列出 Docker 镜像并删除它
以下是查看和删除系统中注册的 Docker 镜像列表的命令。
1
2
3
4
5
# list
docker images -a
# remove
docker rmi <repository name>
删除 Docker 镜像缓存
如果在修改 Dockerfile 的同时重复构建 Docker 镜像,则构建时间将比第一次构建镜像时更少。这是可能的,因为 Docker 具有分层结构,并且未更改的部分会缓存在系统中。但是,缓存的内容会占用存储空间。删除Docker缓存的命令如下。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# remove docker cache
docker system prune -a
# -----------------------------------------------
# example
$ docker system prune -a
WARNING! This will remove:
- all stopped containers
- all networks not used by at least one container
- all images without at least one container associated to them
- all build cache
Are you sure you want to continue? [y/N] y
Deleted build cache objects:
kxgva6ktfwea5hiatrfmgyeq3
...
c5tvqn2p53ledfjz4nqyrbl1g
gtdusijog41t1972eh4oggk37
Total reclaimed space: 15.34GB
容器
从图像创建容器
如果您已经创建了 Docker 镜像,则这是基于该镜像创建容器的命令。
1
2
3
4
5
docker run -d -it --name <container name> -p <ubuntu machine port>:<docker port> <image name>
# -----------------------------------------------
# example
docker run -d -it --name cond-my -p 43389:3389 -p 48080:8080 -p 44000:4000 -p 422:22 img-my
列出 Docker 容器并将其删除
如果您首先使用run
命令运行 Docker 容器,则会创建一个容器。您还可以通过ps
命令检查 Docker 容器的状态并列出容器。您还可以使用rm
命令删除 Docker 容器。
1
2
3
4
5
6
# list
docker ps -a
# remove
docker rm <container id>
启动、停止、连接
如果通过搜索 Docker 列表找到了 Docker 容器的 ID,则可以使用 start 命令来启动和停止 Docker 容器(stop)并进入 Docker 内部(attach)。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# start stopped container
docker start <container id>
# start stopped container & enter container
docker start -i <container id>
# stop running container
docker stop <container id>
# enter running(started) container
docker attach <container id>
# pass to commands to running container
docker exec -it <container names> <commands>
保存/加载泊坞窗图像
将 Docker 镜像导出到文件
就我而言,我使用 Synology NAS 的 Docker 功能。 Synology 基本上支持基于 Docker Hub 上注册的映像创建容器的功能。但是,因为我想使用基于 Dockerfile
创建的 Docker 映像作为容器,所以我将在 Ubuntu 计算机上创建的映像保存为文件并将其加载到 Synology Docker 中。
以下命令将在系统上注册的 Docker 映像保存为 tar 文件。
1
2
3
4
5
docker save -o <file name> <image name>
# -----------------------------------------------
# example
docker save -o img-my.tar img-my
从镜像文件加载 Docker 镜像
以下命令将 tar 文件格式的 Docker 映像加载到系统中。
1
2
3
4
5
6
docker load -i <file name>
# -----------------------------------------------
# example
docker load -i img-my.tar
将 Docker 容器导出到镜像
根据情况,仅使用Dockerfile
中描述的内容可能无法配置镜像中的环境。因此,有时您可能需要创建手动配置的 Docker 容器的映像。下面的命令将 Docker 容器转换为映像。
1
2
3
4
5
docker commit <container name> <image name = repository name>:<tag>
# -----------------------------------------------
# example
参考
- 提取并加载 Docker 镜像:https://dongle94.github.io/docker/docker-image-extract/