Docker常用命令


Docker 是一个开放源代码的软件项目,该项目在 2013 年开源于 GitHub。它是云服务技术上的一次创新,让应用程序布署在软件容器下的工作可以自动化进行,借此在 Linux 操作系统上,提供一个额外的软件抽象层,以及操作系统层虚拟化的自动管理机制。

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 以那个用户去运行容器
# 以后台模式启动一个容器并将容器命名为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 重启容器
# 启动已被停止的容器
$ 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 删除容器本身并删除与容器关联的卷
# 强制删除容器
$ 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 恢复容器中所有的进程
# 暂停容器
$ 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 设置容器的工作目录
# 后台执行创建文件
$ 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
# 连接连接到容器查看访问信息
# 在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 将输入内容写到文件
# 导出镜像
$ 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]
# 容器运行时不一定有/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
# 不带任何选项,则会默认输出并输出全部容器的使用情况
# [CONTAINER]: 以短格式显示容器的ID
# [CPU %]: CPU的使用情况
# [MEM USAGE/LIMIT]: 当前使用的内存和最大可以使用的内存
# [MEM %]: 以百分比的形式显示内存使用情况
# [NET I/O]: 网络I/O数据
# [BLOCK I/O]: 磁盘I/O数据
# [PIDS]: 显示PID号
$ docker stats
# 可以通过 --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
# 查看数据层的变化
$ 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 镜像仓库
# 登录
$ 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

4.4 search 命令

  • 定义:从 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 文件中
# 导入
$ 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 提交时的说明文字
# 镜像归档文件
$ docker import my_ubuntu_v3.tar
$ docker import my_ubuntu_v3.tar ubuntu:v4

文章作者: Escape
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Escape !
  目录