当前位置: 首页 > news >正文

【Docker】容器

一.容器(container)

1.概念

通俗地讲,容器是镜像的运行实体。镜像是静态的只读文件,而容器带有运行时需要的可写文件层,并且容器中的进程属于运行状态。即容器运行着真正的应用进程。容器有初建、运行、停止、暂停和删除五种状态。

虽然容器的本质是主机上运行的一个进程,但是容器有自己独立的命名空间隔离和资源限制。也就是说,在容器内部,无法看到主机上的进程、环境变量、网络等信息,这是容器与直接运行在主机上进程的本质区别。

容器是基于镜像创建的可运行实例,并且单独存在,一个镜像可以创建出多个容器。运行容器化环境时,实际上是在容器内部创建该文件系统的读写副本。 这将添加一个容器层,该层允许修改镜像的整个副本。

2.容器生命周期

容器的生命周期是容器可能处于的状态:

created初建状态
running运行状态
stopped停止状态
paused暂停状态
deleted删除状态

docker create创建容器后,不立即启动运行,容器进入初建状态
docker run创建容器,并立即启动运行,进入运行状态
docker start容器转为运行状态
docker stop容器将转入停止状态
docker kill容器在故障(死机)时,执行 kill(断电),容器转入停止状态,这种操作容易丢失数据,除非必要,否则不建议使用
docker restart重启容器,容器转入运行状态
docker pause容器进入暂停状态
docker unpause取消暂停状态,容器进入运行状态
docker rm删除容器,容器转入删除状态
killed by out-of-memory(因内存不足被终止)宿主机内存被耗尽,也被称为 OOM:非计划终止 这时需要杀死最吃内存的容器
container process exitde(异常终止)出现容器被终止后,将进入 Should restart?选择操作:
yes 需要重启,容器执行 start 命令,转为运行状态。
no 不需要重启,容器转为停止状态

二.容器命令

1)docker create

创建一个新的容器但不启动它。

语法:

docker create [OPTIONS] IMAGE [COMMAND] [ARG...]

关键参数:

-i以交互模式运行容器,通常与 -t 同时使用
-P随机端口映射,容器内部端口随机映射到主机的端口
-p指定端口映射,格式为:主机(宿主)端口:容器端口
-t为容器重新分配一个伪输入终端,通常与 -i 同时使用
--name="容器名"为容器指定一个名称
-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退出的时候自动删除容器
--restart自动重启

2)docker run

创建一个新的容器并运行一个命令。

语法:

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

关键参数,上面create命令的参数都有,只是多了下面的参数:

-d后台运行容器,并返回容器 ID

-rm

容器停止后自动删除
-e设置系统变量

3)docker ps

列出容器。

语法:

docker ps [OPTIONS]

关键参数:

-a显示所有的容器,包括未运行的
-f根据条件过滤显示的内容
--format指定返回值的模板文件。如 json 或者 table
-l显示 latest 的容器
-n列出最近创建的 n 个容器
--no-trunc不截断输出
-q静默模式,只显示容器编号
-s显示总的文件大小

4)docker logs

查看容器日志。

语法:

docker logs [OPTIONS] CONTAINER

关键参数:

-f ,--follow跟踪日志输出
--since显示某个开始时间的所有日志
-t,--timestamps显示时间戳
-n,--tail仅列出最新 N 条容器日志

5)docker attach

连接到正在运行中的容器。

语法:

docker attach [OPTIONS] CONTAINER

关键参数:

--sig-proxy是否将所有信号代理,默认是 true,如果设置为 false,退出的话不会影响容器,否则退出会导致容器退出

6)docker exec

在容器中执行命令。

语法:

docker exec [OPTIONS] CONTAINER COMMAND [ARG...]

关键参数:

-d分离模式: 在后台运行
-i即使没有附加也保持 STDIN 打开
-t分配一个伪终端
-e设置环境变量
-u,--user指定用户 "<name|uid>[:<group|gid>]"
-w,--workdir指定工作目录

7)docker start

启动停止的容器。

语法:

docker start [OPTIONS] CONTAINER [CONTAINER...]

8)docker stop

停止运行的容器。

语法:

docker stop [OPTIONS] CONTAINER [CONTAINER...]

关键参数:

-s发送的信号

9)docker restart

重启容器。

语法:

docker restart [OPTIONS] CONTAINER [CONTAINER...]

关键参数:

-s发送的信号

10)docker kill

强制退出容器。

语法:

docker kill [OPTIONS] CONTAINER [CONTAINER...]

关键参数:

-s发送的信号

11)docker top

查看容器中运行的进程信息,支持ps命令参数

语法:

docker top CONTAINER [ps OPTIONS]

