Docker常用命令手册

Docker常用命令手册

1、docker常用基础命令

本文记录了在学习docker过程中所使用过,并可能会用到的命令,将命令进行解析和归集,方便日常工作使用,实时更新中

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
docker <选项><命令><参数>
--api-enable-cors=false
#使用API时,启用CORS(cross-origin resource sharing)
-b 、--bridge=""
#使用事先创建的网桥接口。若设置为none,则不在容器内使用网络
--bip=""
#使用CIDR标记法设置docker 的IP带宽。该选项不能与-b选项同时使用
#如:-bip="192.168.0.0/24"
-D 、--debug
#启用调试模式
-d 、--deamon=false
#以守护进程模式运行
--dns
#设置docker要使用的DNS服务器
--dns-search=[]
#设置docker要使用的DNS搜索域。若设置为:example.com,则向服务器查询hello时,将首先查找hello.example.com
-e、--exec-drive="native"
#设置docker运行驱动,可设置为Native与lxc
--fixed-cidr=""
#固定分配IPv4地址的带宽。该IP地址必须在-b选项设置的网桥网络或--bip设置的IP网段内
-G、--group="docker"
#以守护进程模式运行时,使用-H选项创建Unix套接字后,设置该Unix套接字所在的组。使用""空字符串表示不设置分组
-g、 --graph="/var/lib/docker"
#设置docker使用目录的顶层路径
-H、--host[]
#以守护进程模式运行时,设置套接字路径。
--icc=true
#开启容器间通信
--insecure-registry=[]
#使用私有证书搭建docker注册服务器时,设置docker注册服务器域名
--ip=0.0.0.0
#使用docker run 命令时-p选项将端口暴露在外时,设置要绑定的默认IP地址
--ip-forward=true
#开启net.ipv4.ip_forward
--ip-masq=true
#为网桥上的IP地址开启IP伪装(masquerading)
--iptables=true
#开启iptables规则
--mtu=0
#设置容器的网络最大传输单元(MTU, Maxmum transmission unit)若不设置,则使用路由器的默认MTU或者设置为1500
-p、--pidfile="/var/run/docker.pid"
#设置PID文件路径
-registry-mirror=[]
#设置docker registry 的镜像地址
-s、--storage-driver=[]
#设置储存驱动,默认为auto,也可以设置为drivcemapper
--selinux-enabled=false
#开启SELinux SELinux尚不支持BTRFS储存驱动
--storage-opt
#设置存储驱动选项
--tls=false
#使用TLS
--tlscacert="/home/exapmleuser/.docker/ca.pem"
#设置要在远程证书中使用的CA证书文件的路径
--tlscert="/home/exapmleuser/.docker/cert.pem"
#设置证书文件路径
--tlskey="/home/exapmleuser/.docker/key.pem"
#设置密匙文件路径
tlsverify="false"
#使用TLS远程证书,守护进程与客户端全部使用证书验证
-v、--version=false
#打印版本信息

2、镜像操作命令总结

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[root@docker ~]# docker image --help
Usage: docker image COMMAND
Manage images
Commands:
build 从Dockerfile构建镜像
history 用于显示镜像的历史。此处的历史依据Dockerfile文件中的设置创建
import 用于从压缩为tar文件(.tar .tar.gz .tgz .bzip .tar.xz .txz)的文件系统创建镜像
inspect 用于以JSON格式显示容器与镜像的详细信息
load 用于从tar文件创建镜像
ls 查看镜像列表更多用法参考如下笔记
prune 删除悬虚(dangling)镜像,添加-a参数则会移除没有被使用的镜像
pull 用于从镜像仓库拉取镜像
push 用于将镜像推送到Docker注册服务器
rm 删除一个或多个镜像
save 用于将镜像保存为tar包文件,-o、--output="" 设置保存的文件名
tag 用于设置及修改镜像标签
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#查看所有镜像
docker images -a
#查看镜像摘要,用于区分同名镜像,可使用摘要信息拉取镜像保证准确唯一
docker image ls --digests ubuntu
#根据镜像nameID删除镜像,删除前首先停止镜像,并确保无其他依赖次镜像层的镜像
docker image rm ${ID}
#批量删除镜像-f参数为强制删除
docker image rm $(docker image ls -q) -f
#拉取镜像
docker image pull <repository>:<tag>
docker image pull nginx:1.19.0
docker image pull richarvey/nginx-php-fpm:last
#拉取nigelpoulton/tu-demo下所有镜像
docker image pull -a nigelpoulton/tu-demo
#查看悬虚(dangling)镜像
docker image ls --filter dangling=true
#删除悬虚(dangling)镜像,添加-a参数则会移除没有被使用的镜像
docker image prune
#使用reference过滤仅显示标签为latest的镜像
docker image ls --filter=reference="*:1.19.0"
#使用--format参数通过GO模板对输出内容进行格式化,如下只返回镜像的大小属性
docker image ls --format "{{.Size}}"
#只显示仓库、标签和大小信息
docker image ls --format "{{.Repository}}: {{.Tag}}: {{.Size}}"
#通过CLI的方式搜索docker hub,通过NAME字段进行内容匹配
docker search nginx
#使用--filter "is-official=true"参数,使命令返回内容只显示官方镜像
docker search nginx --filter "is-official=true"
#使用--filter "is-automated=true"参数,只显示自动创建的仓库
docker search nginx --filter "is-automated=true"
#使用--limit增加放回内容的行数,最多为100行
docker search nginx --limit 100
#查看镜像分层内容,包括镜像层数据和元数据
docker image inspect nginx:1.19.0
#查看镜像的构建历史命令记录
docker image history nginx:1.19.0
#显示完整构建命令
docker history --format {{.CreatedBy}} --no-trunc=true nginx:latest
#修改镜像tag和name
docker image tag cd645f5a4769 portainer/portainer:1.24.0

