编辑
2023-03-15
容器虚拟化学习
00
请注意,本文编写于 553 天前,最后修改于 553 天前,其中某些信息可能已经过时。

目录

1. 容器生命周期
1.1 run 命令
1.2 start/stop/restart 命令
1.3 kill 命令
1.4 rm 命令
1.5 pause/unpause 命令
1.6 create 命令
2. 容器基本操作
2.1 ps 命令
2.2 inspect 命令
2.3 exec 命令
2.4 attach 命令
2.5 logs 命令
2.6 export 命令
2.7 top 命令
2.8 stats 命令
2.9 port 命令
2.10 wait 命令
2.11 events 命令
2.12 update 命令
3. 容器文件系统
3.1 commit 命令
3.2 diff 命令
3.3 cp 命令
4. 镜像仓库使用
4.1 login/logout 命令
4.2 pull 命令
4.3 push 命令
4.4 search 命令
4.5 load/save 命令
5. 本地镜像管理
5.1 images 命令
5.2 rmi 命令
5.3 tag 命令
5.4 build 命令
5.5 history 命令
5.6 save 命令
5.7 import 命令

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

Docker常用命令

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以那个用户去运行容器
bash
# 以后台模式启动一个容器并将容器命名为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...]
编号命令解释说明
1docker start启动已经被停止的容器
2docker stop停止运行中的容器
3docker restart重启容器
bash
# 启动已被停止的容器 $ docker start nginx-slb # 停止运行中的容器 $ docker stop nginx-slb # 重启容器 $ docker restart nginx-slb

1.3 kill 命令

  • 定义:杀掉一个或多个运行中的容器
  • 格式:docker kill [OPTIONS] CONTAINER [CONTAINER...]
编号参数解释说明
1-s向容器发送一个信号
bash
# 杀掉运行中的容器 $ docker kill -s KILL nginx-slb

1.4 rm 命令

  • 定义:删除一个或多少容器
  • 格式:docker rm [OPTIONS] CONTAINER [CONTAINER...]
编号参数解释说明
1-f通过 SIGKILL 信号强制删除一个运行中的容器
2-l移除容器间的网络连接,而非容器本身
3-v删除容器本身并删除与容器关联的卷
bash
# 强制删除容器 $ 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...]
编号命令解释说明
1docker pause暂停容器中所有的进程
2docker unpause恢复容器中所有的进程
bash
# 暂停容器 $ docker pause nginx-slb # 恢复容器 $ docker unpause nginx-slb

1.6 create 命令

  • 定义:创建一个新的容器但不启动它
  • 格式:docker create [OPTIONS] IMAGE [COMMAND] [ARG...]
编号参数解释说明
1-w设置容器内的工作目录
2--mac-address设置容器的 MAC 地址
bash
# 创建一个容器 $ 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不截断输出
bash
# 列出所有创建的容器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
bash
# 获取容器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设置容器的工作目录
bash
# 后台执行创建文件 $ 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
bash
# 连接连接到容器查看访问信息 # 在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显示某个开始时间的所有日志
bash
# 查看容器从2018年11月11日后的最新10条日志 $ docker logs --since="2018-11-11" --tail=10 nginx-slb

2.6 export 命令

  • 定义:将文件系统作为一个 tar 归档文件导出到 STDOUT
编号参数解释说明
1-o将输入内容写到文件
bash
# 导出镜像 $ 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]
bash
# 容器运行时不一定有/bin/bash终端来交互执行top命令 # 而且容器还不一定有top命令可以使用docker top来实现查看 $ docker top nginx-slb

2.8 stats 命令

  • 定义:用来显示容器使用的系统资源
  • 格式:docker stats [OPTIONS] [CONTAINER]
编号参数解释说明
1--allShow all containers (default shows just running)
2--format stringPretty-print images using a Go template
3--no-streamDisable streaming stats and only pull the first result
4--no-truncDo not truncate output
bash
# 不带任何选项,则会默认输出并输出全部容器的使用情况 # [CONTAINER]: 以短格式显示容器的ID # [CPU %]: CPU的使用情况 # [MEM USAGE/LIMIT]: 当前使用的内存和最大可以使用的内存 # [MEM %]: 以百分比的形式显示内存使用情况 # [NET I/O]: 网络I/O数据 # [BLOCK I/O]: 磁盘I/O数据 # [PIDS]: 显示PID号 $ docker stats
bash
# 可以通过 --no-stream 选项只输出当前的状态 $ docker stats --no-stream # 只输出指定的容器 # 第一列不再显示默认的容器ID,而是显示了我们传入的容器名称和ID $ docker stats --no-stream registry # 基于此,我们可以通过简单的方式使用容器的名称替代默认输出中的容器ID $ docker stats $(docker ps --format={{.Names}})
bash
# 格式化输出的结果 # .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]]
bash
# 查看开放端口 $ docker port nginx-slb

