跳转至

Docker常用命令

1. 容器生命周期

主要介绍容器的运行和进入操作

1.1 run 命令

定义:创建一个新的容器并运行一个命令
格式:docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

编号 参数 解释说明
1 --name="nginx-lb" 为容器指定一个名称
2 -d 后台运行容器并返回容器 ID
3 -i 以交互模式运行容器,通常与-t 同时使用
4 -t 为容器重新分配一个伪输入终端,通常与-i 同时使用
5 -p 端口映射,格式为<宿主机端口:容器端口>
6 -v 给容器挂载存储卷,挂载到容器的某个目录
7 --entrypoint="" 覆盖 image 的入口点
8 -e user="escape" 设置环境变量
9 --env-file=[] 从指定文件读入环境变量
10 -h "node1" 指定容器的 hostname 属性
11 --dns 8.8.8.8 指定容器使用的 DNS 服务器,默认和宿主一致
12 --cpuset="0,1,2" 绑定容器到指定 CPU 运行
13 -m 设置容器使用内存的最大值
14 --net="bridge" 指定容器的网络连接类型,支持 bridge/host/none/container 类型
15 --link=[] 添加链接到另一个容器
16 --expose=[] 开放一个端口或一组端口
17 --add-host 添加自定义主机到 IP 映射,会写入容器的 hosts 文件中
18 --health-cmd 运行检查运行状况的命令
19 --ip 指定容器的 IP 地址
20 --mount 将文件系统挂载附加到容器
21 --rm 退出时自动删除容器
22 --restart 重新启动容器退出时应用的策略
23 --user 以那个用户去运行容器
1
2
3
4
5
6
7
8
## 以后台模式启动一个容器并将容器命名为nginx-slb    
docker run --name="nginx-slb" -d -p 80:80 -v /data:/data nginx:latest    

## 绑定容器的8080端口,并将其映射到本地主机127.0.0.1的80端口上    
docker run -p 127.0.0.1:80:8080/tcp ubuntu bash    

## 以交互模式启动一个容器,并在容器内执行/bin/bash命令    
docker run -it nginx:latest /bin/bash    

1.2 start/stop/restart 命令

启动:docker start [OPTIONS] CONTAINER [CONTAINER...]
停止:docker stop [OPTIONS] CONTAINER [CONTAINER...]
重启:docker restart [OPTIONS] CONTAINER [CONTAINER...]

编号 命令 解释说明
1 docker start 启动已经被停止的容器
2 docker stop 停止运行中的容器
3 docker restart 重启容器
1
2
3
4
5
6
7
8
## 启动已被停止的容器    
docker start nginx-slb    

## 停止运行中的容器    
docker stop nginx-slb    

## 重启容器    
docker restart nginx-slb    

1.3 kill 命令

定义:杀掉一个或多个运行中的容器
格式:docker kill [OPTIONS] CONTAINER [CONTAINER...]

编号 参数 解释说明
1 -s 向容器发送一个信号
## 杀掉运行中的容器    
docker kill -s KILL nginx-slb    

1.4 rm 命令

定义:删除一个或多少容器
格式:docker rm [OPTIONS] CONTAINER [CONTAINER...]

编号 参数 解释说明
1 -f 通过 SIGKILL 信号强制删除一个运行中的容器
2 -l 移除容器间的网络连接,而非容器本身
3 -v 删除容器本身并删除与容器关联的卷
1
2
3
4
5
6
7
8
## 强制删除容器    
docker rm -f nginx-slb    

## 移除容器nginx对容器redis的连接,连接名backend    
docker rm -l backend    

## 删除容器并删除容器挂载的数据卷    
docker rm -v nginx-slb    

1.5 pause/unpause 命令

停止:docker pause [OPTIONS] CONTAINER [CONTAINER...]
恢复:docker unpause [OPTIONS] CONTAINER [CONTAINER...]

编号 命令 解释说明
1 docker pause 暂停容器中所有的进程
2 docker unpause 恢复容器中所有的进程
1
2
3
4
5
## 暂停容器    
docker pause nginx-slb    

## 恢复容器    
docker unpause nginx-slb    

1.6 create 命令

定义:创建一个新的容器但不启动它
格式:docker create [OPTIONS] IMAGE [COMMAND] [ARG...]

编号 参数 解释说明
1 -w 设置容器内的工作目录
2 --mac-address 设置容器的 MAC 地址
## 创建一个容器    
docker create -v /home/docker:/docker --name docker ubuntu    

2. 容器基本操作

使用容器的日常操作基本需要使用命令

2.1 ps 命令

定义:列出容器
格式:docker ps [OPTIONS]

