0


Docker--Docker Container(容器)

什么是容器?

简单的讲,容器就是镜像的运行实体。

容器是一个轻量级、可移植的软件单元,它包含了运行应用程序所需的所有依赖项。这些容器是基于镜像创建的,而镜像则是静态的只读文件,包含了应用程序的代码、运行时环境、系统库等。容器在运行时会带有可写文件层,并且容器中的进程处于运行状态。

关键特性:

  • 隔离性:Docker通过命名空间(NameSpace)和 控制组(cgroups)等技术实现了进程、网络、文件系统等的隔离。这使得容器中的应用程序与主机系统以及其他容器相互独立,互不干扰。
  • 可移植性:Docker容器可以在不同的Docker主机上轻松移动,无需改变密码和重新部署配置。这极大提高了应用程序的灵活性和拓展性。
  • 一致性:Docker容器确保了应用程序在开发、测试和生产环境中始终如一地运行。这有助于减少因环境差异而导致的错误和问题。
  • 资源效率:与虚拟机相比,Docker容器更加轻量级,消耗更少的内存和CPU资源。这使得它更适合于大规模部署和密集计算场景。
  • 自动化:Docker提供了丰富的工具和命令,可以自动化构建、部署和管理容器。这提高了开发和运维的效率,降低了运营成本。

Docker的生命周期

Docker的生命周期,是指从创建到销毁的整个过程。

1.已创建(Created)

  • 状态说明:容器已经被创建,但尚未启动。此时,容器内的进程还没有运行,但已经分配了唯一的ID,并配置了网络设置和挂载点等。
  • 相关命令:使用docker create命令可以创建一个新容器,但不启动它。

2.运行中(Running)

  • 状态说明:容器已经启动,并且容器内的主进程正在运行。此时,容器可以接收并处理外部请求,执行其设计的任务。
  • 相关命令:使用docker start命令可以启动一个已经创建的容器;使用docker run命令可以创建并启动一个新容器,这是docker createdocker start的组合。

3.停止(Stopped)

  • 状态说明:容器已经停止运行,但容器本身仍然存在,可以被重新启动或删除。停止容器时,Docker会向容器发送SIGTERM信号,等待一段时间让容器优雅关闭。如果容器未能在指定时间内停止,Docker会发送SIGKILL信号强制终止。
  • 相关命令:使用docker stop命令可以停止一个运行中的容器。

4.暂停中(Paused)

  • 状态说明:容器已经被暂停,所有进程都被停止,但容器的状态和数据依然保留在内存中。暂停容器可以保留容器的当前状态,同时释放部分资源。
  • 相关命令:使用docker pause命令可以暂停一个运行中的容器;使用docker unpause命令可以恢复被暂停的容器。

5.删除(Deleted)

  • 状态说明:容器已经被彻底删除,包括其状态、数据以及所有相关信息。删除容器后,无法再恢复或访问该容器。
  • 相关命令:使用docker rm命令可以删除一个已经停止的容器。如果尝试删除一个运行中的容器,会收到错误提示。需要先停止容器,才能删除它。另外,使用docker container prune命令可以删除所有停止的容器。

容器OOM

容器OOM,即容器出现Out of Memory(内存溢出)错误,是一个在使用Docker等容器技术时可能遇到的问题。

当容器尝试使用的内存超出了系统或容器本身可用的内存限制时,就会触发OOM错误。这通常会导致容器被系统强制终止,从而影响应用程序的正常运行

OOM出错的原因:

  • 容器内存限制不足:在创建容器时,如果没有为容器分配足够的内存,或者容器在运行过程中申请的内存超过了其限制,就会触发OOM错误。
  • 应用程序内存泄漏:如果容器内运行的应用程序存在内存泄漏,即应用程序在运行过程中未能正确释放不再使用的内存,那么随着时间的推移,应用程序的内存占用会逐渐增加,最终导致OOM错误。
  • 应用程序负载过高:当应用程序的负载过高时,可能会在短时间内消耗大量内存,从而触发OOM错误。

常见使用命令

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绑定一个卷–rmshell 退出的时候自动删除容器–restart自动重启
例子:
创建一个mynginx1容器:

docker create --name mynginx1 nginx:1.23.4

在这里插入图片描述
可以看到状态是创建的状态:

docker ps -a | grep mynginx

在这里插入图片描述

docker logs

查看容器日志

docker logs [OPTIONS] CONTAINER

关键参数描述–details显示提供给日志的额外详细信息-f, --follow遵循日志输出–since显示某个时间开始的时间日志-n, --tail all从日志末尾开始显示的行数-t, --timestamps显示时间戳
例子:
运行一个端口映射8081的nginx:

docker run --name mynginx3 -p 8081:80-d nginx:1.23.4

日志追踪:

docker logs -f mynginx3

通过客户端访问:
在这里插入图片描述

可以收到http请求操作信息:
在这里插入图片描述

