Docker 学习 2. 常用命令

目录

查看 Docker 版本

1
docker version

查看 Docker 详细信息

1
2
3
docker info
# 或者查看某项信息
docker info |grep Root

镜像

查看本地镜像列表

1
2
3
docker image ls
# 或者
docker images

搜索悬虚镜像

1
docker images -f dangling=true

根据 created 搜索

1
docker images -f [since 或 before]=[镜像标识]

根据 repository 和 tag 模糊搜索

只能搜索 Docker 官方发布的镜像。

1
docker images -f reference='*:22*'

搜索 Hub 中镜像

1
docker search image_name

搜索 Docker 官方发布的镜像

1
docker search image_name -f is-official=true

限制 stars 最小数搜索

1
docker search mysql -f stars=100

拉取 Hub 中镜像

1
docker pull ubuntu:22.04

移除本地镜像

1
docker rmi ubuntu:latest

批量移除本地镜像

危险操作

1
docker rmi `docker images -aq`

批量移除悬虚镜像

注意有关联的容器,要先把容器删除。

1
2
3
docker image prune
# 或
docker rmi $(docker images -q -f dangling=true)

导出镜像

1
docker image save centos:latest > ~/temp/centos.tgz

导入镜像

1
docker load -i ~/temp/centos.tgz

查看镜像详情

1
docker image inspect centos:latest

查看镜像历史(分层)

1
docker history [镜像标识]

给镜像重贴tag

相当于给原镜像复制一份。imageID不变。

1
docker tag [原镜像名]:[原tag] [新镜像名]:[新tag]

容器

创建并运行容器

1
docker run -it ubuntu bash

常用 options:

名称 解释 默认值
–detach , -d Run container in background and print container ID
–device Add a host device to the container
–env , -e Set environment variables
–env-file Read in a file of environment variables
–interactive , -i Keep STDIN open even if not attached
–mount Attach a filesystem mount to the container
–name Assign a name to the container
–network Connect a container to a network
–publish , -p Publish a container’s port(s) to the host
–pull Pull image before running (always, missing, never) missing
–rm Automatically remove the container when it exits
–tty , -t Allocate a pseudo-TTY
–volume , -v Bind mount a volume

容器内的进程必须处于前台运行状态,否则容器就会直接退出。自己部署一个容器运行,命令不得后台运行,前台运行即可。

如果容器内什么事也没做,容器也会挂掉。容器内,必须有一个进场在前台运行。

同创建容器

1
docker create -it ubuntu bash

查看 Docker 容器列表

1
docker ps --all

还根据 image,状态,存储卷,归属网络,映射端口等条件过滤。参考

移除容器

1
docker rm a808d0f581d5

批量删除容器

危险操作

1
docker rm `docker ps -aq`

启动容器

1
docker start my_centos

停止容器运行

优雅停止

有别的客户端正在使用该容器,则无法停止。

1
docker stop my_centos

强制停止

1
docker kill my_centos

批量停止

1
docker stop `docker ps -aq`

容器重启

1
docker restart [容器标识]

容器停止

容器停止这是停止容器的对外访问,不是停止整个容器。容器中运行的服务不会停止。和start, stop有本质区别。

1
2
docker pause [容器标识]
docker unpause [容器标识] # 恢复

打印容器日志

1
docker logs -f -t -n 20 my_centos

常用 options:

名称 解释 默认值
–follow , -f Follow log output
–tail , -n Number of lines to show from the end of the logs all
–timestamps , -t Show timestamps

进入正在运行的容器空间内

1
docker exec -it ping_baidu bash

查看容器详细信息

1
docker container inspect ping_baidu

查看容器端口转发情况

1
docker port my_nginx

提交容器

这一步操作相当于把容器打包成一个本地镜像。如果不指定新的 repository 和 tag,会生成悬虚镜像。

1
docker commit -a "Tang Lijin <ho_ho_gl@hotmail.com>" -m "测试信息" my_nginx ljtang2009/centos-test-file:2023

常用 options:

名称 解释
-a, –author 作者
-m, –message 附加信息

对容器执行命令

exec 命令

exec 原理是在容器中创建一个新的进程,执行新的命令。所以执行命令结束后,容器不会停止。

1
docker exec -it [容器标识] [命令,例如 /bin/bash ls]

attach 命令

attach 原理是在容器中附着一个标准输入输出流,不是执行新的命令。输入和输出都影响和出自容器的主进程 command(DockerFile 的 CMD 配置,或者创建容器时指定的命令)。

同一个容器 attach 出来的输入输出流都会输出同样信息。

1
docker attach [容器标识]

例如在 ubuntu 容器中,DockerFile 的 CMD 是bash,  主进程是运行 bash。
所以 attach 到该容器可以执行 bash 上的任何操作。

例如在 Tomcat 容器中,DockerFile 的 CMD 配置是CMD ["catalina.sh", "run"],主进程是执行启动 Tomcat,并输出启动日志。
所以 attach 到该容器不能执行任何操作(除了执行停止 Tomcat 服务的操作)。

查看容器正在运行的进程

top 命令可用于查看容器中的服务是否正常运行。

1
2
docker top [容器标识]
# 后面可以接linux的ps参数例如 docker top [容器标识] | grep 8080

查看容器日志

Docker 会记录容器的主进程 command(DockerFile 的 CMD 配置,或者创建容器时指定的命令)执行的日志。

相当于 VSCode 终端里显示的日志。

1
docker logs [容器标识]

常用 options:

名称 解释
–since 查询日志最早的时间点,(e.g. 2013-01-02T13:23:37Z) or (e.g. 42m for 42 minutes)
–until 查询日志最晚的时间点,(e.g. 2013-01-02T13:23:37Z) or (e.g. 42m for 42 minutes)
-t, –timestamps 显示时间戳
-n, –tail 显示条数
-f, –follow 是否动态显示,即时显示日志

容器和宿主机文件互拷

1
2
3
4
5
# 容器文件到宿主机
docker cp [容器标识]:[源文件地址] [目标文件地址]

# 宿主机文件到容器
docker cp [源文件地址] [容器标识]:[目标文件地址]

导出容器到 tar

1
docker export -o [tar文件地址在宿主机中] [容器标识]

导入容器 tar 文件成镜像

不写 repository 和 tag 会生成悬虚镜像。

1
docker import [tar文件地址在宿主机中] [repository:tag]

查看运行的容器占用的资源

1
docker stats

系统

查询帮助:

1
docker system --help

查看磁盘使用情况

1
2
docker system df -v
# -v 表示verbose, 查看详情。

获取服务日志

1
docker system

获取实时事件

该命令类似于查看日志,可添加 –since、–until 可选项。

1
docker system events

移除不使用的数据

1
docker system prune

将移除一下类型数据:

  • all stopped containers
  • all networks not used by at least one container
  • all dangling images
  • all dangling build cache

网络

查看所有网络

1
docker network ls

创建网络

1
docker create -d [driver类型] [网络名]

创建容器指定bridge

1
docker run --network [网络标识] [镜像标识]

指定容器和bridge网络链接

1
docker network connect [网络标识] [容器标识]

创建容器指定和别的容器共享网卡

新创建的容器用inspect查不到网卡。

1
docker run --network container:[容器标识] [镜像标识]