#区别,可以依据具体使用场景来选择命令,若是只想备份images,使用save、load即可,若是在启动容器后,容器内容有变化,需要备份,则使用export、import
#使用load命令导入镜像-i指表示从文件输入。会成功导入镜像及相关元数据,包括tag信息
docker load -i jms_core.tar
#使用save命令导出镜像,其中-o和>表示输出到文件,nginx.tar为目标文件,nginx:latest是源镜像名(name:tag)
docker save -o jms_nginx.tar jumpserver/jms_nginx:v2.4.3
#其中-o表示输出到文件,nginx-test.tar为目标文件,nginx-test是源容器名(name)
docker export -o nginx-test.tar nginx-test
#使用import导入镜像
docker import nginx-test.tar nginx:imp

3、容器操作命令总结

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
[root@docker ~]# docker container --help
Usage: docker container COMMAND
Manage containers
Commands:
attach 用于将标准输入(stdin)与标准输出(stdout)连接到正在运行的容器
commit 用于从容器的修改项提交新镜像版本到本地
cp 用于将容器的目录或文件复制的到主机。若将cp命令中的路径设置为目录,则将该目录下的所有内容复制到主机
create 使用指定的镜像创建容器。与run命令不同,使用create命令只能创建容器而并不启动
diff 用于检查容器文件系统的修改
exec 用于从外部运行容器内部的命令
export 将用于将容器的文件系统导出为tar文件包
inspect 用于以JSON格式显示容器与镜像的详细信息
kill 用于向容器发送KILL信号,从而关闭容器(推荐使用更优雅温和的 docker stop 命令)
logs 令用于输出容器日志
ls 命令用于查看所有运行的容器 -a则查看所有容器
pause 命令用于暂停容器中正在运行的所有进程
port 命令用于查看容器的某个端口是否处于开放状态
prune 移除所有停止的容器
rename 对容器重命名
restart 使容器重启可加-t命令设置重启等待时间
rm 移除一个或多个容器,docker rm `docker ps -aq`删除所有容器
run 用于指定镜像创建容器,run命令在创建容器后会启动容器
start 启动一个或多个已停止的容器,参考rm命令用法
stats 显示容器资源使用统计信息的实时流
stop 停止停止一个或多个正在运行的容器,参考rm命令用法
top 顶部显示容器正在运行的进程
unpause 取消暂停取消暂停一个或多个容器中的所有进程
update 更新一个或多个容器的更新配置
wait 等待容器终止,然后输出 Exit Code
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
31
32
33
34
35
36
37
38
39
40
#用于列出所有在UP的容器,使用-a则可以看到处于exited的容器
docker container ls
#用于查看单独容器的日志
docker logs ${ID}
#新建nginx容器,后台运行+名称及端口
docker container run -d --name nginx-A -p 80:80 nginx:1.19.0
#构建一个退出终端则自动删除的容器进行测试
docker container run --rm -p 80:80 nginx:1.19.0
#连接至运行的容器
docker exec -it $ID /bin/bash
#组合键退出当前容器
CTRL+PQ
#查看当前运行容器
docker ps
#查看所有容器,包含未运行的容器
docker ps -a
#停止容器运行
docker container stop ${ID}
#删除已停止的容器
docker container rm ${ID}
#批量删除容器
docker container rm $(docker container ls -aq) -f
#参数--restart always,当daemon重启或服务器重启后,停止的容器也会跟着被启动
docker container run -d --name nginx-A --restart always -p 80:80 nginx:1.19.0
#根据运行的容器保存全新的镜像到本地-a创建者,-m日志信息,-p创建镜像是暂停容器
docker commit -a lisir -m "tools-devle" -p 911a04c39577 centos_devel:20200726
#运行一个mysql5.7容器实例
docker container run -d --name Mysql-B --restart always -p 32805:3306 -e PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin -e GOSU_VERSION=1.12 -e MYSQL_MAJOR=8.0 -e MYSQL_VERSION=8.0.21-1debian10 -e MYSQL_ROOT_PASSWORD=qaz000123 mysql:latest
#运行一个portaine容器实例
docker run -d -p 8000:8000 -p 9000:9000 --name=portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer
#运行一个centos6.7容器实例
docker container run -it -d --name Centos6.7-A-devel --restart always -v /soft:/soft centos_devel:20200726 /bin/bash
#运行一个nginx1.12.1容器实例
docker container run -d --name nginx-lisir -p 83:80 --restart always nginx112:latest
#-i -t -d参数详解
-i 以交互模式运行容器,通常与 -t 同时使用;
-t 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
-d 后台运行容器,并返回容器ID;
#使用root用户登录容器
docker exec -ti -u root 4650e8d1bcca bash

