Docker是一个用于创建、部署和管理容器的开源平台。在使用Docker时,有效地管理和监控容器是非常重要的,其中查看和解析Docker命令(command)是基本且关键的一步。本文将介绍一些关于Docker的命令。

基础命令

Docker命令的格式

1
docker <command>[options] [arguments]

Docker基础命令

1
2
3
4
docker version           #显示版本信息
docker info #显示docker系统信息,包括容器、镜像
docker stats #cpu/内存使用情况
docker [command] --help #帮助命令

镜像相关命令

查看本地镜像 images

1
2
3
4
5
6
7
8
9
10
11
12
13
docker images
-a, --all # 列出所有的镜像
-q, --quiet # 只显示的镜像的id
# 举例说明
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos 7 8652b9f0cb4c 2 months ago 204MB
# 解释
REPOSITORY 镜像仓库源
TAG 标签(版本)
IMAGE ID 镜像ID
CREATED 创建时间
SIZE 大小
1
2
3
4
docker search [镜像名]
--filter=STARS=3000 # 列出收藏数不小于指定值的镜像
docker search centos # 搜索centos镜像
docker search --filter=STARS=3000 centos # 搜索收藏大于3000的centos镜像

下载镜像 pull

1
2
3
4
5
docker pull [镜像名]:[版本号]
-a, --all-tags # 下载所有镜像名的镜像
docker pull nginx # 下载nginx镜像,默认最新版
docker pull nginx:1.14.0 # 下载nginx镜像,版本为1.14.0
docker pull -a nginx # 下载REPOSITORY为nginx的所有镜像

删除镜像 rmi

1
2
3
4
5
6
删除镜像 rmi
docker rmi [镜像名或者镜像id]
-f # 强制删除
docker rmi -f 镜像id # 删除指定的镜像
docker rmi -f 镜像id 镜像id 镜像id 镜像id # 删除多个镜像
docker rmi -f $(docker images -aq) # 删除全部的镜像

推送镜像

1
docker push [镜像名或者镜像id]                  # 将镜像推送至远程仓库

容器相关命令

启动容器 rmi

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
启动容器 run
docker run [镜像名]
-d # 后台运行容器,并返回容器ID
-i # 以交互模式运行容器,通常与 -t 同时使用;
-P # 随机端口映射,容器内部端口随机映射到主机的端口
-p # 指定端口映射,格式为:主机(宿主)端口:容器端口
-p ip:主机端口:容器端口
-p 主机端口:容器端口
-p 容器端口
-t # 为容器重新分配一个伪输入终端,通常与 -i 同时使用(-it 交互模式运行)
--name="nginx-lb" # 为容器指定一个名称
--dns 8.8.8.8 # 指定容器使用的DNS服务器,默认和宿主一致
--dns-search example.com # 指定容器DNS搜索域名,默认和宿主一致
-h "hostname" # 指定容器的hostname
-e username="ritchie" # 设置环境变量
--env-file=[] # 从指定文件读入环境变量;
--cpuset="0-2" or --cpuset="0,1,2" # 绑定容器到指定CPU运行;
-m # 设置容器使用内存最大值;
--net="bridge" # 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型;
--link=[] # 添加链接到另一个容器
--expose=[] # 开放一个端口或一组端口;
--volume , -v # 绑定一个卷
docker run -it centos /bin/bash # 启动并进入容器
docker run -it -v 主机目录:容器内目录 # 挂载目录

查看容器信息 ps

1
2
3
4
5
6
docker ps [CONTAINER ID or CONTAINER NAME]
-a # 列出当前正在运行的容器+历史运行过的容器
-n=? # 显示最近创建的容器
-q # 只显示容器的ID
docker ps # 显示正在运行的容器
docker ps -n=3 # 显示最近三个创建的容器

退出容器 exit

1
2
3
退出容器 exit
exit # 直接容器停止并退出
Ctrl + P + Q # 容器不停止退出

删除容器 rm

1
2
3
4
docker rm 容器id                          # 删除指定容器,不能删除正在运行的容器   
docker rm --f 容器id # 删除正在运行的容器
docker rm -f $(docker ps -qa) # 删除全部的容器
docker ps -q -a|xargs docker rm # 删除全部的容器