2.10 wait 命令

  • 定义:阻塞运行直到容器停止,然后打印出它的退出代码
  • 格式:docker wait [OPTIONS] CONTAINER [CONTAINER...]
bash
# 会有一个退出码 $ docker wait nginx-slb

2.11 events 命令

  • 定义:可以帮助你实时获取 docker 的各种事件信息
  • 格式:docker events [OPTIONS]
编号参数解释说明
1--filter filterFilter output based on conditions provided
2--format stringFormat the output using the given Go template
3--since stringShow all events created since timestamp
4--until stringStream events until this timestamp
bash
# 比如创建了一个容器 $ docker events

2.12 update 命令

  • 定义:不用重新部署服务来调整镜像配置
  • 格式:docker update [OPTIONS] CONTAINER [CONTAINER...]
编号参数解释说明
1--cpus decimalNumber of CPUs
2--memory bytesMemory limit
3--restart stringRestart policy to apply when a container exits
4--pids-limit intTune container pids limit (set -1 for unlimited)
bash
# 设置的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 时,将容器暂停
bash
# 将容器倒为一个镜像 $ docker commit -a "escape" -m "slb" a404c6c174a2 nginx-slb:v1

3.2 diff 命令

  • 定义:检查容器里文件结构的更改
  • 格式:docker diff [OPTIONS] CONTAINER
bash
# 查看数据层的变化 $ 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保持源目标中的链接
bash
# 数据拷贝 $ docker cp /www/nginx 96f7f14e99ab:/www/

4. 镜像仓库使用

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

4.1 login/logout 命令

  • 登录:docker login [OPTIONS] [SERVER]
  • 退出:docker logout [OPTIONS] [SERVER]
编号命令解释说明
1docker login登陆到一个 Docker 镜像仓库
2docker logout登出到一个 Docker 镜像仓库
bash
# 登录 $ 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忽略镜像的校验,默认开启
bash
# 拉取或者更新 $ docker pull debian:jessie

4.3 push 命令

  • 定义:将本地的镜像上传到镜像仓库
  • 格式:docker push [OPTIONS] NAME[:TAG]
编号参数解释说明
1--disable-content-trust忽略镜像的校验,默认开启
bash
# 上传 $ docker push nginx-slb:0.-.1

4.4 search 命令

  • 定义:从 Docker Hub 查找镜像
  • 格式:docker search [OPTIONS] TERM
编号参数解释说明
1--automated只列出 automated build 类型的镜像
2--no-trunc显示完整的镜像描述
3-s列出收藏数不小于指定值的镜像
bash
# 收藏数大于10的镜像 $ docker search -s 10 java

4.5 load/save 命令

  • 定义:可以导入导出本地镜像
  • 格式:docker load [OPTIONS]
  • 格式: docker save [OPTIONS] IMAGE [IMAGE...]
编号参数解释说明
1load可以把镜像从 tar 文件导入到 docker 中
2save把一个镜像保存到 tar 文件中
bash
# 导入 $ 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
bash
# 查看镜像 $ docker images -a

5.2 rmi 命令

  • 定义:删除本地一个或多个镜像
  • 格式:docker rmi [OPTIONS] IMAGE [IMAGE...]
编号参数解释说明
1-f强制删除
2--no-prune不移除该镜像的过程镜像,默认移除
bash
# 删除镜像 $ docker rmi -f runoob/ubuntu:v4

5.3 tag 命令

  • 定义:标记本地镜像,将其归入某一仓库
  • 格式:docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
bash
# 重命名 $ 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只构建某一阶段的镜像
bash
# 常见构建方式 $ 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
bash
# 查看本地镜像的创建历史 $ docker history nginx:v3

5.6 save 命令

  • 定义:将指定镜像保存成 tar 归档文件
  • 格式:docker save [OPTIONS] IMAGE [IMAGE...]
编号参数解释说明
1-o输出到的文件
bash
# 导出 $ docker save ubuntu:v3 -o my_ubuntu_v3.tar

5.7 import 命令

  • 定义:从归档文件中创建镜像
  • 格式:docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]
编号参数解释说明
1-c应用 docker 指令创建镜像
2-m提交时的说明文字
bash
# 镜像归档文件 $ docker import my_ubuntu_v3.tar $ docker import my_ubuntu_v3.tar ubuntu:v4
如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:Gustav

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!