1.docker run
docker run -it --name "centos_v1" eeb6
docker run -d -p 80:80 --name "nginx_v2" nginx:latest
-i | 交互的方式创建容器,一般与t连用 |
-t | 分配一个终端 |
--name | 给容器起名字 |
-d | 后台运行容器,并输出容器id |
-p | 端口映射 宿主机:容器 |
-v | 挂载数据卷 |
--rm | 当容器退出时,容器也会随之删除,一般用户测试的场景 |
-e | 向容器中传递环境变量 |
-w | 指定工作目录为/etc |
--add-host | 添加主机映射 |
2.docker ps 等同于docker container ls
docker ps 显示正在运行的容器
--no-trunc 显示完整信息 一般指 container id 与command命令
-a 显示所有容器
docker ps --no-trunc
3.awk过滤容器id
docker ps -a | awk 'NR>1 {print $1}'
docker ps -a -q
4.停止容器 stop
docker stop nginx_v2
docker container stop suspicious_montalcini
停止名为"suspicious_montalcini"的容器运行,本案例停止的是一个容器。
docker container stop suspicious_montalcini bold_mahavira
停止名为"suspicious_montalcini"和"bold_mahavira"容器的运行,本案例启动的是多个容器。
docker container stop -t 3 inspiring_hertz
停止名为"inspiring_hertz"容器的运行,指定3秒后发送kill指令。
docker container stop -t 1 zealous_heyrovsky compassionate_mclaren
停止名为"zealous_heyrovsky"和"compassionate_mclaren"容器的运行,指定1秒后发送kill指令。
温馨提示:
若不使用"-t"选项,则默认的间隔10秒后向容器发送kill指令。
5.启动容器 start
docker start nginx_v2
docker container start suspicious_montalcini
启动名为"suspicious_montalcini"的容器,本案例启动的是一个容器。
docker container stop suspicious_montalcini bold_mahavira
启动名为"suspicious_montalcini"和"bold_mahavira"的容器,本案例启动的是多个容器。
docker container start -ai suspicious_montalcini
启动名为"suspicious_montalcini"的容器,启动时也可以加选项如下:
-a:
将容器的标准输出和错误输出到当前终端。
-i:
启动时分配一个交互式的标准输入程序。
温馨提示:
当我们分配一个"-i"时,这个标准输入对接的程序必须有交互能力,否则此选项无效。
比如"sh","bash"程序可以进行交互,而"tail","sleep"则不行。
6.创建容器 create
docker create -p 1222:80 --name "nginx_v5" nginx:latest
7.重启镜像restart
docker restart nginx_v5
8.结束容器 kill
docker kill nginx_v5
9.删除容器 rm
docker rm `docker ps -a -q`
docker rm -f 强制删除
docker container rm compassionate_mclaren
删除一个已停止的容器,如果没有加"-f"选项,是无法删除一个正在运行的容器。
docker container rm -f -v compassionate_mclaren suspicious_montalcini
-f:
代表强制删除,可以强制删除一个正在运行的容器。
-v:
删除容器并随之删除匿名存储卷相关信息,如果容器有存储卷有自定义名称,而非随机存储卷,则此选项无效。
10.进入容器attach
docker attach sleepy_northcutt
连接容器,并将本地的stdin,stdout,stderr连接到容器。
container attach --no-stdin recursing_varahamihira
连接容器时,可以不指定标准输入。
温馨提示:
(1)attach这个命令并不会产生新的进程,而是将本地的stdin,stdout,stderr连接到容器而已,并不会产生新的进程;
(2)如果想要退出容器,尤其是守护进程是"/bin/sh","/bin/bash"时,依次按"ctrl + p","ctrl + q"退出容器;
(3)当COMMAND指向的守护进程退出时,容器的生命周期运行结束(即容器退出);
exec创建新的终端,attach连接容器时公用一个终端
docker exec -it nginx_v1 /bin/bash
11.进入容器exec
docker container exec inspiring_hertz ls -l /etc/network
在inspiring_hertz容器中执行一个命令ls。
docker container exec inspiring_hertz cat /etc/hosts
在inspiring_hertz容器中执行一个命令cat。
docker container exec -w /etc/network/if-up.d -it inspiring_hertz sh
在inspiring_hertz容器中执行一个命令sh。
-w:
指定工作目录。
-i:
分配标准输入。
-t:
分配一个终端。
12.docker cp 容器与宿主机传输文件
docker cp nginx.tar.gz nginx_v1:/tmp/ 宿主机上传到容器中
docker cp nginx_v1:/tmp/test.txt . 宿主机从容器上下载
13.保存容器为镜像commit
docker commit nginx_v2 nginx:v3
docker commit 容器 新镜像id
docker container commit -a "wangyan@oldboyedu.com" -m "add by wanyan" recursing_varahamihira oldboyedu-linux:v0.2
-a:
指定作者信息。
-m:
提交注释信息,即对本次的提交做一个注释说明。
14.docker container ls
查看的参考案例:
docker container ls
列出所有正在运行的容器。
docker container ls -l
列出最近一个启动容器。
docker container ls -a
列出所有的容器,包括已退出状态的容器。
docker container ls -q
列出正在运行容器的ID。
docker container ls -s
列出正在运行的容器及容器产生的数据大小,及多了一个SIZE字段。
别名:
ls,ps,list均为别名,也就是说,上面的"ls"命令可以被"ps"和"list"来替换使用。
输出个字段含义如下:
CONTAINER ID
容器的ID,即容器的唯一编号。
IMAGE
镜像信息,容器基于哪个镜像启动的。
COMMAND
容器启动时的守护进程命令。
CREATED
创建容器的时间。
STATUS
代表容器的状态,常见的状态有4种,分别如下:
Up:
代表容器正在运行。
Exited:
代表容器退出
Pause:
暂停状态,容器的进程没有运行,而是被挂起了。
Created:
创建状态,一般指使用create命令创建但未启动的容器。
PORTS
端口映射信息。
NAMES
容器的名称。
SIZE
容器产生的数据大小。
15.docker logs
docker container logs -f optimistic_elbakyan
查看"optimistic_elbakyan"容器日志。
docker container logs -tf --since 2022-05-26T01:13:08Z --until 2022-05-26T01:28:38Z optimistic_elbakyan
查看"optimistic_elbakyan"容器日志,并对日志做以下过滤。
-t:
显示时间戳。
-f:
实时查看日志,有点类似于"tail -f"选项。
--since:
查看某个时间点之后的日志信息,此处我查看是"2022-05-26T01:13:08Z"之后的日志。
--until:
查看某个时间点之前到日志信息,此处我查看到是"2022-05-26T01:28:38Z"之前的日志。
面试题: 从2G的nginx容器日志中查看最近2小时的日志信息。
16.使用"diff"对比容器的变化
docker container diff funny_northcutt
温馨提示:
使用diff命令对比的是某个容器和其镜像的之间的文件变化,比如新增,删除,修改了文件或目录等。
17.使用export导出容器的文件系统到tar包
docker container export -o oldboyedu-linux80-alpine.tar.gz peaceful_shockley
基于-o选项,将peaceful_shockley的内容到处到一个叫oldboyedu-linux80-alpine.tar.gz的tar包中。
docker container export peaceful_shockley > oldboyedu-linux80-alpine.tar.gz
基于重定向,将peaceful_shockley的内容到处到一个叫oldboyedu-linux80-alpine.tar.gz的tar包中。
温馨提示:
将容器的文件系统到出到一个tar包后,我们可以使用import从该tar包中导入一个新的镜像。
docker image import oldboyedu-linux80-alpine.tar.gz
18.使用"inspect"查看容器的详细信息即模板语法
docker container inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' peaceful_shockley
查看容器的IP地址。
docker container inspect -f '{{range .NetworkSettings.Networks}}{{.MacAddress}}{{end}}' peaceful_shockley
查看容器的MAC地址。
docker container inspect -f '{{range .NetworkSettings.Networks}}{{.Gateway}}{{end}}' peaceful_shockley
查看容器的网关地址。
docker container inspect -f '{{.NetworkSettings.Networks.bridge.IPAddress}}' peaceful_shockley
查看容器的IP地址。
docker container inspect --format='{{json .NetworkSettings.Networks.bridge}}' peaceful_shockley
返回桥接网卡信息。
参考链接:
https://docs.docker.com/engine/reference/commandline/inspect/
19.使用"kill"停止容器运行
docker container kill funny_northcutt
20.使用"pause"暂停的容器运行(可以理解为虚拟机的"挂起")
docker container pause funny_northcutt
21.使用"unpause"恢复暂停的容器
docker container unpause zen_montalcini
温馨提示:
(1)恢复暂停的容器并不会重置容器的运行时间,恢复后,服务是可以正常访问的;
22.使用"port"查看端口映射信息
docker container port dazzling_austin
查看容器的所以端口映射信息,端口映射需要使用-p或者-P参数来指定。
docker container port dazzling_austin 80/tcp
查看容器的80端口TCP协议的端口映射信息。
23.使用"prune"移除所有未使用的容器
docker container prune -f
移除所有未使用的容器。
24.使用"rename"为容器进行重命名操作
docker container rename brave_blackburn oldboyedu-linux80
将容器名称为"brave_blackburn"更名为"oldboyedu-linux80"。
docker container rename fc370238b8b2 oldboyedu-linux
将容器ID为"fc370238b8b2"更名为"oldboyedu-linux"。
温馨提示:
无论是容器的名字还是容器的ID,都必须唯一。
25.使用"stats"查看容器的运行状态
docker container stats
实时查看所有正在运行的容器状态信息,主要包括CPU,内存的使用情况。
docker container stats --no-stream -a
查看一次的容器状态信息,主要包括CPU,内存的使用情况。
--no-stream:
代表只查看第一次的返回结果。
-a:
代表查看所有状态的容器信息,默认只查看正在运行的容器信息。
docker container stats --no-stream oldboyedu-linux
只查看"oldboyedu-linux"容器的状态信息。
docker container stats --no-stream --format "{{ json .}}" oldboyedu-linux | jq
只查看"oldboyedu-linux"容器的状态信息,要求返回结果为json格式,可以使用jq命令查看json解析。
docker container stats --no-stream --format "table {{.Container}}\t{{.CPUPerc}}\t{{.MemUsage}}" oldboyedu-linux
只查看"oldboyedu-linux"容器的状态信息,要求返回的结果只查看指定字段。指定的各字段含义如下所示:
.Container
容器名称或 ID(用户输入)
.Name
容器名称
.ID
容器 ID
.CPUPerc
CPU 百分比
.MemUsage
内存使用情况
.NetIO
网络 IO
.BlockIO
块 IO
.MemPerc
内存百分比(在 Windows 上不可用)
.PIDs
PID 数(在 Windows 上不可用)
输出的各字段结果
CONTAINER ID
容器的ID。
NAME
容器的名称。
CPU %
CPU使用的百分比。
MEM USAGE / LIMIT
内存的已使用情况/内存限制
MEM %
内存使用的百分比。
NET I/O
容器通过其网络接口发送和接收的数据量
BLOCK I/O
容器从主机上的块设备读取和写入的数据量
PIDS
容器创建的进程或线程数
参考链接:
https://docs.docker.com/engine/reference/commandline/stats/
26.使用top命令查看容器的进程信息
docker container top zealous_cerf
查看zealous_cerf容器的进程信息。
27.使用"update"更新容器的配置
docker container update -m 200000000 --memory-swap 200000000 interesting_snyder
启动一个容器限制其内存上线为200MB左右。
温馨提示:
正常情况下,容器启动会占用宿主机的全部资源空间,但为了能够保证同一台宿主机其他容器也能正常运行,通常情况下我们会设置资源上限来解决问题。
参考链接:(压力测试stress)
https://hub.docker.com/r/jasonyin2020/oldboyedu-linux-tools
28.使用"wait"命令查看容器的退出状态码
docker container wait loving_diffie
等待容器退出时返回状态码。