启动和停止容器的操作

1
2
3
4
5
启动和停止容器的操作
docker start 容器id # 启动容器
docker restart 容器id # 重启容器
docker stop 容器id # 停止当前正在运行的容器
docker kill 容器id # 强制停止当前的容器

查看容器日志 logs

1
2
3
4
5
6
docker logs -f -t --tail 10 8e633673e3c2     # 查看容器id为8e633673e3c2的容器,最新10条日志
-f # 跟踪日志输出
--since # 显示某个开始时间的所有日志
-t # 显示时间戳
--tail # 仅列出最新N条容器日志
docker logs -tf --tail 10 8e633673e3c2

查看容器中的进程信息 top

1
docker top [容器id]        # 显示容器的进程信息

查看镜像的元数据 inspect

1
2
3
4
5
6
7
8
9
10
11
docker inspect [容器id]
-f # 指定返回值的模板文件

# 获取容器ip
[root@layman ~]# docker inspect -f '{{.NetworkSettings.Networks.redis.IPAMConfig.IPv4Address}}' 0233
172.31.38.16

# 获取容器环境变量
[root@layman ~]# docker inspect -f '{{.Config.Env}}' 0233
[PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin REDIS_VERSION=5.0.9 REDIS_DOWNLOAD_URL=http://download.redis.io/releases/redis-5.0.9.tar.gz REDIS_DOWNLOAD_SHA=53d0ae164cd33
536c3d4b720ae9a128ea6166ebf04ff1add3b85f1242090cb85]

进入容器 exec attach

1
2
docker exec -it 容器id /bin/bash        # 进入容器后开启一个新的终端,可以在里面操作(常用)
docker attach 容器id # 进入容器正在执行的终端,不会启动新的进程

其他相关命令

docker run 与 docker start区别

1
2
3
docker run 只在第一次运行时使用,将镜像放到容器中,以后再次启动这个容器时,只需要使用命令docker start 即可;
docker run相当于执行两步操作:将镜像放入容器(docker create),然后将容器启动,变成运行时容器(docker start);
docker start的作用是,重新启动已存在的镜像。

Docker run的基本流程

image-20250621155307829

挂载卷 -v

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
docker volume ls                      # 查看所有的volume的情况
-v 容器内路径 # 匿名挂载
-v 卷名:容器内路径 # 具名挂载
-v /宿主机路径:容器内路径 # 指定路径挂载
docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx:ro nginx # 只读权限
docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx:rw nginx # 可读可写
# 没有指定目录的情况下都是在“/var/lib/docker/volumes/xxxx/_data"下

构建 build
docker build -f /home/docker-test-volume/dockerfile1 -t layman/dockerfile .
-f # 指定要使用的Dockerfile路径
-t # 镜像的名字及标签

查看docker网络 network
# 查看网络
docker network ls # 查看所有容器的网络状态
docker network inspect [NETWORK ID] # 查看一个详细信息
docker network rm [NETWORK ID] # 可以移除一个网络
# 创建网络
docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet
--driver bridge 自定义网络模式,使用桥接
--subnet 192.168.0.0/16 设置子网地址
--gateway 192.168.0.1 设置出口网关
mynet 自己定义的一个网络名字
# 查看网络详细信息
docker network inspect mynet

加入网络 connect
docker network connect mynet tomcat01

构建 build

1
2
3
docker build -f /home/docker-test-volume/dockerfile1 -t layman/dockerfile .
-f # 指定要使用的Dockerfile路径
-t # 镜像的名字及标签

查看docker网络 network

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 查看网络
docker network ls # 查看所有容器的网络状态
docker network inspect [NETWORK ID] # 查看一个详细信息
docker network rm [NETWORK ID] # 可以移除一个网络
# 创建网络
docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet
--driver bridge 自定义网络模式,使用桥接
--subnet 192.168.0.0/16 设置子网地址
--gateway 192.168.0.1 设置出口网关
mynet 自己定义的一个网络名字
# 查看网络详细信息
docker network inspect mynet

# 加入网络 connect
docker network connect mynet tomcat01