docker命令总结
1.镜像管理
1.1 镜像仓库
1.1.1 login
-
作用:登陆镜像仓库
-
语法
# docker login | loginout [-u xxx -p 密码 ]
默认Docker Hub
1.1.2 pull
-
作用:拉取镜像
-
语法
# docker pull 镜像名[:标签]
- 参数:
-a 拉取所有tagged镜像
–disable-content-trust,忽略镜像校验,默认校验
- 示例:
下载java最新镜像
# docker pull java
下载java所有镜像
# docker pull -a java
1.1.3 push
-
作用:上传镜像
-
语法
# docker push 参数 镜像名:[标签]
- 参数
–disable-content-trust,忽略镜像校验,默认校验
- 示例
# docker push myapache:v1
1.1.4 search
-
作用:查找镜像
-
语法
# docker search 服务名
- 参数:
–automated:只列出自动化安装的镜像
–no-trunc:显示完整镜像描述
-s:列出收藏数不小于某值的镜像
- 示例:
# docker search -s 10 java
1.2 本地镜像操作
1.2.1 image
- 作用:列出本地镜像
- 语法:
# docker images
- 参数
-a,列出本地所有镜像(不加过滤掉中间层镜像)
-f,显示满足条件的镜像
–format,指定返回值的模板文件
-q,只显示镜像ID
- 示例
# docker images # docker images httpd
1.2.2 rmi
- 作用:删除镜像
- 语法:
# docker rmi 镜像名:标记
# docker rmi 唯一标识(不用写全)
- 参数
-f ,强制删除
–no-prune,不移除该镜像的过程镜像
- 示例:
# docker rmi -f runoob/ubantu:v4
1.2.3 tag
-
作用:修改镜像名
-
语法:
# docker tag 原名:标记 新名:标记
1.2.4 build
-
作用:使用Dockerfile创建镜像
-
语法:
# doker build 参数 路径|url
- 参数:
–build-arg=[] :设置镜像创建时的变量;
–cpu-shares :设置 cpu 使用权重;
–cpu-period :限制 CPU CFS周期;
–cpu-quota :限制 CPU CFS配额;–cpuset-cpus :指定使用的CPU id;
–cpuset-mems :指定使用的内存 id;
–disable-content-trust :忽略校验,默认开启;
-f :指定要使用的Dockerfile路径;
–force-rm :设置镜像过程中删除中间容器;
–isolation :使用容器隔离技术;
–label=[] :设置镜像使用的元数据;
-m :设置内存最大值;
–memory-swap :设置Swap的最大值为内存+swap,"-1"表示不限swap;
–no-cache :创建镜像的过程不使用缓存;
–pull :尝试去更新镜像的新版本;
-q :安静模式,成功后只输出镜像ID;
–rm :设置镜像成功后删除中间容器;
–shm-size :设置/dev/shm的大小,默认值是64M;
–ulimit :Ulimit配置。
- 示例
# docker build -t tomcat:v1 -f tomcat-Dokcerfile .
1.2.5 save 和 load
- 作用:
save:将指定镜像加载到文件
load:从文件中加载镜像
- 语法:
# docker save -o 文件名 镜像名
# docker load -i 文件名
- 示例
# docker save -o tomcat.tar.gz docker.io/tomcat
# docker load -i tomcat.tar.gz
1.2.6 export 和 inport
- 作用:
export:将容器保存为tar文件
import:将export的tar文件导入为镜像
2)语法
# docker export -o 指定文件名 容器名
# docker import 文件名 要导出的镜像名
- 示例:
# docker export -o /tmp/nginx.tar 59eabc2614ef
# docker import nginx.tar nginx:v01
1.2.7 history
- 作用:查看指定镜像的创建历史
- 语法:
# docker history 参数 镜像名
- 参数:
-H :以可读的格式打印镜像大小和日期,默认为true;
–no-trunc :显示完整的提交记录;
-q :仅列出提交记录ID。
2. 容器管理
2.1 生命周期管理
2.1.2 run
- 语法
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
- 参数
-a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;
-d: 后台运行容器,并返回容器ID;
-i: 以交互模式运行容器,通常与 -t 同时使用;
-P: 随机端口映射,容器内部端口随机映射到主机的高端口
-p: 指定端口映射,格式为:主机(宿主)端口:容器端口
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
--name="nginx-lb": 为容器指定一个名称;
--dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致;
--dns-search example.com: 指定容器DNS搜索域名,默认和宿主一致;
-h "mars": 指定容器的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: 绑定一个卷
- –link=[ ]
1)创建一个mysql-server 容器
docker run --name=mysql_server -d -P mysql_server
2)创建一个客户端,用 --link 链接server
docker run --name=mysql_client1 --link=mysql_server:db -t -i mysql_client /usr/bin/mysql -h db -u root -pletmein
说明:将mysql_server定义为db,在后边命令里使用(-h db )
- 简单示例
docker run --name mynginx -d nginx:latest
docker run -P -d nginx:latest
docker run -p 80:80 -v /data:/data -d nginx:latest
#绑定容器的 8080 端口,并将其映射到本地主机 127.0.0.1 的 80 端口上。
docker run -p 127.0.0.1:80:8080/tcp ubuntu bash
docker run -it nginx:latest /bin/bash
- 执行一个循环保证容器启动
docker run -d centos /bin/sh -c "while true; do echo hello world; sleep 1;done"
2.1.3 start/stop/restart
略
2.1.4 kill
docker kill [OPTIONS] CONTAINER [CONTAINER...]
docker kill -s KILL mynginx
2.1.5 rm
- 语法
docker rm [OPTIONS] CONTAINER [CONTAINER...]
OPTIONS说明:
- 参数
-f :通过 SIGKILL 信号强制删除一个运行中的容器。
-l :移除容器间的网络连接,而非容器本身。
-v :删除与容器关联的卷。
- 实例
# 强制删除容器 db01、db02:
docker rm -f db01 db02
#移除容器 nginx01 对容器 db01 的连接,连接名 db:
docker rm -l db nginx01
#删除容器 nginx01, 并删除容器挂载的数据卷:
docker rm -v nginx01
#删除所有已经停止的容器:
docker rm $(docker ps -a -q)
2.1.6 pause/unpause
-
作用
docker pause :暂停容器中所有的进程。
docker unpause :恢复容器中所有的进程。 -
语法
docker pause [OPTIONS] CONTAINER [CONTAINER...]
docker unpause [OPTIONS] CONTAINER [CONTAINER...]
- 实例
#暂停数据库容器db01提供服务。
docker pause db01
#恢复数据库容器db01提供服务。
docker unpause db01
2.1.7 create
-
作用
docker create :创建一个新的容器但不启动它
用法同 docker run -
语法
docker create [OPTIONS] IMAGE [COMMAND] [ARG...]
-
参数
同run -
实例
使用docker镜像nginx:latest创建一个容器,并将容器命名为myrunoob
docker create --name myrunoob nginx:latest
2.1.8 exec
- 语法
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
- 参数
-d :分离模式: 在后台运行
-i :即使没有附加也保持STDIN 打开
-t :分配一个伪终端
- 实例
#在容器 mynginx 中以交互模式执行容器内 /root/runoob.sh 脚本:
docker exec -it mynginx /bin/sh /root/runoob.sh
#在容器 mynginx 中开启一个交互模式的终端:
docker exec -i -t mynginx /bin/bash
2.2 容器操作
2.2.1 ps
- 语法
docker ps [OPTIONS]
- OPTIONS
-a :显示所有的容器,包括未运行的。
-f :根据条件过滤显示的内容。
--format :指定返回值的模板文件。
-l :显示最近创建的容器。
-n :列出最近创建的n个容器。
--no-trunc :不截断输出。
-q :静默模式,只显示容器编号。
-s :显示总的文件大小。
- 容器的7种状态
created(已创建)
restarting(重启中)
running(运行中)
removing(迁移中)
paused(暂停)
exited(停止)
dead(死亡)
- 示例
列出最近创建的5个容器信息。
runoob@runoob:~$ docker ps -n 5
CONTAINER ID IMAGE COMMAND CREATED
09b93464c2f7 nginx:latest "nginx -g 'daemon off" 2 days ago ...
b8573233d675 nginx:latest "/bin/bash" 2 days ago ...
b1a0703e41e7 nginx:latest "nginx -g 'daemon off" 2 days ago ...
f46fb1dec520 5c6e1090e771 "/bin/sh -c 'set -x \t" 2 days ago ...
a63b4a5597de 860c279d2fec "bash" 2 days ago ...
列出所有创建的容器ID。
runoob@runoob:~$ docker ps -a -q
09b93464c2f7
b8573233d675
b1a0703e41e7
f46fb1dec520
a63b4a5597de
6a4aa42e947b
...
2.2.2 stats
- 语法
docker stats [OPTIONS] [CONTAINER...]
-
选项
–all, -a–no-stream 只显示第一次取到的数据,默认一直显示
-
常用显示
[root@das-meeting-16 kong]# docker stats --no-stream
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
e3b762d3fd0a kong_kong_1 0.24% 416.2MiB / 15.5GiB 2.62% 729kB / 767kB 1.36MB / 49.2kB 9
- 格式化输出
docker stats --no-stream --format \
"table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}"
所有占位符如下:
.Container 根据用户指定的名称显示容器的名称或 ID。
.Name 容器名称。
.ID 容器 ID。
.CPUPerc CPU 使用率。
.MemUsage 内存使用量。
.NetIO 网络 I/O。
.BlockIO 磁盘 I/O。
.MemPerc 内存使用率。
.PIDs PID 号。
2.2.3 inspect
2.2.3.1 基本使用
-
作用
获取容器/镜像的元数据。 -
语法
docker inspect [OPTIONS] NAME|ID [NAME|ID...]
- OPTIONS说明:
-f :查看容器某一项的信息
-s :显示总的文件大小。
--type :为指定类型返回JSON。
- 示例1
[root@das-meeting-16 ~]# docker inspect iot-apigw
[
{
"Id": "fae8a91beb0a5cf7008bd7507b2037c463775848c6cf8e8eb4406e99c3ecaf89",
"Created": "2020-04-17T09:45:47.830765333Z",
"Path": "/svc.apigw",
"Args": [],
"State": {
"Status": "running",
"Running": true,
"Paused": false,
"Restarting": false,
"OOMKilled": false,
"Dead": false,
"Pid": 120119,
"ExitCode": 0,
"Error": "",
"StartedAt": "2020-05-06T12:43:10.370184639Z",
"FinishedAt": "2020-05-06T12:42:53.282001566Z"
},
"Image": "sha256:32aa9934fae627c8bbfe1dc1218f52b19476ff9a66b29514e45d471ab554d781",
"ResolvConfPath": "/data/docker/containers/fae8a91beb0a5cf7008bd7507b2037c463775848c6cf8e8eb4406e99c3ecaf89/resolv.conf",
"HostnamePath": "/data/docker/containers/fae8a91beb0a5cf7008bd7507b2037c463775848c6cf8e8eb4406e99c3ecaf89/hostname",
"HostsPath": "/data/docker/containers/fae8a91beb0a5cf7008bd7507b2037c463775848c6cf8e8eb4406e99c3ecaf89/hosts",
"LogPath": "/data/docker/containers/fae8a91beb0a5cf7008bd7507b2037c463775848c6cf8e8eb4406e99c3ecaf89/fae8a91beb0a5cf7008bd7507b2037c463775848c6cf8e8eb4406e99c3ecaf89-json.log",
"Name": "/iot-apigw",
"RestartCount": 0,
"Driver": "overlay2",
"Platform": "linux",
"MountLabel": "",
"ProcessLabel": "",
"AppArmorProfile": "",
"ExecIDs": null,
"HostConfig": {
"Binds": [
"/data/dast/iot/prd.conf:/prd.conf:rw",
"/data/dast/iot/logs:/logs:rw",
"/data/dast/iot/keys:/etc/iot:rw",
"/data/dast/iot/svc.apigw.prd.conf:/svc.apigw.prd.conf:rw",
"/etc/localtime:/etc/localtime:rw"
],
如上,可以输出容器的各种信息包括:
docker-compose.yaml中定义的所有信息,甚至hots、hostname文件在宿主机中的位置
2.2.3.2 查看容器某一项信息
- 查看某一项信息:
[root@das-meeting-16 ~]# docker inspect -f {{.Id}} iot-apigw
fae8a91beb0a5cf7008bd7507b2037c463775848c6cf8e8eb4406e99c3ecaf89
[root@das-meeting-16 ~]# docker inspect -f {{.Config.Hostname}} iot-apigw
fae8a91beb0a
- key在某个范围查找
[root@das-meeting-16 ~]# docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' iot-apigw
172.23.0.3
上图range 表示在这个范围查找,后边的key,注意最后要有{{end}}
2.2.4 top
[root@das-meeting-16 ~]# docker top iot-apigw
UID PID PPID C STIME TTY TIME CMD
root 120119 120088 0 5月06 ? 01:16:06 /svc.apigw
2.2.5 attach
连接到容器中,注意加上 --sig-proxy=false,否则ctrl+c 退出时,容器有可能stop
docker attach --sig-proxy=false iot-apigw
2.2.6 events
- 查看容器事件
- 语法
docker events [OPTIONS]
- OPTIONS说明:
-f :根据条件过滤事件;
--since :从指定的时间戳后显示所有事件;
--until :流水时间显示到指定的时间为止;
- 示例
[root@das-b4 ~]# docker events --since="1591590435"
2020-06-08T09:57:36.127905035-04:00 container attach 31a5c5ef33d44b628fe2a308362830d2401a2e3436d80df8ca695a7df626ee0e (com.docker.compose.config-hash=f0348a267d54724ef74619dc2d6ca603b860cdb1a783622d505085cc608201f4, com.docker.compose.container-number=1, com.docker.compose.oneoff=False, com.docker.compose.project=iot, com.docker.compose.service=apigw, com.docker.compose.version=1.24.0, image=iot/svc.apigw:1.1.1, maintainer=Hongjun Du<duhongjun@boe.com.cn>, name=iot-apigw)
[root@das-b4 ~]# docker events --since="1588926435" -f "image"="mysql:5.7"
2020-05-09T06:02:57.006139509-04:00 container start eb2044574d569e97532fd0df03e4667b1c59eef1ce750fae9206db882b773d96 (com.docker.compose.config-hash=fde3194713b144a0f2f02a45390a139a6a5602f4eb449c28ef006bcfa0b9096d, com.docker.compose.container-number=1, com.docker.compose.oneoff=False, com.docker.compose.project=mysql, com.docker.compose.service=mysql, com.docker.compose.version=1.24.0, image=mysql:5.7, name=mysql_mysql_1)
2.2.7 logs
- 语法
docker logs [OPTIONS] CONTAINER
- OPTIONS说明:
-f : 跟踪日志输出
--since :显示某个开始时间的所有日志
-t : 显示时间戳
--tail :仅列出最新N条容器日志
- 示例
[root@das-b4 ~]# docker logs --since="2018-06-01" --tail=10 mysql_mysql_1
2020-05-09T10:03:50.163225Z 0 [Note] Skipping generation of RSA key pair as key files are present in data directory.
2020-05-09T10:03:50.420794Z 0 [Note] Server hostname (bind-address): '*'; port: 3306
2020-05-09T10:03:50.420873Z 0 [Note] IPv6 is available.
2020-05-09T10:03:50.420903Z 0 [Note] - '::' resolves to '::';
2020-05-09T10:03:50.420935Z 0 [Note] Server socket created on IP: '::'.
2020-05-09T10:03:51.025040Z 0 [Warning] Insecure configuration for --pid-file: Location '/var/run/mysqld' in the path is accessible to all OS users. Consider choosing a different directory.
2020-05-09T10:03:53.492378Z 0 [Note] InnoDB: Buffer pool(s) load completed at 200509 18:03:53
2020-05-09T10:04:02.496968Z 0 [Note] Event Scheduler: Loaded 0 events
2020-05-09T10:04:02.497378Z 0 [Note] mysqld: ready for connections.
Version: '5.7.28' socket: '/var/run/mysqld/mysqld.sock' port: 3306 MySQL Community Server (GPL)
2.2.8 wait
-
作用
阻塞运行直到容器停止,然后打印出它的退出代码。 -
语法
docker wait [OPTIONS] CONTAINER [CONTAINER...]
- 实例
docker wait CONTAINER
2.2.9 export/import
-
作用:
export:将容器存储为tar包
import:将expot存储的tar包释放为镜像 -
语法
docker export -o xxx.tar 容器名或ID
docker import xxxx.tar 镜像名:tag
- 示例
docker export -o postgres-export.tar postgres
2.2.10 port
- 作用:查看端口
- 语法
# docker port 容器名
- 示例
# docker port 59eabc2614ef 80/tcp -> 0.0.0.0:80
# docker port kickass_pike 80/tcp -> 0.0.0.0:80
2.3 system命令
2.3.1 容器空间使用情况
[root@das-meeting-16 docker]# docker system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 40 21 5.442GB 2.643GB (48%)
Containers 22 22 35.07MB 0B (0%)
Local Volumes 8 8 4.495GB 0B (0%)
Build Cache 0 0 0B 0B
2.3.2 查看实时事件
docker system events
2.3.3 docker 系统信息
docker system info
Containers: 22
Running: 22
Paused: 0
Stopped: 0
Images: 40
Server Version: 18.06.0-ce
Storage Driver: overlay2
Backing Filesystem: extfs
Supports d_type: true
Native Overlay Diff: false
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
Volume: local
Network: bridge host macvlan null overlay
Log: awslogs fluentd gcplogs gelf journald json-file logentries splunk syslog
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: d64c661f1d51c48782c9cec8fda7604785f93587
runc version: 69663f0bd4b60df09991c08812a60108003fa340
init version: fec3683
Security Options:
seccomp
Profile: default
Kernel Version: 3.10.0-514.el7.x86_64
Operating System: CentOS Linux 7 (Core)
OSType: linux
Architecture: x86_64
CPUs: 8
Total Memory: 15.5GiB
Name: das-meeting-16
ID: 5XO4:CLUY:LDI3:U54X:JIPR:HH5K:MJWR:VTBX:LB4Y:V2NR:6SPU:TOSC
Docker Root Dir: /data/docker
Debug Mode (client): false
Debug Mode (server): false
HTTP Proxy: 10.10.222.191:808
HTTPS Proxy: 10.10.222.191:808
Registry: https://index.docker.io/v1/
Labels:
Experimental: false
Insecure Registries:
10.252.96.249:1987
127.0.0.0/8
Registry Mirrors:
https://72idtxd8.mirror.aliyuncs.com/
Live Restore Enabled: false
2.3.4 自动清理
进阶内容见《docker服务清理》
[root@das-meeting-16 ~]# docker system prune
WARNING! This will remove:
- all stopped containers
- all networks not used by at least one container
- all dangling images
- all build cache
Are you sure you want to continue? [y/N] y
Deleted Networks:
app_kong-net
boe-iotgw-server_default
Deleted Images:
untagged: 10.252.97.57/iot/web@sha256:35f4fc8df4d6aee308f239d7b395435058ed95fa5467220f4a448822423f86eb
deleted: sha256:ef73a04f1abb55216af6447bc8823cb30d84e96081cd502ed3a57b36091b05a3
deleted: sha256:034bf5325ec3345d68a1762c3ec1a7404cf48d7b194ac11cd86597908147ab74
untagged: 10.252.96.249:1987/epd/image-studio@sha256:d662b294b43e4277dbbb79efee729c672ba0a7191840a7ebb706cfeac77e77af
deleted: sha256:e0b1eb162b0bea4e2564419150891ae624bc4523e43159f64b6b63e0411bc42b
deleted: sha256:d61799bda8e52190456503c6bfdfb137bc5a8c563dfc8cbda878bf53cc656fb9
如上可知:
- all stopped containers
- all networks not used by at least one container
- all dangling images
- all build cache
3. 一些通用选项
3.1 自动重启
- 语法:
docker run --restart=值 镜像
docker updata --restart=值 镜像
-
值:
always 任何情况下重启
on-failure 仅错误退出时重启 -
示例:
# docker run -d --restart=always docker.io/tomcat:v01
# docker update --restart=always tomcat-test-01
3.2 使用主机mac地址
–mac-address
# docker run -it --mac-address 00:16:3e:08:9f:8f docker.io/tomcat:v01