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 | 以那个用户去运行容器 |
$ docker run --name="nginx-slb" -d -p 80:80 -v /data:/data nginx:latest
$ docker run -p 127.0.0.1:80:8080/tcp ubuntu 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...]
$ 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
$ 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 | 不截断输出 |
$ docker ps -a -q
$ 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 |
$ docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $INSTANCE_ID
$ $ 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 |
$ docker attach --sig-proxy=false nginx-slb
2.5 logs 命令
- 定义:获取容器的日志
- 格式:
docker logs [OPTIONS] CONTAINER
编号 | 参数 | 解释说明 |
---|
1 | -f | 跟踪日志输出 |
2 | -t | 显示时间戳 |
3 | --tail | 仅列出最新 N 条容器日志 |
4 | --since | 显示某个开始时间的所有日志 |
$ docker logs --since="2018-11-11" --tail=10 nginx-slb
2.6 export 命令
- 定义:将文件系统作为一个 tar 归档文件导出到 STDOUT
$ 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]
$ 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 |
$ docker stats
$ docker stats --no-stream
$ docker stats --no-stream registry
$ docker stats $(docker ps --format={{.Names}})
$ docker stats --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}"
$ 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) |
$ 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 | 列出收藏数不小于指定值的镜像 |
$ 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 - .
$ 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...]
$ 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