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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了