Docker Container(容器)

什么是容器

通俗地讲,容器是镜像的运行实体。镜像是静态的只读文件,而容器带有运行时需要的可写文件层,并且容器中的进程属于运行状态。即容器运行着真正的应用进程。容器有初建、运行、停止、暂停和删除五种状态。
通俗地讲,容器是镜像的运行实体。镜像是静态的只读文件,而容器带有运行时需要的可写文件层,并且容器中的进程属于运行状态。即容器运行着真正的应用进程。容器有初建、运行、停止、暂停和删除五种状态。
容器是基于镜像创建的可运行实例,并且单独存在,一个镜像可以创建出多个容器。运行容器化环境时,实际上是在容器内部创建该文件系统的读写副本。 这将添加一个容器层,该层允许修改镜像的整个副本
image.png

为什么需要容器

镜像是静态的文件,并不能提供服务,就像我拿了个 Linux 或者 Windows 的光盘一样,只有安装到主机里面运行起来才能对外提供服务,我们才能使用。
虚拟化和容器化的最主要目的就是资源隔离,随着资源隔离的实现也带来更大的收益:

  1. 资源利用率高:将利用率较低的服务器资源进行整合,用更少硬件资源运行更多业务,降低 IT 支出和运维管理成本。
  2. 环境标准化:一次构建,随处运行。实现执行环境的标准化发布,部署和运维。开发过程中一个常见的问题是环境一致性问题。由于开发环境、测试环境、生产环境不一致,导致有些bug 并未在开发过程中被发现。而 Docker 的镜像提供了除内核外完整的运行时环境,确保了应用运行环境一致性,从而不会再出现 _「这段代码在我机器上没问题啊」 _这类问题。
  3. 差异化环境提供:同时提供多套差异化的执行环境,限制环境使用资源。比如我的服务一个以来 Ubuntu 操作系统,一个服务依赖 CentOS 操作系统,但是没有预算购买两个物理机,这个时候容器化就能很好的提供多种不同的环境。
  4. 沙箱安全:为避免不安全或不稳定软件对系统安全性、稳定性造成影响,可使用虚拟化技术构建虚拟执行环境。比如我在容器里面执行 rm -rf /* 不会把整个服务器搞死,也不影响其他人部署的程序使用
  5. 容器比虚拟机更轻量,启动更快:传统的虚拟机技术启动应用服务往往需要数分钟,而 Docker 容器应用,由于直接运行于宿主内核,无需启动完整的操作系统,因此可以做到秒级、甚至毫秒级的启动时间。大大的节约了开发、测试、部署的时间。
  6. 维护和扩展简单:Docker 使用的分层存储以及镜像的技术,使得应用重复部分的复用更为容易,也使得 应用的维护更新更加简单,基于基础镜像进一步扩展镜像也变得非常简单。此外, Docker 团队同各个开源项目团队一起维护了一大批高质量的 官方镜像,既可以直接 在生产环境使用,又可以作为基础进一步定制,大大的降低了应用服务的镜像制作成 本。比如 docker hub 提供了很多镜像,各个系统的一个命令就可以拿到了,研发也可以自己定制镜像分享给各个产品

容器是生命周期

  1. created:初建状态
  2. running:运行状态
  3. stopped:停止状态
  4. paused:暂停状态
  5. deleted:删除状态

各生命周期直接的转换图:
image.png
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 不需要重启,容器转为停止状态。

容器OOM

Docker 在处理 OOM 事件时分为三种情况
(1)如果容器中的应用耗尽了主机系统分配给容器的内存限额,就会触发 OOM 事件。 例如,在容器当中,部署了一个 web 服务。假设主机分配给此容器的内存上限为 1G, 当脚本申请的内存大于 1G 时,此容器就会触发 OOM 事件。而在这种情况下,此容器将会被强制关闭。
但需要注意的是,此时关闭容器的并非是 Docker Daemon,而是宿主机操作系统。因 为一个容器其实就是一组运行在宿主机操作系统当中的进程,宿主机操作系统通过cgroups 对这组进程设定资源上限,当这些进程申请的资源到达上限时,触发的是宿主机操作系统的内核 OOM 事件,因此最终是由宿主机内核来关闭这些进程.
(2) 如果用户不想关闭这个容器,那么可以选择–oom-kill-disable 来禁用 OOM-Killer。使用此参数时,仍需要注意,如果使用-m 设置了此容器内存上限,那么当容器到达内存资源上限时,主机不会关闭容器,但也不会继续向此容器继续分配资源,此时容器将处于 hung 状态。只需要将最坏的情况封闭在一定范围之内,而不至于蔓延出去。
(3)如果用户使用了–oom-kill-disable,但也没有使用-m 来设定上限,因而此时此容器 将会尽可能多地使用主机内存资源。换言之,主机内存有多大,它就将用多大。

容器异常退出

每个容器内部都存在一个 Init 进程,容器中其他所有进程都是此进程的子进程。运行 的容器是因为 Init 进程在运行,如果一个子进程因为某种原因造成了退出,那么其父 进程也会同步退出,直至 Init 进程也退出。当 Init 进程退出时,也就代表着此容器被关闭。docker 目前没有办法知道此时的进程退出属于正常退出还是异常退出。当出现容器关闭情况时,Docker Daemon 会尝试再次重新将此容器由 Stopped 状态转为 Running状态。只有设置了–restart 参数的容器,Docker Daemon 才会去尝试启动,否则容器 会保持停止状态。

容器暂停

Docker“剥夺”了此容器的 CPU 资源。而其他资源,如 Memory 资源、Network 资源等还保留未动。如此一来,失去了 CPU 资源的进程,是不会被主机内核系统所调度的,所以此容器就处于“冰封”状态。

容器命令清单

命令别名功能
docker createdocker container create创建容器
docker rundocker container run运行容器
docker attachdocker container attach连接到正在运行的容器
docker commitdocker container commit将镜像提交为容器
docker cpdocker container cp在容器和宿主机之间拷贝
docker diffdocker container diff检查容器里文件机构的更改
docker execdocker container exec在运行的容器中执行命令
docker exportdocker container export将容器导出为tar
docker container inspect查看容器详细信息
docker killdocker container kill杀死容器
docker logsdocker container logs查看日志
docker psdocker container ls
docker container list
docker container ps
查看正在运行的进程
docker pausedocker container pause暂停进程
docker portdocker container port查看容器的端口映射
docker container prune删除停止的容器
docker renamedocker container rename重命名容器
docker restartdocker container restart重启容器
docker rmdocker container rm
docker container remove
删除容器
docker startdocker container start启动容器
docker stopdocker container stop停止容器
docker statsdocker container stats查看资源占用信息
docker topdocker container top查看某个容器的资源占用
docker unpausedocker container unpause继续运行容器
docker updatedocker container update更新容器配置
docker waitdocker container wait阻止一个或多个容器运行直到容器停止,然后打印退出代码

标红的命令需要重点掌握

docker run

创建一个新容器并运行

docker run [options] image [command] [arg...]

参数
  • -d:后台运行容器,并返回容器ID(比docker create命令多这个参数)
  • -i:以交互模式运行容器,通常与-t同时使用
  • -P:随机端口映射,容器内部端口随机映射到主机的端口
  • -p:指定端口映射,格式为:主机(宿主)端口:容器端口
  • -t:为容器重新分配一个伪输入终端,通常与-i同时使用
  • –name:为容器指定一个名称
  • -h:指定容器的hostname
  • -e:设置环境变量
  • –cpuset-cpus=“0-2”(–cpuset-cpus="0,1,2):绑定容器到cpu的0,1,2三核上运行
  • -m:设置容器使用内存最大值
  • –network:指定容器使用内存最大值
  • –link:添加链接到另外一个容器
案例

无参数

image.png
无参数下,如果本地没有这个镜像就会去仓库中拉取,再来运行,此时以前台方式运行
image.png
在另外一个窗口查看正在运行的容器

后台运行

image.png
以后台的方式运行最新版本的nginx
image.png

交互界面

image.png
如果不使用-it,因为ubuntu默认使用bin/bash方式运行,所以需要使用-it才能看到交互界面

端口映射

image.png
image.png

一般不使用-P选项

给容器命名

image.png

给容器更换主机名

image.png

设置环境变量

image.png

设置CPU核心数

image.png

设置最大可使用内存

image.png

docker stats mynginx2

image.png

创建容器链接

image.png
image.png

myubuntu2链接myubuntu1,可以访问到myubuntu1,而myubuntu1不行

退出自动删除

image.png

docker ps

列出容器

docker ps [options]

参数
  • -a:显示所有容器,包括未运行的image.png
  • -f:根据条件过滤显示内容image.png
  • –format:指定返回格式image.png
  • -l:显示latest容器image.png
  • -n:列出最近创建的n个容器image.png
  • –no-trunc:不截断输出image.png
  • -q:静默模式,只显示容器编号image.png
  • -s:显示总的文件大小image.png

docker create

创建一个新容器但不启动他

docker create [options] image [command] [arg..]

参数
  • -i:以交互模式运行容器,通常与-t同时使用
  • -P:随机端口映射,容器内部端口随机映射到主机的端口
  • -t:为容器重新分配一个伪输入终端,通常与-i同时使用
  • –name:为容器指定一个名称
  • -h:指定容器的hostname
  • -e:设置环境变量
  • –cpuset-cpus=“0-2”(–cpuset-cpus="0,1,2):绑定容器到cpu的0,1,2三核上运行
  • -m:设置容器使用内存最大值
  • –network:指定容器使用内存最大值
  • –link:添加链接到另外一个容器
  • –restart:自动重启

image.png

docker logs

查看容器日志

docker logs [options] container

参数
  • -f:跟踪日志输出
  • –since:显示某个开始时间的所有日志image.png
  • -t:显示时间戳
  • -n:显示最新n条容器日志image.png

docker attach

连接到正在运行的容器

docker attach [options] container

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

image.png
使用docker attach连接到mynginx2容器,退出时连同mynginx2一起退出。
image.png

docker exec

在容器中执行命令

docker exec [options] container command [arg...]

参数
  • -d:在后台运行

image.png

  • -i:即使没有附加也保持 STDIN 打开
  • -t:分配一个伪终端

image.png

  • -e:设置环境变量

image.png

  • -u:指定用户 “<name|uid>[:<group|gid>]”

image.png

  • -w:指定工作目录

image.png

docker stop

停止运行的容器

docker stop [options] container

image.png

docker start

启动停止的容器

docker start [options] container [container...]

image.png

docker restart

重启容器

docker restart [options] container [container...]

image.png

docker kill

强制退出容器

docker kill [options] container [container...]

image.png

docker top

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

docker top container [ps options]

image.png

docker stats

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

docker stats [options] [container...]

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

image.png

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

docker container inspect

查看容器详细信息

docker container inspect [options] container [container...]

关键参数
  • -f:指定返回值的模板文件。如 table、json
  • -s:显示总的文件大小

image.png

docker port

查看容器的端口映射

docker port container [private_prot[/proto]]

image.png

docker cp

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

docker cp [options] container:src_path dest_path
docker cp [options] src_path container:dest_path

将mynginx3容器的index.html拷贝到宿主机/home/test1目录下
image.png
将修改后的index.html文件拷贝回去
image.png

docker diff

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

docker diff container

image.png

docker commit

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

docker commit [options] container [repository[:tag]]

参数
  • -a:提交镜像的作者
  • -c:使用dockerfile指令来创建镜像,可以修改启动命令
  • -m:提交时的说明
  • -p:在commit时,将容器暂停

image.png

docker pause

暂停容器中的所有进程

docker pause container [container...]

image.png

docker unpause

恢复容器中所有的进程

docker unpause container [container...]

image.png

docker rm

删除停止的容器

docker rm [options] container [container...]

参数
  • -f:通过sigkill信号强制删除一个运行中的容器

image.png

docker export

导出容器内容为tar文件

docker export [options] container

参数
  • -o:写入到文件

image.png

docker wait

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

docker wait container [container...]

image.pngimage.png

docker rename

重命名容器

docker container rename

image.png

docker container prune

删除所有停止的容器

docker container prune [options]

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

image.png

docker update

更新容器配置

docker update [options] container [container...]

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/662219.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用Pycharm在本地调用chatgpt的接口

目录 1.安装环境 2.建立多轮对话的完整代码&#xff08;根据自己使用的不同代理需要修改端口&#xff08;port&#xff09;&#xff09; 3.修改代码在自己的Pycharm上访问chagpt的api并实现多轮对话&#xff0c;如果不修改是无法成功运行的。需要确定秘钥和端口以保证正常访…

注册虾皮买家号所需资料解析:一步步了解必备信息

为了在Shopee上获取更多的曝光和销售机会&#xff0c;许多卖家都在积极探索自动化注册的方法。使用Shopee买家通系统进行自动化注册&#xff0c;需要准备一些必要的资料&#xff0c;下面我们来详细了解一下&#xff1a; 手机号&#xff1a;在Shopee注册买家号时&#xff0c;手…

2024美赛C题保姆级分析完整思路代码数据教学

2024美国大学生数学建模竞赛C题保姆级分析完整思路代码数据教学 C题 Momentum in Tennis 网球中的动量 在2023年温布尔登男单决赛中&#xff0c;20岁的西班牙新星卡洛斯阿尔卡拉兹击败了36岁的诺瓦克德约科维奇。这是德约科维奇自2013年以来在温布尔登的首次失利&#xff0c;也…

linux+rv1126/imx6ull:opencv静态库交叉编译

目录 1.下载 2.准备工作 2.1安装依赖环境 2.2安装Cmake 2.3 解压opencv 3.Cmake设置 3.1文件夹选择 1&#xff09;进入源码根目录 2&#xff09;运行cmake 3&#xff09;选择目录 4&#xff09;进入配置界面 5&#xff09;查找编译器 6&#xff09;配置编译器 3.…

TCP 连接掉线自动重连

文章目录 TCP 连接掉线自动重连定义使用连接效果 TCP 接收数据时防止掉线。TCP 连接掉线自动重连。多线程环境下TCP掉线自动重连。 欢迎讨论更好的方法&#xff01; TCP 连接掉线自动重连 定义 定义一个类&#xff0c;以编写TCP连接函数Connect()&#xff0c;并且&#xff1a…

07.领域驱动设计:掌握整洁架构、六边形架构以及3种常见微服务架构模型的对比和分析

目录 1、概述 2、整洁架构 3、六边形架构 4、三种微服务架构模型的对比和分析 5、从三种架构模型看中台和微服务设计 5.1 中台建设要聚焦领域模型 5.2 微服务要有合理的架构分层 5.2.1 项目级微服务 5.2.2 企业级中台微服务 5.3 应用和资源的解耦与适配 6、总结 1、概…

Unity - 调节camera物理相机参数(HDRP)

在 “Hierarchy” 右键 -> Volume -> Global Volume new 一个 profile, 设置Mode为Pysical Camera 再点击camera组件&#xff0c;这时候设置 ISO、Shutter Speed、Aperture等参数值还会有效。

游戏APP开发:从创意到实现的全过程

随着智能手机的普及和移动互联网的发展&#xff0c;游戏APP市场日益繁荣。游戏APP开发已经成为一个热门行业&#xff0c;吸引了众多开发者和创业者的关注。本文将介绍游戏APP开发的全过程&#xff0c;包括创意、策划、设计、开发、测试和发布等环节。 一、创意 游戏APP开发的…

Hack The Box-Challenges-Misc-M0rsarchive

解压压缩包&#xff0c;里面是一张图片和一个新的zip文件 图片放大后的图案是----. 考虑到为莫斯密码&#xff0c;将其解密 密码为9&#xff0c;继续解压缩包 又是一张莫斯密码图加压缩包&#xff0c;写一段脚本去解密图片中的莫斯密码&#xff0c;并自动解压缩包 import re i…

【项目日记(七)】第三层: 页缓存的具体实现(上)

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:项目日记-高并发内存池⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你做项目   &#x1f51d;&#x1f51d; 开发环境: Visual Studio 2022 项目日…

XEX智能交易所USDT交易XEX是什么交易所

XEX交易所是数字货币交易平台&#xff0c;致力于为数字货币的爱好者提供一个安全、公平、开放、高效的区块链数字资产交易平台&#xff0c;数字货币指基于区块链技术和加密技术产生的&#xff0c;以去中心化形式发行、管理的&#xff0c;有一定价值的加密令牌、数字令牌或加密货…

CentOS 8最小安装和网络配置

文章目录 简介下载地址VMware 17创建虚拟机最小化安装拥有的外部命令yum源有问题网络配置开启SSH Server服务关闭防火墙设置host配置JDK环境完整参考 简介 CentOS 8的IOS如果下载DVD版本至少有10G 这里我们直接选择最小安装&#xff0c;因此选择最小系统boot版本 CentOS-8.5.21…

免费版XShell7下载安装

1.下载地址 家庭/学校免费 - NetSarang Websitehttps://www.xshell.com/zh/free-for-home-school/ 不同时期下载&#xff0c;版本会有不同&#xff0c;实时下载即可。 2.安装 Xshell和Xftp都要安装&#xff0c;点击下一步&#xff0c;直至安装完成。 3.邮箱注册&#xff0c;免…

Ajax 详解及其使用

Ajax&#xff08;Asynchronous JavaScript and XML&#xff09;是一种在客户端与服务器之间进行异步通信的技术&#xff0c;它允许网页在不重新加载整个页面的情况下&#xff0c;与服务器交换数据并更新部分网页内容。Ajax 的核心是XMLHttpRequest&#xff08;XHR&#xff09;对…

Mac brew教程

一、安装brew /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"二、查看brew版本 brew -vbrew -v 三、搜索软件 命令格式&#xff1a;brew search 软件名 eg&#xff1a; brew search nginx四、安装软件 命令格…

(2)(2.11) RFD900

文章目录 前言 1 概述 2 主要功能 3 状态LED指示灯 4 接口 5 使用Mission Planner进行配置 6 支持不同国家/地区 7 讨论论坛 前言 RFD900 无线电调制解调器是一款高功率 900Mhz ISM 波段无线电调制解调器&#xff0c;设计用于远距离串行通信。据报道&#xff0c;其通信…

【代码随想录】LC 77. 组合

文章目录 前言一、题目1、原题链接2、题目描述 二、解题报告1、思路分析2、代码详解 前言 本专栏文章为《代码随想录》书籍的刷题题解以及读书笔记&#xff0c;如有侵权&#xff0c;立即删除。 一、题目 1、原题链接 77. 组合 2、题目描述 二、解题报告 1、思路分析 &#x…

保姆级的指针详解(超详细)

目录 一.内存和地址  1.初识指针 2.如何理解编址 二. 指针变量 三.指针的解引用操作符 1.指针变量的大小 四.指针变量类型的意义 五.指针的运算 1.指针加减整数 2.指针减指针 3.野指针 3.1指针未初始化 3.2指针越界访问 3.3指针指向的空间被提前释放 3.4如何规…

2024年电子数据取证“獬豸杯”比赛解析WP

2024年电子数据取证“獬豸杯”比赛解析WP 项目介绍&#xff1a;参赛对象:任务目标&#xff1a;第一部分&#xff1a;手机取证第二部分&#xff1a;计算机取证第二部分&#xff1a;APK分析 项目介绍&#xff1a; 简介&#xff1a; 竞赛为个人赛&#xff0c;工具自备&#xff0c…

如何实现任意设备远程SSH访问Deepin操作系统【内网穿透】

文章目录 推荐前言1. 开启SSH服务2. Deppin安装Cpolar3. 配置ssh公网地址4. 公网远程SSH连接5. 固定连接SSH公网地址6. SSH固定地址连接测试 推荐 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。【点击跳…