12)docker stats

显示容器资源的使用情况,包括:CPU、内存、网络 I/O等。

语法:

docker stats [OPTIONS] [CONTAINER...]

关键参数:

--all ,-a显示所有的容器,包括未运行的
--format指定返回值的模板文件。如 table,json
--no-stream展示当前状态就直接退出了,不再实时更新
--no-trunc不截断输出

返回报文:

CONTAINER ID 与 NAME容器 ID 与名称
CPU % 与 MEM %容器使用的 CPU 和内存的百分比
MEM USAGE / LIMIT容器正在使用的总内存,以及允许使用的内存总量
NET I/O容器通过其网络接口发送和接收的数据量
BLOCK I/O容器从主机上的块设备读取和写入的数据量
PIDs容器创建的进程或线程数

13)docker container inspect

查看容器详细信息。

语法:

docker container inspect [OPTIONS] CONTAINER [CONTAINER...]

关键参数:

-f指定返回值的模板文件。如 table、json
-s显示总的文件大小

14)docker port

用于列出指定的容器的端口映射,或者查找将PRIVATE_PORT NAT到面向公众的端口。

语法:

docker port CONTAINER [PRIVATE_PORT[/PROTO]]

15)docker cp

在容器和宿主机之间拷贝文件。

语法:

docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
docker cp [OPTIONS] 容器名或ID:容器内文件路径 宿主机目标路径|-docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH
docker cp [OPTIONS] 宿主机源文件路径|- 容器名或ID:容器内目标路径

16)docker diff

检查容器里文件结构的更改。

语法:

docker diff CONTAINER

17)docker commit

从容器创建要给新的镜像。

语法:

docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

关键参数:

-a提交的镜像作者
-c使用 Dockerfile 指令来创建镜像;可以修改启动指令
-m提交时的说明文字
-p在 commit 时,将容器暂停

18)docker pause

暂停容器中所有的进程。

语法:

docker pause CONTAINER [CONTAINER...]

细节半圆:

19)docker unpause

恢复容器中所有的进程。

语法:

docker unpause CONTAINER [CONTAINER...]

20)docker rm

删除停止的容器。

语法:

docker rm [OPTIONS] CONTAINER [CONTAINER...]

关键参数:

-f通过 SIGKILL 信号强制删除一个运行中的容器

21)docker export

导出容器内容为tar文件。

语法:

docker export [OPTIONS] CONTAINER

关键参数:

-o写入到文件

22)docker wait

阻塞运行直到容器停止,然后打印出它的退出代码。

语法:

docker wait CONTAINER [CONTAINER...]

23)docker rename

重命名容器。

语法:

docker rename CONTAINER NEW_NAME

24)docker container prune

删除所有停止的容器。

语法:

docker container prune [OPTIONS]

关键参数:

-f, --force不提示是否进行确认

25)docker update

更新容器配置。

语法:

docker update [OPTIONS] CONTAINER [CONTAINER...]

关键参数:

--cpuscpu 数量
--cpuset-cpus使用哪些 cpu
--memory内存限制
--memory-swap交换内存
--cpu-period是用来指定容器对 CPU 的使用要在多长时间内做一次重新分配
--cpu-quota是用来指定在这个周期内,最多可以有多少时间用来跑这个容器

三.操作实例

1.批量处理

命令解释
docker container ls -qf name=xxx根据名称过滤得到容器编号
docker container ls --filter status=running根据状态过滤容器信息
docker container ls -aq静默获取全部容器 id
docker container ls --filter ancestor=xxx过滤镜像名为 xxx 的容器信息
docker container ls --filter ancestor=xxx过滤镜像 id 为 xxx 的容器信息

参数:

-a

表示打印所有的容器信息,包括正在运行和已退出的

-q

表示只返回容器ID
-f表示基于给的条件过滤 等价于 --filter选项

1)批量删除容器

docker container rm $(docker container ls -aq)

2)按照状态过滤删除已经退出的容器

docker container rm $(docker container ls -q --f status=exited)

2.容器交互模式

1)attached 模式

docker container run -p 80:80 nginx

通过上面是方式创建容器就是 attached 模式,这样容器会在前台运行。

访问服务器网址的时候,每访问一次,命令窗口就会打印一次日志,Docker 容器
的日志会实时的展现到窗口并且占用此端口。

如果是在 Linux 服务器上,按 Ctrl+C 就会停止掉 Docker 服务,很容易误操作,
所以我们需要一个更好的,更稳定的模式,对应的是 detached 模式

attached 模式仅适用于容器和程序的调试阶段。

2)detached 模式

在 docker container run -p 80:80 nginx 命令基础上加一个-d 或者--detach选项表示 detached 模式, 即在后台执行。