编号 参数 解释说明
1 -a 显示所有的容器,包括未运行的容器
2 -q 静默模式,只显示容器编号
3 -f 根据条件过滤显示的内容
4 --format 指定返回值的模板文件
5 -l 显示最近创建的容器
6 -n 列出最近创建的 n 个容器
7 -s 显示总的文件大小
8 --no-trunc 不截断输出
## 列出所有创建的容器ID    
docker ps -a -q    

## 列出最近创建的5个容器信息    
docker ps -n 5    

## 筛选    
docker ps -f since=6e63f6ff38b0    
docker ps --filter status=running    
docker ps --filter "name=nostalgic_stallman"    

## 格式化    
docker network inspect --format "{{.ID}}" net1    
docker ps --filter volume=/data --format "table {{.ID}}\t{{.Mounts}}"    

2.2 inspect 命令

定义:获取容器/镜像的元数据
格式:docker inspect [OPTIONS] NAME|ID [NAME|ID...]

编号 参数 解释说明
1 -f 指定返回值的模板文件
2 -s 显示总的文件大小
3 --type 为指定类型返回 JSON
## 获取容器IP地址    
docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $INSTANCE_ID    

## 获取容器MAC地址    
docker inspect --format='{{range .NetworkSettings.Networks}}{{.MacAddress}}{{end}}' $INSTANCE_ID    

## 获取容器日志路径    
docker inspect --format='{{.LogPath}}' $INSTANCE_ID    

## 获取容器名称    
docker inspect --format='{{.Config.Image}}' $INSTANCE_ID    

2.3 exec 命令

定义:在运行的容器中执行命令
格式:docker exec [OPTIONS] CONTAINER COMMAND [ARG...]

编号 参数 解释说明
1 -d 在后台运行
2 -i 即使没有附加也保持 STDIN 打开
3 -t 分配一个伪终端
4 -e 设置环境变量
5 -u 设置用户
6 -w 设置容器的工作目录
1
2
3
4
5
6
7
8
## 后台执行创建文件    
docker exec -d ubuntu_bash touch /tmp/execWorks    

## 设置环境变量    
docker exec -it -e VAR=1 ubuntu_bash bash    

## 设置工作目录    
docker exec -it -w /root ubuntu_bash pwd    

2.4 attach 命令

定义:连接到正在运行中的容器
格式:docker attach [OPTIONS] CONTAINER

编号 参数 解释说明
1 --sig-proxy 代理收到所有进程的信号,默认为 true
1
2
3
## 连接连接到容器查看访问信息    
## 在attach是可以带上--sig-proxy=false来确保CTRL-D或CTRL-C不会关闭容器    
docker attach --sig-proxy=false nginx-slb    

2.5 logs 命令

定义:获取容器的日志
格式:docker logs [OPTIONS] CONTAINER

编号 参数 解释说明
1 -f 跟踪日志输出
2 -t 显示时间戳
3 --tail 仅列出最新 N 条容器日志
4 --since 显示某个开始时间的所有日志
## 查看容器从2018年11月11日后的最新10条日志    
docker logs --since="2018-11-11" --tail=10 nginx-slb    

2.6 export 命令

定义:将文件系统作为一个 tar 归档文件导出到 STDOUT

编号 参数 解释说明
1 -o 将输入内容写到文件
1
2
3
## 导出镜像    
docker export a404c6c174a2 > latest.tar    
docker export -o mysql-`date +%Y%m%d`.tar a404c6c174a2    

2.7 top 命令

定义:查看容器中运行的进程信息,支持 ps 命令参数
格式:docker top [OPTIONS] CONTAINER [ps OPTIONS]

1
2
3
## 容器运行时不一定有/bin/bash终端来交互执行top命令    
## 而且容器还不一定有top命令可以使用docker top来实现查看    
docker top nginx-slb    

2.8 stats 命令

定义:用来显示容器使用的系统资源
格式:docker stats [OPTIONS] [CONTAINER]

编号 参数 解释说明
1 --all Show all containers (default shows just running)
2 --format string Pretty-print images using a Go template
3 --no-stream Disable streaming stats and only pull the first result
4 --no-trunc Do not truncate output
1
2
3
4
5
6
7
8
9
## 不带任何选项,则会默认输出并输出全部容器的使用情况    
## [CONTAINER]: 以短格式显示容器的ID    
## [CPU %]: CPU的使用情况    
## [MEM USAGE/LIMIT]: 当前使用的内存和最大可以使用的内存    
## [MEM %]: 以百分比的形式显示内存使用情况    
## [NET I/O]: 网络I/O数据    
## [BLOCK I/O]: 磁盘I/O数据    
## [PIDS]: 显示PID号    
docker stats    
1
2
3
4
5
6
7
8
9
## 可以通过 --no-stream 选项只输出当前的状态    
docker stats --no-stream    

