🎬慕斯主页:
♈️今日夜电波:秒針を噛む—ずっと真夜中でいいのに。
0:34━━━━━━️💟──────── 4:20
🔄 ◀️ ⏸ ▶️ ☰
💗关注👍点赞🙌收藏您的每一次鼓励都是对我莫大的支持😍
目录
docker create、 docker start 和 docker run 有什么区别?
docker import 和 docker load 有什么区别?
docker rm & docker rmi & docker prune 的差异?
首先理解几个概念
docker容器(container )是什么?
下面看看官方给出的docker 架构,可以结合此图来理解容器的概念:
为什么需要容器?
容器的生命周期
容器的生命周期是容器可能处于的状态。
各生命周期之间的转换关系如图所示:
一些特别说明:
killed by out-of-memory(因内存不足被终止):宿主机内存被耗尽,也被称为 oom:非计划终止 这时需要杀死最吃内存的容器
container process exitde(异常终止):出现容器被终止后,将进入 should restart?
选择操作:
• yes 需要重启,容器执行 start 命令,转为运行状态。
• no 不需要重启,容器转为停止状态。
容器的命令详解
前面的文章已近对run、ps讲述过了,这里不多介绍。
docker 的一系列命令提供了对容器生命周期的全面控制,下面是对这些命令的详细解析:
1. docker create
用途:创建一个容器但不立即启动它。
语法:
docker create [options] image [command] [arg...]
关键参数:
○ -i: 以交互模式运行容器,通常与 -t 同时使用;
○ -p: 随机端口映射,容器内部端口随机映射到主机的端口
○ -p: 指定端口映射,格式为: 主机(宿主)端口:容器端口
○ -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
○ --name="nginx-lb": 为容器指定一个名称;
○ -h "mars": 指定容器的 hostname;
○ -e username="ritchie": 设置环境变量;
○ --cpuset-cpus="0-2" or --cpuset-cpus="0,1,2": 绑定容器到指定 cpu 运行;
○ -m :设置容器使用内存最大值;
○ --network="bridge": 指定容器的网络连接类型;
○ --link=[]: 添加链接到另一个容器;
○ --volume , -v: 绑定一个卷
○ --rm :shell 退出的时候自动删除容器
2. docker logs
用途:获取容器的日志输出。
语法:
docker logs [options] container
关键参数:
-f
或--follow
:跟随日志输出。--since
:显示自从某个时间点后的日志。--until
:显示直到某个时间点的日志。--tail -n
:显示最近 n 行日志。-t,--timestamps
:显示时间戳 。
3. docker attach
用途:将标准输入、输出和错误流连接到一个正在运行的容器。
语法:
docker attach [options] container
关键参数:
--sig-proxy=true|false
:是否代理信号。
如若不使用上述选项,attach后ctrl+c会导致容器退出,如下:
4. docker exec
用途:在运行中的容器中执行命令。
语法:
docker exec [options] container command [arg...]
关键参数:
- -i :即使没有附加也保持 stdin 打开
-u
或--user
:设置用户 id 或用户名。- -w,--workdir:指定工作目录
- -e :设置环境变量
- -t :分配一个伪终端
- -d :分离模式: 在后台运行
5. docker start
用途:启动一个已创建但未运行的容器。
语法:
docker start [options] container [container...]
关键参数:
--attach
:连接到容器的标准输入/输出/错误
6. docker stop
用途:停止一个正在运行的容器。
语法:
docker stop [options] container [container...]
关键参数:
--time
或-t
:等待容器停止的秒数。
7. docker restart
用途:重启容器。
语法:
docker restart [options] container [container...]
关键参数:
--time
或-t
:等待容器停止的秒数。
8. docker kill
用途:强制停止一个正在运行的容器。
语法:
docker kill [options] container [container...]
关键参数:
signal
:发送的信号,默认为 sigkill。
9. docker top
用途:显示容器内运行的进程。
语法:
docker top container
无需参数。
10. docker stats
用途:显示容器的资源使用情况。
语法:
docker stats [options] [container...]
关键参数:
-a
或--all
:显示所有容器的统计信息。- --format :指定返回值的模板文件。如 table,json
- --no-stream :展示当前状态就直接退出了,不再实时更新。
- --no-trunc :不截断输出
返回报文
container id 与 name: 容器 id 与名称。
cpu % 与 mem %: 容器使用的 cpu 和内存的百分比。
mem usage / limit: 容器正在使用的总内存,以及允许使用的内存总量。
net i/o: 容器通过其网络接口发送和接收的数据量。
block i/o: 容器从主机上的块设备读取和写入的数据量。
pids: 容器创建的进程或线程数。
如下为:docker stats --format json
11. docker container inspect
用途:显示容器的详细信息。
语法:
docker container inspect [options] container [container...]
关键参数:
○ -f :指定返回值的模板文件。如 table、 json
○ -s :显示总的文件大小
12. docker port
用途:显示容器的端口映射。
语法:
docker port container private_port[/proto]
无需参数。
13. docker cp
用途:在容器和本地文件系统之间复制文件或目录。
语法:
docker cp [options] container:src_path dest_path | docker cp [options] src_path container:dest_path
关键参数:
-l
:保持符号链接。
样例
#将主机/www/目录拷贝到容器 mynginx 的/www 目录下。
docker cp /www/ mynginx:/www/
#将容器/www/目录拷贝到主机的/wwwbak 目录下。
docker cp mynginx:/www/ /wwwbak/
14. docker diff
用途:显示容器文件系统的更改。
语法:
docker diff container
无需参数。
15. docker commit
用途:将容器的更改提交为新的镜像。
语法:
docker commit [options] container [repository[:tag]]
关键参数:
-m
或--message
:提交的信息。-a
或--author
:作者信息。- -c :使用 dockerfile 指令来创建镜像;可以修改启动指令
- -p :在 commit 时,将容器暂停。
16. docker pause
用途:暂停容器的所有进程。
语法:
docker pause [options] container [container...]
无需参数。
17. docker unpause
用途:恢复已暂停的容器。
语法:
docker unpause [options] container [container...]
无需参数。
18. docker rm
用途:删除一个或多个容器。
语法:
docker rm [options] container [container...]
关键参数:
-f
或--force
:强制删除运行中的容器。
19. docker export
用途:将容器的内容导出为 tar 归档。
语法:
docker export container > archive.tar
关键参数:
- -o:写入到文件
20. docker wait
用途:阻塞直到容器停止,然后返回退出代码。
语法:
docker wait [options] container
无需参数。
21. docker rename
用途:重命名一个容器。
语法:
docker rename container new_name
无需参数。
22. docker container prune
用途:删除所有已停止的容器。
语法:
docker container prune [options]
关键参数:
- -f, --force:不提示是否进行确认
23. docker update
用途:更新容器的资源限制。
语法:
docker update [options] container [container...]
关键参数:
--memory
:设置容器的内存限制。--cpus
:设置容器的 cpu 份额。- --cpuset-cpus :使用哪些 cpu。
- --memory-swap:交换内存 。
- --cpu-period :是用来指定容器对 cpu 的使用要在多长时间内做一次重新分配。
- --cpu-quota: 是用来指定在这个周期内,最多可以有多少时间用来跑这个容器。
docker update
命令用于调整一个或多个正在运行的容器的资源配置,如cpu份额、内存限制、重启策略等。下面是几个使用docker update
的例子:
例子
更新容器的cpu份额:
假设你有一个容器,其id是 abcd1234
,你想增加它的cpu份额,可以使用以下命令:
docker update --cpu-shares 512 abcd1234
这会将容器的cpu份额设置为512。cpu份额是用来决定容器在与其他容器竞争cpu时间时的优先级。
更新容器的内存限制:
如果想限制容器使用的内存,可以使用 --memory
或 -m
选项。例如,将容器 abcd1234
的最大可用内存限制为512mb,可以这样操作:
docker update --memory 512m abcd1234
更新容器的重启策略:
你可能希望容器在意外停止后自动重启。为了设置容器 abcd1234
的重启策略为总是重启,可以使用以下命令:
docker update --restart always abcd1234
这将确保当容器意外终止时,docker守护进程会尝试自动重启它。
更新多个容器的配置:
你也可以同时更新多个容器的配置。例如,更新两个容器 abcd1234
和 efgh5678
的cpu份额和内存限制:
docker update --cpu-shares 256 --memory 256m abcd1234 efgh5678
更新容器的block io权重:
对于磁盘i/o,你可以设置容器的block io权重,权重范围在10到1000之间,0表示禁用。例如,将容器 abcd1234
的block io权重设置为500:
docker update --blkio-weight 500 abcd1234
请注意,不是所有的配置都可以在容器运行时更新。例如,你不能更新已经运行的容器的网络配置或更改其基础镜像。此外,某些选项(如 --kernel-memory
)在较新的docker版本中可能已经被弃用。
在执行任何 docker update
命令之前,确保了解你正在更改的配置的具体含义,以及这些更改如何影响容器的性能和稳定性。
容器批量处理技巧
docker container ls
命令(通常简写为 docker ps
)用于列出系统上当前运行的docker容器。但是,docker container ls
是更现代且推荐使用的语法,因为它更清晰地表明了你正在操作的是容器。这两个命令在功能上是相同的,只是语法略有不同,docker container ls
更符合docker命令的一致性设计。
基本语法
docker container ls [options]
选项说明
-a
,--all
: 显示所有容器,包括未运行的。如果不加这个选项,默认只显示正在运行的容器。-f
,--filter
: 用于过滤输出。例如,你可以通过名字、状态或其他属性过滤容器。--format
: 设置输出格式,可以使用go模板语言来定制输出的样式。-l
,--latest
: 显示最近创建的容器。--no-trunc
: 不截断输出,完整显示所有信息。--quiet
,-q
: 只显示容器的id。
输出列说明
默认情况下,docker container ls
或 docker ps
的输出包含以下列:
container id
: 容器的唯一标识符。image
: 创建容器的镜像名称。command
: 启动容器时运行的命令。created
: 容器创建的时间。status
: 容器的状态,如运行中(up)、已退出(exited)等。ports
: 已映射的端口,如果有的话。names
: 分配给容器的名称。
示例
- 列出所有容器(包括未运行的):
docker container ls -a
- 只显示容器的id:
docker container ls -q
- 根据名字过滤容器:
docker container ls --filter name=myapp
- 自定义输出格式:
docker container ls --format "table {{.names}}\t{{.status}}\t{{.runningfor}}"
理解完前面的操作,那么我们再结合前面所提到的命令,可以做到如下的容器批处理:
docker stop `docker ps -q`
docker start `docker ps -aq`
容器自动重启
容器重启选项如下:
需要注意的是:
docker update --restart=no <container-id-or-name>
docker rm -f <container-id-or-name>
一些常见的问题
docker create、 docker start 和 docker run 有什么区别?
docker import 和 docker load 有什么区别?
docker rm & docker rmi & docker prune 的差异?
感谢你耐心的看到这里ღ( ´・ᴗ・` )比心,如有哪里有错误请踢一脚作者o(╥﹏╥)o!
给个三连再走嘛~
发表评论