文章

使用 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/

本文由作者按照 CC BY 4.0 进行授权