## 只输出指定的容器    
## 第一列不再显示默认的容器ID,而是显示了我们传入的容器名称和ID    
docker stats --no-stream registry    

## 基于此,我们可以通过简单的方式使用容器的名称替代默认输出中的容器ID    
docker stats $(docker ps --format={{.Names}})    
## 格式化输出的结果    
## .Container => 根据用户指定的名称显示容器的名称或ID    
## .Name => 容器名称    
## .ID => 容器ID    
## .CPUPerc => CPU使用率    
## .MemUsage => 内存使用量    
## .NetIO => 网络I/O    
## .BlockIO => 磁盘I/O    
## .MemPerc => 内存使用率    
## .PIDs => PID号    
docker stats --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}"    

## 还可以通过format选项输出json格式的结果    
docker stats --no-stream --format \    
 "{\"container\":\"{{ .Container }}\",\"memory\":{\"raw\":\"{{ .MemUsage }}\",\"percent\":\"{{ .MemPerc }}\"},\"cpu\":\"{{ .CPUPerc }}\"}"    

2.9 port 命令

定义:列出指定的容器的端口映射或查找将 PRIVATE_PORT NAT 公开
格式:docker port [OPTIONS] CONTAINER [PRIVATE_PORT[/PROTO]]

## 查看开放端口    
docker port nginx-slb    

2.10 wait 命令

定义:阻塞运行直到容器停止,然后打印出它的退出代码
格式:docker wait [OPTIONS] CONTAINER [CONTAINER...]

## 会有一个退出码    
docker wait nginx-slb    

2.11 events 命令

定义:可以帮助你实时获取 docker 的各种事件信息
格式:docker events [OPTIONS]

编号 参数 解释说明
1 --filter filter Filter output based on conditions provided
2 --format string Format the output using the given Go template
3 --since string Show all events created since timestamp
4 --until string Stream events until this timestamp
## 比如创建了一个容器    
docker events    

2.12 update 命令

定义:不用重新部署服务来调整镜像配置
格式:docker update [OPTIONS] CONTAINER [CONTAINER...]

编号 参数 解释说明
1 --cpus decimal Number of CPUs
2 --memory bytes Memory limit
3 --restart string Restart policy to apply when a container exits
4 --pids-limit int Tune container pids limit (set -1 for unlimited)
## 设置的nginx容器cpu或者内存太小    
docker update nginx --cpus 2    

3. 容器文件系统

排错和查看容器的命令

3.1 commit 命令

定义:从容器创建一个新的镜像
格式:docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

编号 参数 解释说明
1 -a 提交的镜像作者
2 -c 使用 Dockerfile 指令来创建镜像
3 -m 提交时的说明文字
4 -p 在 commit 时,将容器暂停
## 将容器倒为一个镜像    
docker commit -a "escape" -m "slb" a404c6c174a2 nginx-slb:v1    

3.2 diff 命令

定义:检查容器里文件结构的更改
格式:docker diff [OPTIONS] CONTAINER

1
2
3
4
5
6
7
8
## 查看数据层的变化    
docker diff 1fdfd1f54c1b    
C /dev    
C /dev/console    
C /dev/core    
C /dev/stdout    
C /dev/fd    
C /dev/ptmx    

3.3 cp 命令

定义:用于容器与主机之间的数据拷贝
格式:docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
格式:docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH

编号 参数 解释说明
1 -a 存档模式
2 -L 保持源目标中的链接
## 数据拷贝    
docker cp /www/nginx 96f7f14e99ab:/www/    

4. 镜像仓库使用

上传或者下载镜像的命令和操作

4.1 login/logout 命令

登录:docker login [OPTIONS] [SERVER]
退出:docker logout [OPTIONS] [SERVER]

编号 命令 解释说明
1 docker login 登陆到一个 Docker 镜像仓库
2 docker logout 登出到一个 Docker 镜像仓库
1
2
3
## 登录    
docker login localhost:8080    
cat ~/my_password.txt | docker login --username foo --password-stdin    

4.2 pull 命令

定义:从镜像仓库中拉取或者更新指定镜像
格式:docker pull [OPTIONS] NAME[:TAG|@DIGEST]

编号 参数 解释说明
1 -a 拉取所有 tagged 镜像
2 --disable-content-trust 忽略镜像的校验,默认开启
## 拉取或者更新    
docker pull debian:jessie    

