首页 > 其他分享 >[Docker#7] 容器 | OOM | 常用命令 | 交互模式 | 批量处理

[Docker#7] 容器 | OOM | 常用命令 | 交互模式 | 批量处理

时间:2024-11-13 21:18:29浏览次数:3  
标签:容器 container OOM mynginx -- 常用命令 CONTAINER Docker docker

目录

什么是容器

生活案例

为什么需要容器?

容器的生命周期

3 种特殊情况

3.1 容器 OOM

3.2 容器异常退出

3.3 容器暂停

容器命令清单

Docker 容器常用命令

docker create

docker run

docker ps

docker logs

docker exec

docker start

docker stop

docker restart

docker kill

docker top

docker stats

Docker 容器操作笔记

docker container inspect

docker port

docker cp

docker diff

docker commit

docker pause

docker unpause

docker rm

docker export

docker wait

docker rename

docker container prune(删除暂停)

docker update

容器交互模式

实验

1. 容器基本操作

2. 容器状态迁移

容器批量处理技巧


什么是容器

  • 容器是镜像的运行实体。
  • 镜像是静态的只读文件,而容器带有运行时需要的可写文件层,并且容器中的进程属于运行状态。
  • 容器有初建、运行、停止、暂停和删除五种状态。
  • 容器有自己独立的命名空间隔离和资源限制,无法看到主机上的进程、环境变量、网络等信息。
生活案例
  • 镜像与容器类似于毛坯房与装修后的房子,或基础类与实例化对象,两者在内容和用途上有所不同。
  • 容器:镜像的实例化,跑起来了就叫容器

为什么需要容器?
  • 镜像是静态文件,不能直接提供服务。
  • 容器将镜像运行起来,提供动态服务。
  • 容器带来了虚拟化和容器化的诸多优势,如轻量级、隔离性、可移植性等。
容器的生命周期

状态

描述

created

初建状态

running

运行状态

stopped

停止状态

paused

暂停状态

deleted

删除状态

各生命周期之间的转换关系如图所示:

3 种特殊情况

3.1 容器 OOM

Docker 在处理 Out-of-Memory (OOM) 事件时分为三种情况:

  1. 内存限额耗尽
    • 描述: 如果容器中的应用耗尽了主机系统分配给容器的内存限额,就会触发 OOM 事件。
    • 示例: 假设主机分配给容器的内存上限为 1GB,当容器内的应用请求超过 1GB 的内存时,会触发 OOM 事件。内存溢出,系统会杀死“胖”进程
    • 结果: 容器会被强制关闭。
    • 关闭者: 宿主机操作系统,而不是 Docker Daemon。因为容器实际上是运行在宿主机操作系统中的进程,宿主机通过 cgroups 设定了资源上限,当这些进程请求的资源达到上限时,触发的是宿主机操作系统的内核 OOM 事件,因此由宿主机内核关闭这些进程。
  1. 禁用 OOM-Killer
    • 描述: 用户可以选择 --oom-kill-disable 参数来禁用 OOM-Killer。
    • 注意事项: 如果使用 -m 参数设置了容器的内存上限,当容器达到内存资源上限时,主机不会关闭容器,但也不会继续向容器分配资源,此时容器将处于 hung 状态。
    • 目的: 将最坏的情况封闭在一定范围内,防止问题蔓延。
  1. 无内存上限
    • 描述: 如果用户使用了 --oom-kill-disable 参数,但没有使用 -m 参数设定内存上限,容器将尽可能多地使用主机内存资源。
    • 结果: 主机内存有多大,容器就将用多大。
3.2 容器异常退出
  • Init 进程: 每个容器内部都存在一个 Init 进程,容器中其他所有进程都是此进程的子进程。
  • 退出机制: 运行的容器是因为 Init 进程在运行,如果一个子进程因为某种原因造成了退出,那么其父进程也会同步退出,直至 Init 进程也退出。当 Init 进程退出时,容器就被关闭。
  • Docker Daemon 行为: Docker Daemon 无法判断进程退出是正常退出还是异常退出。当容器关闭时,Docker Daemon 会尝试将容器从 Stopped 状态转为 Running 状态,但前提是容器设置了 --restart 参数。否则,容器将保持停止状态。
3.3 容器暂停
  • CPU 资源剥夺: 当容器被暂停时,Docker 会“剥夺”该容器的 CPU 资源。
  • 其他资源保留: 其他资源如内存资源、网络资源等仍然保留。
  • 状态: 由于失去了 CPU 资源,容器中的进程不会被主机内核系统调度,因此容器处于“冰封”状态。
容器命令清单

命令

别名

功能

备注

docker create

docker container create

创建容器

docker run

docker container run

运行容器

必须掌握

docker attach

docker container attach

连接到正在运行中的容器

docker commit

docker container commit

将容器提交为镜像

必须掌握

docker cp

docker container cp

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

必须掌握

docker diff

docker container diff

检查容器文件结构的更改

docker exec

docker container exec

在运行的容器中执行命令

必须掌握

docker export

docker container export

将容器导出为 tar 文件

docker inspect

docker container inspect

查看容器详细信息

必须掌握

docker kill

docker container kill

强制退出容器

必须掌握

docker logs

docker container logs

查看容器日志

必须掌握

docker ps

docker container ls, list, ps

查看正在运行的容器

必须掌握

docker pause

docker container pause

暂停容器

docker port

docker container port

查看容器的端口映射

docker prune

docker container prune

删除停止的容器

docker rename

docker container rename

重命名容器

docker restart

docker container restart

重启容器

必须掌握

docker rm

docker container rm, remove

删除容器

必须掌握

docker start

docker container start

启动容器

必须掌握

docker stats

docker container stats

查看资源占用信息

必须掌握

docker stop

docker container stop

停止容器

必须掌握

docker top

docker container top

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

必须掌握

docker unpause

docker container unpause

继续运行容器

docker update

docker container update

更新容器配置

docker wait

docker container wait

阻止容器停止,打印退出代码

Docker 容器常用命令

docker create
  • 功能: 创建一个新的容器但不启动它
  • 语法: docker create [OPTIONS] IMAGE [COMMAND] [ARG...]
  • 关键参数:
    • -i: 以交互模式运行容器
    • -P: 随机端口映射
    • -p: 指定端口映射
    • -t: 分配一个伪输入终端
    • --name="nginx-lb": 为容器指定一个名称
    • --rm: 容器退出时自动删除
    • --restart: 自动重启
  • 样例: docker create --name mynginx nginx:latest

docker run
  • 功能: 创建一个新的容器并运行一个命令
  • 语法: docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

关键参数

  • -d: 后台运行容器,并返回容器 ID;比 create 多了这个参数。
  • -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 退出的时候自动删除容器。
  • --restart: 自动重启。
  • 样例: docker run --name mynginx -d nginx:latest
docker ps
  • 功能: 列出容器
  • 语法: docker ps [OPTIONS]
  • 关键参数:
    • -a: 显示所有容器
    • -f: 根据条件过滤
    • --format: 指定返回值的模板文件
    • -l: 显示最新的容器
    • -n: 列出最近创建的 n 个容器
    • --no-trunc: 不截断输出
    • -q: 只显示容器编号
    • -s: 显示总的文件大小
  • 样例: docker ps -a

docker logs
  • 功能: 查看容器日志
  • 语法: docker logs [OPTIONS] CONTAINER
  • 关键参数:
    • -f: 跟踪日志输出
    • --since: 显示某个开始时间的所有日志
    • -t: 显示时间戳
    • -n: 仅列出最新 N 条容器日志
  • 样例: docker logs -f mynginx

docker exec
  • 功能: 在容器中执行命令
  • 语法: docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
  • 关键参数:
    • -d: 分离模式
    • -i: 保持 STDIN 打开
    • -t: 分配一个伪终端
    • -e: 设置环境变量
    • -u: 指定用户
    • -w: 指定工作目录
  • 样例: docker exec -it mynginx bash
docker start
  • 功能: 启动停止的容器
  • 语法: docker start [OPTIONS] CONTAINER [CONTAINER...]
  • 样例: docker start mynginx
docker stop
  • 功能: 停止运行的容器
  • 语法: docker stop [OPTIONS] CONTAINER [CONTAINER...]
  • 关键参数:
    • -s: 发送的信号
  • 样例: docker stop mynginx

docker restart
  • 功能: 重启容器
  • 语法: docker restart [OPTIONS] CONTAINER [CONTAINER...]
  • 关键参数:
    • -s: 发送信号
  • 样例: docker restart mynginx
docker kill
  • 功能: 强制退出容器
  • 语法: docker kill [OPTIONS] CONTAINER [CONTAINER...]
  • 关键参数:
    • -s: 发送的信号
  • 注意事项: docker stop 发送的是 SIGTERM 信号,docker kill 发送的是 SIGKILL 信号
  • 样例: docker kill mynginx
docker top
  • 功能: 查看容器中运行的进程信息
  • 语法: docker top CONTAINER [ps OPTIONS]
  • 注意事项: 容器运行时不一定有 /bin/bash 终端来交互执行 top 命令,可以使用 docker top 查看
  • 样例: docker top mynginx
docker stats
  • 功能: 显示容器资源的使用情况
  • 语法: docker stats [OPTIONS] [CONTAINER...]
  • 关键参数:
    • --all, -a: 显示所有容器
    • --format: 指定返回值的模板文件
    • --no-stream: 展示当前状态后退出
    • --no-trunc: 不截断输出
  • 返回报文:
    • CONTAINER IDNAME: 容器 ID 与名称
    • CPU %MEM %: 容器使用的 CPU 和内存的百分比
    • MEM USAGE / LIMIT: 容器正在使用的总内存,以及允许使用的内存总量
    • NET I/O: 容器通过其网络接口发送和接收的数据量
    • BLOCK I/O: 容器从主机上的块设备读取和写入的数据量
    • PIDs: 容器创建的进程或线程数
  • 样例: docker stats mynginx

Docker 容器操作笔记

docker container inspect
  • 功能: 查看容器详细信息
  • 语法:
docker container inspect [OPTIONS] CONTAINER [CONTAINER...]
  • 关键参数:
    • -f: 指定返回值的模板文件,如 tablejson
    • -s: 显示总的文件大小
  • 注意事项:
    • docker inspect 会自动检查是镜像还是容器,然后显示相关信息
  • 样例:
docker container inspect mynginx
docker port
  • 功能: 用于列出指定的容器的端口映射,或者查找将 PRIVATE_PORT NAT 到面向公众的端口
  • 语法:
docker port CONTAINER [PRIVATE_PORT[/PROTO]]
  • 样例:
docker port mynginx
docker cp
  • 功能: 在容器和宿主机之间拷贝文件
  • 语法:
docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH
  • 别名:
docker container cp
  • 样例:

源文件-->目的地

# 将主机/www/目录拷贝到容器 mynginx 的/www 目录下
docker cp /www/ mynginx:/www/
# 将容器/www/目录拷贝到主机的/wwwbak 目录下
docker cp mynginx:/www/ /wwwbak/
docker diff
  • 功能: 检查容器里文件结构的更改
  • 语法:
docker diff CONTAINER
  • 样例:
docker diff mynginx

docker commit
  • 功能: 从容器创建一个新的镜像
  • 语法:
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
  • 参数:
    • -a: 提交的镜像作者
    • -c: 使用 Dockerfile 指令来创建镜像;可以修改启动指令
    • -m: 提交时的说明文字
    • -p: 在 commit 时,将容器暂停
  • 样例:
docker commit c3f279d17e0a maxhou/mynginx:v01
docker pause
  • 功能: 暂停容器中所有的进程
  • 语法:
docker pause CONTAINER [CONTAINER...]
  • 样例:
docker pause mynginx
docker unpause
  • 功能: 恢复容器中所有的进程
  • 语法:
docker unpause CONTAINER [CONTAINER...]
  • 样例:
docker unpause mynginx

docker rm
  • 功能: 删除停止的容器
  • 语法:
docker rm [OPTIONS] CONTAINER [CONTAINER...]
  • 别名:
docker container rm
  • 关键参数:
    • -f: 通过 SIGKILL 信号强制删除一个运行中的容器
  • 样例:
# 删除 mynginx 容器
docker stop mynginx
docker rm mynginx
# 删除所有停止的容器
docker rm $(docker ps -a -q)
docker export(-->tar)
  • 功能: 导出容器内容为 tar 文件
  • 语法:
docker export [OPTIONS] CONTAINER
  • 别名:
docker container export
  • 关键参数:
    • -o: 写入到文件
  • 样例:
# 导出 nginx 为 tar
docker export -o mynginx202203.tar mynginx

docker wait
  • 功能: 阻塞运行直到容器停止,然后打印出它的退出代码
  • 语法:
docker wait CONTAINER [CONTAINER...]
  • 别名:
docker container wait
  • 样例:
docker wait mynginx
docker rename
  • 功能: 重命名容器
  • 语法:
docker rename CONTAINER NEW_NAME
  • 别名:
docker container rename
  • 样例:
docker rename mynginx myweb
docker container prune(删除暂停)
  • 功能: 删除所有停止的容器
  • 语法:
docker container prune [OPTIONS]
  • 关键参数:
    • -f, --force: 不提示是否进行确认
  • 样例:
docker container prune
docker update
  • 功能: 更新容器配置
  • 语法:
docker update [OPTIONS] CONTAINER [CONTAINER...]
  • 别名:
docker container update
  • 关键参数:
    • --cpus: CPU 数量
    • --cpuset-cpus: 使用哪些 CPU
    • --memory: 内存限制
    • --memory-swap: 交换内存
    • --cpu-period: 用来指定容器对 CPU 的使用要在多长时间内做一次重新分配
    • --cpu-quota: 用来指定在这个周期内,最多可以有多少时间用来跑这个容器
  • 样例:
# 更新内存
docker update -m 400m myweb

通过以上命令和参数,可以有效地管理和操作 Docker 容器。


容器交互模式

Attach模式

  • 描述:执行docker run命令时不添加-it-d参数,容器将进入Attach模式。在此模式下,终端会持续阻塞并显示容器日志。
  • 示例:启动nginx容器。
docker run nginx
  • 特点:终端显示容器日志,ctrl + c可终止容器,但会导致容器退出。通常不推荐在开发环境中使用,日志查看可通过docker logs实现。

Detached模式

  • 描述:通过添加-d--detach参数运行容器,容器将在后台运行,即Detached模式。此模式下,容器不会因终端中断而退出。
  • 示例:以Detached模式启动nginx容器。
docker run -d nginx
  • 特点:容器后台运行,不受终端ctrl + c影响。若需在容器内执行命令,可使用docker exec

Interactive模式

  • 描述:容器运行后,如需进行复杂操作,可使用docker exec -it ... bash命令组合进入Interactive模式,通过bash终端操作容器。
  • 示例:进入运行中的mynginx容器。
docker exec -it mynginx bash
  • 特点:输入exit退出终端,避免使用ctrl + c以防容器退出。

实验

1. 容器基本操作

通过 nginx 镜像文件创建容器

docker container run nginx

容器的列举(包含正在运行的容器)

docker container ls

停止当前正在运行的容器

docker container stop 4c2

容器的列举(包含正在运行和退出的容器)

docker container ls -a

容器的删除

docker container rm 4c2
docker container ls -a

2. 容器状态迁移

创建容器

docker create --name mynginx1 -p 80:80 nginx:1.22.1

查看容器状态(已创建)

docker ps -a | grep mynginx1

启动容器

docker start mynginx1

查看容器状态(已运行)

docker ps

停止容器

docker stop mynginx1
docker ps -a | grep mynginx1

再次启动容器,然后 kill 容器

docker start mynginx1
docker kill mynginx1
docker ps -a | grep mynginx1

启动容器,然后暂停容器

docker start mynginx1
docker pause mynginx1
docker ps

恢复容器

docker unpause mynginx1
docker ps

重启容器

docker restart mynginx1
docker ps

删除容器

docker stop mynginx1
docker rm mynginx1
docker ps -a | grep mynginx1

容器批量处理技巧

命令

解释

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 选项

标签:容器,container,OOM,mynginx,--,常用命令,CONTAINER,Docker,docker
From: https://blog.csdn.net/2301_80171004/article/details/143752645

相关文章

  • XXL JOB DockerCompose部署
    官网给的方式是Docker命令启动,但是用起来太麻烦了,所以用DockerCompose简化部署创建数据库,导入SQLSQL脚本位置为/xxl-job/doc/db/tables_xxl_job.sqlhttps://raw.githubusercontent.com/xuxueli/xxl-job/refs/heads/master/doc/db/tables_xxl_job.sql编写DockerComposev......
  • 什么是 Java中的 OOM
    一、什么是Java中的OOM(OutOfMemoryError)在Java中,OutOfMemoryError(OOM)是一个运行时错误,表示JVM(JavaVirtualMachine)在执行程序时,无法为对象分配足够的内存。通常,这意味着JVM堆内存或其他内存区域(如方法区、直接内存等)已用尽。OOM错误通常发生在以下几......
  • 用idea的docker插件生成镜像并推送到服务器
    准备这两个文件......
  • Docker安装MySQL双主从复制
    一、下载mysql镜像略二、主节点my.cnf配置[mysqld]设置server_id,同一局域网中需要唯一server_id=1指定不需要同步的数据库名称binlog-ignore-db=mysql开启二进制日志功能log-bin=mysql-bin设置二进制日志使用内存大小(事务)binlog_cache_size=1M设置使用的二进制日志......
  • docker打成镜像并推送
    Dockerfile文件内容:基础镜像使用javaFROMopenjdk:17-jdk-alpine添加维护者信息LABELmaintainer="YZJ"将jar包添加到容器中并更名为:uacp-ai-avatar-biz.jarCOPYuacp-ai-avatar-biz.jaruacp-ai-avatar-biz.jar运行jar包ENTRYPOINT["java","-jar","uacp-ai-av......
  • kubectl常用命令行记录
    以下是kubectl的常用的命令1、查看podkubectlgetpod-nnamespace上述命令行可查看该命名空间下的pod情况,信息展示的少,若想列表展示更多,可使用-owide指定输出方式,如下所示kubectlgetpod-nnamespace-owide注:namespace:命名空间2、查看svckubectlgetsvc-nnamespace同......
  • Dockerfile构建镜像(练习一Apache镜像)(5-1)
    目录指令详解本章实例:1.创建工作目录2.在工作目录中创建并编写Dockerfile文件(1)保证拥有centos基础镜像3.编写相关执行脚本##添加启动镜像启动执行脚本#设置centos.repo仓库文件Docker主机需要搭建yum仓库4.使用Dockerfile生成镜像 5.使用新镜像运行容器测试#查......
  • docker总结
    ‌Docker‌是一个开源的应用容器引擎,它允许开发者将应用及其依赖打包进一个可移植的容器镜像中,然后在任何流行的Linux或Windows操作系统上发布和运行。Docker通过将系统的所有文件封装成一个镜像,使得每个容器都有独立的操作系统环境,从而解决了应用部署中的环境差异和依赖问题‌。......
  • day02-docker快速入门
    1.快速入门1.1.部署MySQL使用Docker安装,仅仅需要一步即可,在命令行输入下面的命令(建议采用CV大法):dockerrun-d\--namemysql\-p3306:3306\-eTZ=Asia/Shanghai\-eMYSQL_ROOT_PASSWORD=123\mysql安装完成1.2命令解读 dockerrun-d:创建并运行......
  • 在Linux中使用Nginx和Docker进行项目部署
    前言随着云计算和微服务架构的发展,容器化技术如Docker变得越来越重要。本篇文章将向大家介绍如何在Linux操作系统中使用Nginx作为Web服务器,并结合Docker容器化技术来部署一个简单的Web应用。通过本文,你将学会基本的Linux命令、Nginx的安装与配置,以及如何使用Docker进行应用部......