docker attach

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

docker attach [OPTIONS] CONTAINER

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

例子:
先运行一个容器:

docker start mynginx3

连接上一个正在运行的容器:

docker attach mynginx3

按住ctrl+c 退出,会把容器也退出:
在这里插入图片描述

在这里插入图片描述

如果使用关键参数去连接已经运行的容器:

docker attach --sig-proxy=false mynginx3

按住ctrl+c不会吧容器杀死:
在这里插入图片描述

docker exec

在容器中执行命令

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

关键参数:
参数描述-d分离模式: 在后台运行-i即使没有附加也保持 STDIN 打开-t分配一个伪终端-e设置环境变量-u,–user指定用户 "<name-w,–workdir指定工作目录
例子:
运行容器打印出"hello":

docker exec -it mynginx3 echo "hello"

在这里插入图片描述
在后台运行打印“hello":

docker exec -d mynginx3 echo "hello"

以交互方式在容器中运行bash:

docker exec -it mynginx3 bash

docker start

启动停止的容器

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

例子:
启动退出的mynginx2:

docker start mynginx2

在这里插入图片描述

docker stop

停止运行的容器

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

在这里插入图片描述

docker restart

重启容器

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

在这里插入图片描述

docker kill

强制退出容器

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

在这里插入图片描述

注意:

docker stop

发送的是

SIGTERM

信号,

docker kill

发送的是

SIGKILL

信号

docker top

查看容器中运行的进程信息

docker top CONTAINER [ps OPTIONS]

在这里插入图片描述

docker stats

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

关键参数
参数描述–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: 容器创建的进程或线程数。
docker stats [OPTIONS][CONTAINER...]

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

docker container inspect

查看容器详细信息

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

docker port

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

docker port CONTAINER [PRIVATE_PORT[/PROTO]]

在这里插入图片描述

docker cp

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

docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-

例子:
在当前目录下创建一个文件:
在这里插入图片描述
运行容器,并在容器创建一个对应的目录:

docker run -it --name mynginx4 nginx:1.23.4 bash
mkdir www

将宿主机的文件复制过去:

docker cp /root/Doc/test.txt mynginx4:/www/

在这里插入图片描述

查看文件内容:
在这里插入图片描述

在容器mynginx4 的www目录下创建文件test2.txt:
在这里插入图片描述
将容器mynginx4 的文件复制到宿主机来:

docker cp mynginx4:/www/test2.txt /root/Doc/

在这里插入图片描述

docker diff

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

docker diff CONTAINER

例子:
在这里插入图片描述
在容器中创建一个目录:

docker exec -it mynginx3 mkdir /www/

再次查看该容器的文件结构:
在这里插入图片描述

docker commit

从容器创建一个新的镜像。

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

关键参数
参数描述-a提交的镜像作者;-c使用 Dockerfile 指令来创建镜像;可以修改启动指令-m提交时的说明文字;-p在 commit 时,将容器暂停
例子:
从一个容器中创建出对应的镜像出来:

docker commit mynginx4 mywebsite:1.1

在这里插入图片描述

使用选项 -a 和 -m:

docker commit -a 'wahaha'-m 'test docker commit' mynginx4 mywebsite:1.2

在这里插入图片描述

使用选项 -c 修改启动命令:

docker commit -c 'CMD["tail","-f","/etc/hosts"]-p mynginx4 mywebsite:1.3

在这里插入图片描述
在这里插入图片描述

docker pause 和 docker unpause

暂停容器中所有的进程 和 恢复容器中所有的进程

docker pause CONTAINER
docker unpause CONTAINER

例子:
在这里插入图片描述

docker rm

删除停止的容器

docker rm [OPTIONS] CONTAINER

关键参数:-f:通过SIGKILL信号强制删除一个运行的容器

例子:
在这里插入图片描述
在这里插入图片描述

docker export

导出容器内容为 tar 文件

docker export[OPTIONS] CONTAINER

关键参数: -o:写入到文件

例子:
无论容器是否在运行,都可以进行导出:

docker export-o mynginx202411.tar mynginx3

在这里插入图片描述

docker wait

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

docker wait CONTAINER [CONTAINER...]

例子:
在这里插入图片描述

docker rename

重命名容器

docker rename CONTAINER NEW_NAME

例子:
在这里插入图片描述

docker container prune

删除所有停止的容器

docker container prune [OPTIONS]

关键参数: -f : 不提示是否进行确认

例子:
查看所有容器:

docker ps -a
docker container prune

在这里插入图片描述

docker update

更新容器配置

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

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

docker update -m 400m mynginx1

在这里插入图片描述

标签: docker eureka 容器

本文转载自: https://blog.csdn.net/m0_74068921/article/details/144327142
版权归原作者 诡异森林。 所有, 如有侵权,请联系我们删除。

“Docker--Docker Container(容器)”的评论:

还没有评论