3、卷操作命令总结

  • 挂载(bind mount)

    bind mount自docker早期便开始为人们使用了,用于将host机器的目录mount到container中。但是bind mount在不同的宿主机系统时不可移植的,比如Windows和Linux的目录结构是不一样的,bind mount所指向的host目录也不能一样。这也是为什么bind mount不能出现在Dockerfile中的原因,因为这样Dockerfile就不可移植了;

  • 卷(volume)

    volume也是绕过container的文件系统,直接将数据写到host机器上,只是volume是被docker管理的,docker下所有的volume都在host机器上的指定目录下/var/lib/docker/volumes;

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
31
32
33
34
35
36
37
#查看所有卷
docker volume ls
#创建卷
docker volume create
#查看卷详细信息
docker volume inspect ${VONAME}
#删除未被容器或副本使用的全部卷,谨慎使用
docker volume prune
#删除未被使用的指定卷
docker volume rm
#查看容器挂载的卷或本地目录
docker inspect 2bfe5c73244b | grep Mounts -A 20
#创建卷并进行挂载的案列
[root@docker _data]# docker volume create hello
[root@docker _data]# docker container run -it -d --name Centos6.7-A --restart always -v hello:/soft centos:centos6.7 /bin/bash
cde91c0a176a0c2f6e5792fec16b499e083f3272f759d3a8be2b93df2d9c3e07
[root@docker _data]# docker inspect cde91c0a176a | grep Mounts -A 20
[root@cde91c0a176a soft]# touch 1
[root@cde91c0a176a soft]# pwd
/soft
[root@cde91c0a176a soft]# exit
[root@docker _data]# pwd
/var/lib/docker/volumes/hello/_data
[root@docker _data]# ls
1
[root@docker ~]# docker inspect cde91c0a176a | grep Mounts -A 20
"Mounts": [
{
"Type": "volume",
"Name": "hello",
"Source": "/var/lib/docker/volumes/hello/_data",
"Destination": "/soft",
"Driver": "local",
"Mode": "z",
"RW": true,
"Propagation": ""
}

4、docker-compose操作命令总结

  • 注意:以下操作命令需在有docker-compose.yml配置文件的目录下执行,否则需指定配置文件-f
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
31
#创建并启动服务
docker-compose up
#日志分离模式启动
docker-compose up -d
#停止服务
docker-compose stop
#启动已存在的服务
docker-compose start
#重启服务已存在的服务
docker-compose restart
#列出镜像
docker-compose images
#查看日志
docker-compose logs
docker-compose logs -f -t
#查看进程
docker-compose top
#列出compose应用中各个容器的状态、命令以及网络端口
docker-compose ps
#查看compose版本
docker-compose version
#暂停服务
docker-compose pause
#终止暂停服务
docker-compose unpause
#查看配置
docker-compose config
#用于停止并删除运行中的应用,它会删除容器和网络,不会删除镜像和卷
docker-compose down
#用于删除已停止的应用,它会删除容器和网络,不会删除镜像和卷
docker-compose rm
-------------本文结束感谢您的阅读-------------
LiGuanCheng wechat
如有问题,请与我微信交流或通过右下角“daovoice”与我联系~。
请我喝一杯咖啡~