在后台运行,启动后只显示容器 ID,并且可以输入任何命令。

就算关掉窗口依然继续运行,停止和删除容器都需要使用 shell 命令,减少了很多的误操作。

比起 attached 模式更建议使用。

3)interactive 模式

当我们创建好一个容器之后, 可能需要去容器内部获取一些信息或执行一些命令,就需要进入到交互式模式。例如创建一个 Ubuntu 容器之后,需要到系统里输入各种 Shell 命令和系统进行交互就需要进入交互式模式才可以完成。

docker run -it --name nginx -p 80:80 41f689c20910 bashdocker run -d --name nginx -p 80:80 41f689c20910
docker exec -it nginx bash

3.容器自启动

docker run --restart=no [容器名]默认值不自动重启
docker run --restart=on-failure:3 [容器名]on-failure 若容器的退出状态非 0,则 docker 自动重启容器,还可以指定重启次数,若超过指定次数未能启动容器则放弃
docker run --restart=always [容器名]always 容器退出时总是重启
docker run --restart=unless-stopped [容器名]unless-stopped 容器退出时总是重启,但不考虑 Docker 守护进程启动时就已经停止的容器

如果容器启动时没有设置–restart 参数,则通过下面命令进行更新:docker update --restart=always [容器名]  。


文章转载自:

http://EvbBrDze.zcnfm.cn
http://72cTgBcm.zcnfm.cn
http://6irrNjq2.zcnfm.cn
http://InFRYKGC.zcnfm.cn
http://tfeQtZMX.zcnfm.cn
http://wmTr1evv.zcnfm.cn
http://voi83oms.zcnfm.cn
http://p3NcEalP.zcnfm.cn
http://we0PlKeI.zcnfm.cn
http://gPtZdUJU.zcnfm.cn
http://okC9n2ie.zcnfm.cn
http://a1iwEpBb.zcnfm.cn
http://5ofy4TTn.zcnfm.cn
http://dbt884h9.zcnfm.cn
http://w9hf7B2H.zcnfm.cn
http://VmxejUeA.zcnfm.cn
http://q4k2Jpnc.zcnfm.cn
http://C9wDcDfc.zcnfm.cn
http://8oJuDqfp.zcnfm.cn
http://MUQpY37m.zcnfm.cn
http://KCEKhj1V.zcnfm.cn
http://WAObTx8F.zcnfm.cn
http://p7x2WA0m.zcnfm.cn
http://kSPQ8PpW.zcnfm.cn
http://sTbKuprV.zcnfm.cn
http://CdUCnIxa.zcnfm.cn
http://4jjdZUG4.zcnfm.cn
http://ro7um87j.zcnfm.cn
http://OcdDGyZs.zcnfm.cn
http://qap02n35.zcnfm.cn
http://www.dtcms.com/a/382144.html

相关文章:

  • C++ 类型推导(第一部分)
  • 联邦学习模型完成之后在验证集上面,如何判断输出正确与否
  • 优选算法---链表
  • 从理据到算法:认知语义学象似性对人工智能深层语义分析的重塑与前瞻
  • 39.网络流入门
  • PTQ 模型 量化方法
  • 基于Spring Boot的家政服务管理系统+论文示例参考
  • uniapp封装长按一直触发事件和松开后触发一次的事件(自定义事件)
  • Unity核心概念⑦:Transform
  • 【数据行业发展】可信数据空间~数据价值的新型基础设施
  • 使用“洋葱架构”构建单体应用
  • DAY 27 函数专题2:装饰器-2025.9.14
  • 浅析Linux进程信号处理机制:基本原理及应用
  • php学习(第五天)
  • C盘清理技巧分享的技术文章大纲
  • PINN物理信息神经网络驱动的三维声波波动方程求解MATLAB代码
  • 深度学习优化器进化史:从SGD到AdamW的原理与选择
  • 计算机视觉(opencv)实战十九——角点检测图像特征(Harris 角点、Shi-Tomasi 角点)
  • 【限流器设计】固定窗口计数法
  • Estimator and Confidence interval
  • 构建AI智能体:三十二、LangChain智能体:打造会使用工具(Tools)、有记忆(Memory)的AI助手
  • AI内容标识新规实施后,大厂AI用户协议有何变化?(六)科大讯飞
  • 机械应答到自然交流,声网AI陪练改变我的口语
  • 贪心算法应用:信用评分分箱问题详解
  • 【Spring AI】Filter 简单使用
  • html各种常用标签
  • Linux 进程信号之信号的捕捉
  • 实验-高级acl(简单)
  • C++之特殊类设计
  • stm32教程:USART串口通信