4.3 push 命令

定义:将本地的镜像上传到镜像仓库
格式:docker push [OPTIONS] NAME[:TAG]

编号 参数 解释说明
1 --disable-content-trust 忽略镜像的校验,默认开启
## 上传    
docker push nginx-slb:0.-.1    

定义:从 Docker Hub 查找镜像
格式:docker search [OPTIONS] TERM

编号 参数 解释说明
1 --automated 只列出 automated build 类型的镜像
2 --no-trunc 显示完整的镜像描述
3 -s 列出收藏数不小于指定值的镜像
## 收藏数大于10的镜像    
docker search -s 10 java    

4.5 load/save 命令

定义:可以导入导出本地镜像
格式:docker load [OPTIONS]
格式: docker save [OPTIONS] IMAGE [IMAGE...]

编号 参数 解释说明
1 load 可以把镜像从 tar 文件导入到 docker 中
2 save 把一个镜像保存到 tar 文件中
1
2
3
4
5
## 导入    
docker load -i registry-2.7.1.tar    

## 导出    
docker save registry:2.7.1 -o registry-2.7.1.tar    

5. 本地镜像管理

更好的管理我们本地的镜像文件

5.1 images 命令

定义:列出本地镜像
格式:docker images [OPTIONS] [REPOSITORY[:TAG]]

编号 参数 解释说明
1 -a 列出本地所有的镜像
2 ---digests 显示镜像的摘要信息
3 -f 显示满足条件的镜像
4 --format 指定返回值的模板文件
5 --no-trunc 显示完整的镜像信息
6 -q 只显示镜像 ID
## 查看镜像    
docker images -a    

5.2 rmi 命令

定义:删除本地一个或多个镜像
格式:docker rmi [OPTIONS] IMAGE [IMAGE...]

编号 参数 解释说明
1 -f 强制删除
2 --no-prune 不移除该镜像的过程镜像,默认移除
## 删除镜像    
docker rmi -f runoob/ubuntu:v4    

5.3 tag 命令

定义:标记本地镜像,将其归入某一仓库
格式:docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]

## 重命名    
docker tag httpd fedora/httpd:version1.0    

5.4 build 命令

定义:用于使用 Dockerfile 创建镜像
格式:docker build [OPTIONS] PATH | URL | -

编号 参数 解释说明
1 --build-arg=[] 设置镜像创建时的变量
2 -f 指定要使用的 Dockerfile 路径,默认为当前目录下的 Dockerfile 文件
3 --force-rm 设置镜像过程中删除中间容器
4 --isolation 使用容器隔离技术
5 --label=[] 设置镜像使用的元数据
6 -m 设置内存最大值
7 --no-cache 创建镜像的过程不使用缓存
8 --pull 尝试去更新镜像的新版本
9 -q 安静模式,成功后只输出镜像 ID
10 --rm 设置镜像成功后删除中间容器
11 -t 镜像的名字及标签
12 --network 默认 default,在构建期间设置 RUN 指令的网络模式
13 --add-host 添加自定义主机到 IP 映射
14 --target 只构建某一阶段的镜像
## 常见构建方式    
docker build .    

## 设置标签    
docker build -t vieux/apache:2.0 .    

## 冲远程服务器获取文件构建    
curl example.com/remote/Dockerfile | docker build -f - .    

## 添加自定义主机到IP映射    
docker build --add-host=docker:10.180.0.1 .    

## 只构建某一阶段的镜像    
docker build -t mybuildimage --target build-env .    

## 指定代理地址    
docker build --build-arg HTTP_PROXY=http://10.20.30.2:1234 .    

5.5 history 命令

定义:查看指定镜像的创建历史
格式:docker history [OPTIONS] IMAGE

编号 参数 解释说明
1 -H 以可读的格式打印镜像大小和日期
2 --no-trunc 显示完整的提交记录
3 -q 仅列出提交记录 ID
## 查看本地镜像的创建历史    
docker history nginx:v3    

5.6 save 命令

定义:将指定镜像保存成 tar 归档文件
格式:docker save [OPTIONS] IMAGE [IMAGE...]

编号 参数 解释说明
1 -o 输出到的文件
## 导出    
docker save ubuntu:v3 -o my_ubuntu_v3.tar    

5.7 import 命令

定义:从归档文件中创建镜像
格式:docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]

编号 参数 解释说明
1 -c 应用 docker 指令创建镜像
2 -m 提交时的说明文字
1
2
3
## 镜像归档文件    
docker import my_ubuntu_v3.tar    
docker import my_ubuntu_v3.tar ubuntu:v4