当前位置: 代码网 > it编程>开发工具>Docker > Docker 使用基础(3)—容器

Docker 使用基础(3)—容器

2024年07月28日 Docker 我要评论
Docker 使用基础(3)容器—理解容器的概念以及主要的操作命令,懂得如何使用容器。

                                        🎬慕斯主页

                                       ♈️今日夜电波:秒針を噛む—ずっと真夜中でいいのに。

                                                           0:34━━━━━━️💟──────── 4:20
                                                                🔄   ◀️   ⏸   ▶️    ☰  

                                 💗关注👍点赞🙌收藏您的每一次鼓励都是对我莫大的支持😍


目录

首先理解几个概念

docker容器(container )是什么?

为什么需要容器?

容器的生命周期

容器的命令详解

1. docker create

2. docker logs

3. docker attach

4. docker exec

5. docker start

6. docker stop

7. docker restart

8. docker kill

9. docker top

10. docker stats

11. docker container inspect

12. docker port

13. docker cp

14. docker diff

15. docker commit

16. docker pause

17. docker unpause

18. docker rm

19. docker export

20. docker wait

21. docker rename

22. docker container prune

23. docker update

容器批量处理技巧

容器自动重启

一些常见的问题

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守护进程会尝试自动重启它。

更新多个容器的配置:

你也可以同时更新多个容器的配置。例如,更新两个容器 abcd1234efgh5678 的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 lsdocker 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! 

                                       

                                                                        给个三连再走嘛~  

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com