Docker的容器

Docker的容器

一.容器

容器是一种轻量级的虚拟化技术。它有效的将单个操作系统的资源划分到各独立的组中,以便更好的平衡这些独立的组之间资源的使用。

容器主要包含了命名空间(Namespaces)和cgroup(Control Groups)两大核心技术。

  1. 命名空间:Namespace是将全局系统资源隔离成独立的视图,使得在不同 Namespace 中运行的进程看到的资源是不同的。每个Namespace都有一份独立的资源,不同的进程在各自的Namespace内对同一种资源使用时不会互相干扰。
  2. cgroup:是用于限制和隔离一组进程对系统资源的使用,这些资源主要包括CPU、内存、磁盘I/O和网络带宽等。

二.Docker中的容器

容器是Docker的另一个核心概念,它是镜像的一个运行实例。在我们学习的面向对象语言中,镜像可以理解为面向对象中的类,而容器则可以看作是从镜像这个“类”实例化出来的一个个对象。

Docker容器一个轻量级的、独立的、可移植的运行环境,是架设在操作系统之上的一种轻量级的虚拟化技术。

Docker容器由于可以包含了运行某个软件所需要的所有资源,包括代码、运行时环境、库、环境变量和配置文件等。因此Docker容器就像一个“软件包装盒”,它可以将应用及其运行环境一起打包,使得应用的运行不再受限于特定的系统和环境。

Docker容器跳出了系统和环境的限制,使开发的应用程序可以在任何宿主机上以相同的方式运行。

一个镜像可以创建出多个容器。当Docker创建一个容器时,它会在加载镜像文件的所有只读层基础上再添加一个容器层。而这个容器层是可读可写的。

三.Docker容器的生命周期

Docker容器在运行的过程中,容器生命周期可能会处于已创建(Created)、运行中(Running)、停止(Stopped)、暂停中(Paused)以及删除(Deleted)等几种状态。

Docker容器的生命周期涵盖了七个关键阶段,每个阶段都有其特定的目标和操作。这七个阶段的概述如下:

  1. 已创建(Created):在容器的生命周期中,创建是第一个关键阶段。在这个阶段,我们选择适当的 Docker 镜像作为容器的基础,并使用 Docker 命令来创建容器实例。容器的配置选项和环境变量设置也在这个阶段完成。
  2. 启动(Start):一旦容器被成功创建,就可以进入启动阶段。启动已创建的容器,使其处于运行状态。
  3. 运行(Run):容器的运行阶段是其生命周期的核心。在此阶段,在容器中运行应用程序,处理请求等。
  4. 暂停:在某些情况下,我们可能需要暂停容器的运行,而不是完全停止它。暂停容器会冻结其状态,包括应用程序的进程。容器的资源消耗会暂时减少,但状态仍然保留在内存中。
  5. 继续:当需要时,我们可以将容器从暂停状态切换回运行状态,使应用程序继续处理请求。
  6. 停止(Stop):停止正在运行的容器,但并不会删除它。在停止阶段,容器会被正常关闭,应用程序会完成清理工作并释放资源。
  7. 删除(Delete):当我们确定不再需要特定容器时,可以从系统中删除已停止的容器实例。

四.Docker容器命令详解

1.docker create

docker create命令用于创建一个新容器但并不启动它。

命令格式:

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

命令别名:

docker create

参数选项:

  • --name:设置容器的名称;
  • -i,--interactive:保持标准输入打开,通常与-t同时使用;
  • -t,--tty:分配一个伪终端;
  • -p,--publish:指定容器和宿主机的端口映射,格式为:主机(宿主)端口:容器端口;
  • -P,--publish-all:将容器内部的随机端口映射到宿主机的端口;
  • --add-host:在容器内添加一个主机名到IP地址的映射关系;
  • -h,--hostname:设置容器主机名;
  • -e,--env:设置环境变量;
  • --env-file:设置读取环境变量到容器内的文件;
  • -m,--memory:限制容器内应用使用的内存;
  • --link:添加指向另一个容器的链接;
  • --network:指定容器的网络连接类型;
  • --restart:设置容器退出时的重启策略;
  • --rm:设置容器退出时自动删除容器以及关联的匿名卷;
  • -v,--volume:绑定挂载一个卷;
  • -w,--workdir:设置容器的默认工作目录;
  • -a, --attach:是否绑定到标准输入(STDIN)、输出(STDOUT)或错误(STDERR) ;
  • --device:映射物理机上的设备到容器内;
  • --dns:设置自定义DNS服务器;
  • --dns-option:设置自定义DNS选项;
  • --dns-search:设置自定义DNS搜索域;
  • --domainname:设置容器NIS域名;
  • --entrypoint:定义新的命令覆盖镜像存在的入口命令;
  • --expose:设置容器暴露出来的端口或端口范围;
  • --ip:设置容器的IPv4地址;
  • --ip6:设置容器的IPv6地址;
  • -l,--label:设置容器元数据标签信息;
  • --privileged:授予容器内进程对宿主机系统的更高权限;
  • --mount:挂载文件系统到容器;
  • --cap-ad:添加Linux功能;
  • --cap-drop:删除Linux功能;
  • --cidfile:指定容器ID写入的文件。

示例:

docker create -it --name busybox-container hub.c.163.com/library/busybox:1.27-uclibc

2.docker start

docker start [OPTIONS] CONTAINER [CONTAINER...] 命令是用于启动一个已经停止的容器。

命令格式:

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

命令别名:

docker start

参数选项:

  • -i,--interactive:保持标准输入打开,通常与-t同时使用;
  • -a, --attach:是否绑定到标准输入(STDIN)、输出(STDOUT)或错误(STDERR) 。

示例:

docker start busybox-container

我们使用docker start命令启动了1小结中刚刚创建的名称为” busybox-container”的容器。启动了完成后,再通过docker ps命令就可以查看刚刚启动的容器。

3.docker run

docker run [OPTIONS] IMAGE [COMMAND] [ARG...] 命令是从指定的镜像创建一个容器并将容器启动,它相当于先执行docker [container] create命令,然后再执行docker [container] start命令。

命令格式:

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

命令别名:

docker run

参数选项:

  • -d,--detach:在后台运行容器并打印容器的ID;
  • --name:设置容器的名称;
  • -i,--interactive:保持标准输入打开,通常与-t同时使用;
  • -t,--tty:分配一个伪终端;
  • -p,--publish:指定容器和宿主机的端口映射,格式为:主机(宿主)端口:容器端口;
  • -P,--publish-all:将容器内部的随机端口映射到宿主机的端口;
  • --add-host:在容器内添加一个主机名到IP地址的映射关系;
  • -h,--hostname:设置容器主机名;
  • -e,--env:设置环境变量;
  • --env-file:设置读取环境变量到容器内的文件;
  • -m,--memory:限制容器内应用使用的内存;
  • --link:添加指向另一个容器的链接;
  • --network:指定容器的网络连接类型;
  • --restart:设置容器退出时的重启策略;
  • --rm:设置容器退出时自动删除容器以及关联的匿名卷;
  • -v,--volume:绑定挂载一个卷;
  • -w,--workdir:设置容器的默认工作目录;
  • -a, --attach:是否绑定到标准输入(STDIN)、输出(STDOUT)或错误(STDERR) ;
  • --device:映射物理机上的设备到容器内;
  • --dns:设置自定义DNS服务器;
  • --dns-option:设置自定义DNS选项;
  • --dns-search:设置自定义DNS搜索域;
  • --domainname:设置容器NIS域名;
  • --entrypoint:定义新的命令覆盖镜像存在的入口命令;
  • --expose:设置容器暴露出来的端口或端口范围;
  • --ip:设置容器的IPv4地址;
  • --ip6:设置容器的IPv6地址;
  • -l,--label:设置容器元数据标签信息;
  • --mount:挂载文件系统到容器;
  • --privileged:授予容器内进程对宿主机系统的更高权限;
  • --cap-ad:添加Linux功能;
  • --cap-drop:删除Linux功能;
  • --cidfile:指定容器ID写入的文件。

当我们使用docker [container] run命令来创建并启动一个容器时,Docker在后台会进行如下的标准操作:

  1. 先检查本地是否存在指定的镜像,如果不存在的话就从公有仓库下载镜像;
  2. 使用镜像新建一个容器,并且启动这个容器;
  3. 分配一个文件系统给容器,并在只读的镜像层外面挂载一层可读写层;
  4. 从宿主主机配置的网桥接口中桥接一个虚拟网络接口到容器中去;
  5. 从网桥的地址池中配置一个IP地址给容器;
  6. 执行用户指定的应用程序;
  7. 应用程序执行完毕后容器或被自动终止。

示例:

docker run -p 9292:9191 -it --name busybox-container hub.c.163.com/library/busybox:1.27-uclibc

示例的docker run命令使用hub.c.163.com/library/busybox:1.27-uclibc镜像创建了一个名称为“busybox-container”的容器。-p命令参数将容器的9292端口映射到宿主机的9191端口,而-it命令参数会让容器创建了一个交互式的终端会话,这个终端可以让我们直接在容器内的命令行界面输入命令。

docker [container] run命令中有一个-d参数,它可以让创建的容器在后台以守护态(Daemonized)形式运行,命令执行成功后会返回容器的ID。

示例:

docker run --name busybox-container-d -d hub.c.163.com/library/busybox:1.27-uclibc sh -c "while true; do $(echo date); sleep 1; done"

4.docker logs

docker logs [OPTIONS] CONTAINER命令是获取容器的日志。

命令格式:

docker container logs [OPTIONS] CONTAINER

命令别名:

docker logs

参数选项:

  • -d,--detach:在后台运行容器并打印容器的ID;
  • --details:显示日志的详细信息;
  • -f,--follow:持续跟踪日志输出;
  • --since:显示自某个时间戳开始以后的日志;
  • -n,--tail:仅显示最近N条容器日志内容;
  • -t,--timestamps:显示时间戳;
  • --until:显示自某个时间戳之前的日志。

示例:

docker logs busybox-container-d

示例的docker logs命令查看了” busybox-container-d”容器的日志。这个容器会不断循环的每隔1秒钟就输出当前系统的时间。

5.docker pause

docker pause CONTAINER [CONTAINER...]命令是暂停一个或多个容器内的所有进程。该命令会挂起指定容器中的所有进程。

命令格式:

docker container pause CONTAINER [CONTAINER...]

命令别名:

docker pause

示例:

docker pause busybox-container-d

在示例中我们使用docker pause命令对第3节的新建并启动运行的” busybox-container-d”容器来进行暂停操作。暂停后的容器就处于“Paused”的状态。

6.docker unpause

docker unpause CONTAINER [CONTAINER...]命令是恢复一个或多个容器内暂停的所有进程。该命令会恢复指定容器中的所有挂起的进程。

命令格式:

docker container unpause CONTAINER [CONTAINER...]

命令别名:

docker unpause

示例:

docker unpause busybox-container-d

在示例中我们使用docker unpause命令对第5节中已经暂停的” busybox-container-d”容器来进行恢复操作。

7.docker stop

docker stop [OPTIONS] CONTAINER [CONTAINER...]命令是用来停止一个或多个正在运行的容器。

命令格式:

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

命令别名:

docker stop

参数选项:

  • -s,--signal:发送到停止容器的信号;
  • -t,--time:停止容器前等待的时间,单位为秒。

示例:

docker stop busybox-container-d

对于已经处于终止状态的容器,我们可以通过docker start命令来将它重新启动。

8.docker restart

docker restart [OPTIONS] CONTAINER [CONTAINER...]命令是用于重新启动一个或多个容器,该命令对正在运行的容器,会先终止后再重新启动。

命令格式:

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

命令别名:

docker restart

参数选项:

  • -s,--signal:发送到停止容器的信号;
  • -t,--time:停止容器前等待的时间,单位为秒。

示例:

docker restart busybox-container-d

9.docker rm

docker rm命令是移除一个或多个已停止的容器。

命令格式:

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

命令别名:

docker container remove或docker rm

参数选项:

  • -f,--force:使用SIGKILL信号强制移除正在运行的容器;
  • -l,--link:删除指定的链接;
  • -v,--volumes:移除与容器关联的匿名卷。

示例:

docker rm busybox-container

10.docker ps

docker ps命令是列出容器信息。

命令格式:

docker container ls [OPTIONS]

命令别名:

docker container list或docker container ps 或 docker ps

参数选项:

  • -a,--all:显示所有的容器(默认只显示运行的);
  • -f,--filter:根据提供的过滤条件来输出内容;
  • --format:使用自定义模板格式来设置输出;
  • -n,--last:显示最近创建的n个容器(包括所有状态的);
  • --no-trunc:不截断输出;
  • -q,--quiet:静默模式,仅显示容器ID;
  • -s,--size:显示文件总大小。

示例:

docker ps

11.docker attach

docker attach命令是进入到正在运行中的容器。当使用该命令进入到容器后,就好像在自己的终端以交互式的方式,来对容器输入命令并查看命令输出。

命令格式:

docker container attach [OPTIONS] CONTAINER

命令别名:

docker attach

参数选项:

  • --no-stdin:是否关闭标准输入,默认是保持打开;
  • --sig-proxy:是否将所有接收到的信号代理到应用进程,默认为true。

示例:

docker attach busybox-container

12.docker exec

docker exec命令是在一个运行中的容器中执行命令。

命令格式:

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

命令别名:

docker exec

参数选项:

  • -d,--detach:在容器后台运行命令;
  • -e,--env:设置环境变量;
  • --env-file:设置读取环境变量到容器内的文件;
  • -i,--interactive:保持标准输人打开接受用户输人命令,默认值为false;
  • --privileged:是否给执行的命令扩展权限,默认值为false;
  • -t,--tty:分配一个伪终端;
  • -u,--user:指定执行命令的用户名或用户ID,组名或组ID;
  • -w,--workdir:设置执行命令的默认工作目录。

示例:

docker exec -it busybox-container echo 'hello word!'

13.docker stats

docker stats命令是实时显示容器资源使用情况的统计信息,包括:CPU、内存、网络I/O等。

命令格式:

docker container stats [OPTIONS] [CONTAINER...]

命令别名:

docker stats

参数选项:

  • -a,--all:显示所有容器的资源使用情况(默认是只显示运行容器的);
  • --format:使用自定义模板格式来设置输出;
  • --no-stream:只展示当前最新的一条容器资源使用情况,不再实时更新;
  • --no-trunc:不截断输出(如:容器ID会全部显示)。

示例:

docker stats busybox-container

14.docker container inspect

docker container inspect命令是显示一个或多个容器的详细信息。

命令格式:

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

参数选项:

  • -f,--format:使用自定义模板格式来设置输出;
  • -s,--size:显示文件的总大小。

示例:

docker container inspect busybox-container

15.docker kill

docker kill命令是强制退出正在运行的容器。

命令格式:

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

命令别名:

docker kill

参数选项:

  • -s,--signal;发送到容器的信号。

示例:

docker kill busybox-container

16.docker container prune

docker container prunee命令是移除所有已经停止的容器。

命令格式:

docker container prune [OPTIONS]

参数选项:

  • --filter:提供过滤的筛选值;
  • -f,--force:不提示是否进行确认。

示例:

docker container prune

17.docker commit

docker commit命令是根据容器的更改来创建一个新的镜像。

命令格式:

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

命令别名:

docker commit

参数选项:

  • -a,--author:提交的镜像作者;
  • -c,--change:使用Dockerfile指令来创建的镜像;
  • -m,--message:提交时的注释文字说明;
  • -p,--pause:执行commit命令时,是否将容器暂停,默认值是true。

示例:

docker commit container_busybox image_busybox

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

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

相关文章

[Redis] Redis分布式锁与常见面试题

🌸个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 🏵️热门专栏: 🧊 Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 🍕 Collection与…

Word 公式转 CSDN 插件 发布

经过几个月的苦修,这款插件终于面世了。 从Word复制公式到CSDN粘贴,总是出现公式中的文字被单独提出来,而公式作为一个图片被粘贴的情况。公式多了的时候还会导致CSDN禁止进一步的上传公式。 经过对CSDN公式的研究,发现在粘贴公…

JVM——堆的回收:引用计数发和可达性分析法、五种对象引用

目录 引用计数法和可达性分析法 引用计数法: 可达性分析算法: 五种对象引用 软引用: 弱引用: 引用计数法和可达性分析法 引用计数法: 引用计数法会为每个对象维护一个引用计数器,当对象被引用时加1&…

sqlilabs--小实验

一、先盲注判断 ?id1 and sleep(2)-- 如果发现页面存在注点,使用时间盲注脚本进行注入 import requestsdef inject_database(url):name for i in range(1, 20): # 假设数据库名称长度不超过20low 48 # 0high 122 # zmiddle (low high) // 2while low &l…

VMware Workstate 的 Ubuntu18 安装 vmware tools(不安装没法共享)

在共享主机路径后,可以在: /mnt/hgfs/下方找到共享的文件。但没有安装vmware tool时是没法共享的。 如何安装vmware tool,网上版本很多。这里记录一下: VMware Workstation 17 Pro,版本:17.6.0 虚拟机系统…

STM32 I2C通信协议说明

目录 背景 I2C协议 数据的有效性 I2C通信开始和停止条件 I2C数据传输 发送 响应 正常情况: 异常情况: 主机结束接收 写寄存器的标准流程 读寄存器的标准流程 仲裁机制 时钟同步 SDA线的仲裁 程序 背景 对单片机的三大通信中的I2C通信进…

Unity与SVN集成:实现高效版本控制

内容将会持续更新,有错误的地方欢迎指正,谢谢! Unity与SVN集成:实现高效版本控制 TechX 坚持将创新的科技带给世界! 拥有更好的学习体验 —— 不断努力,不断进步,不断探索 TechX —— 心探索、心进取&…

BUU37 [DASCTF X GFCTF 2024|四月开启第一局]web1234【代码审计/序列化/RCE】

Hint1&#xff1a;本题的 flag 不在环境变量中 Hint2&#xff1a;session_start&#xff08;&#xff09;&#xff0c;注意链子挖掘 题目&#xff1a; 扫描出来www.zip class.php <?phpclass Admin{public $Config;public function __construct($Config){//安全获取基…

历史性突破!DeepSeek双模型GitHub热度超OpenAI,展现中国AI力量

在2025年2月7日&#xff0c;中国AI领域传来了一则振奋人心的消息&#xff1a;DeepSeek旗下的两大开源项目在GitHub平台上实现了历史性突破&#xff0c;其Star数成功超越了OpenAI的明星项目。这一成就不仅标志着DeepSeek在技术研发和市场影响力上的重大飞跃&#xff0c;也为中国…

肝了半年,我整理出了这篇云计算学习路线(新手必备,从入门到精通)

大家好&#xff01;我是凯哥&#xff0c;今天给大家分享一下云计算学习路线图。这是我按照自己最开始学习云计算的时候的学习路线&#xff0c;并且结合自己从业多年所涉及的知识精心总结的云计算的思维导图。这是凯哥精心总结的&#xff0c;花费了不少精力哦&#xff0c;希望对…

畅聊deepseek-r1,SiliconFlow 硅基流动注册+使用

文章目录 SiliconFlow 硅基流动注册使用注册创建API密钥使用网页端使用代码调用api调用支持的模型 SiliconFlow 硅基流动注册使用 注册 硅基流动官网 https://cloud.siliconflow.cn/i/XcgtUixn 注册流程 切换中文 ​ 邀请码&#xff1a; XcgtUixn 创建API密钥 账户管理 --&g…

Java 大数据与区块链的融合:数据可信共享与溯源(45)

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

初阶c语言(循环语句习题,完结)

前言&#xff1a; c语言为b站鹏哥&#xff0c;嗯对应视频37集 昨天做的c语言&#xff0c;今天在来做一遍&#xff0c;发现做错了 今天改了平均值的计算&#xff0c; 就是说最大值加上最小值&#xff0c;如果说这个数值非常大的话&#xff0c;两个值加上会超过int类型的最大…

传感器篇(一)——深度相机

目录 一 概要 二 原理 三 对比 四 产品 五 结论 一 概要 深度相机是一种能够获取物体深度信息的设备&#xff0c;相较于普通相机只能记录物体的二维图像信息&#xff0c;深度相机可以感知物体与相机之间的距离&#xff0c;从而提供三维空间信息。在你正在阅读的报告中提到…

蓝桥杯之并查集

算法思想 并查集是一种树形的数据结构&#xff0c;主要用于解决一些元素分组问题。用于处理一些不相交集合的合并以及查询问题。并查集的思想是用一个数组表示了整片森林&#xff0c;树的根节点唯一标识了一个集合&#xff0c;我们只要找到了某个元素的树根&#xff0c;就能确…

Windows11+PyCharm利用MMSegmentation训练自己的数据集保姆级教程

系统版本&#xff1a;Windows 11 依赖环境&#xff1a;Anaconda3 运行软件&#xff1a;PyCharm 一.环境配置 通过Anaconda Prompt(anaconda)打开终端创建一个虚拟环境 conda create --name mmseg python3.93.激活虚拟环境 conda activate mmseg 4.安装pytorch和cuda tor…

#渗透测试#批量漏洞挖掘#Crocus系统—Download 文件读取

免责声明 本教程仅为合法的教学目的而准备&#xff0c;严禁用于任何形式的违法犯罪活动及其他商业行为&#xff0c;在使用本教程前&#xff0c;您应确保该行为符合当地的法律法规&#xff0c;继续阅读即表示您需自行承担所有操作的后果&#xff0c;如有异议&#xff0c;请立即停…

day09_实时类标签/指标

文章目录 day09_实时类标签/指标一、日志数据实时采集2、Flume简介2.3 项目日志数据采集Flume配置2.3.1 涉及的Flume组件和参数2.3.2 Nginx日志采集2.3.3 用户行为日志采集 二、Nginx日志数据统计1、日志格式说明2、数据ETL2.1 日志抽取2.1.1 正则表达式2.1.2 基于Spark实现Ngi…

SpringBoot实战:高效获取视频资源

文章目录 前言技术实现SpringBoot项目构建产品选取配置数据采集 号外号外 前言 在短视频行业高速发展的背景下&#xff0c;海量内容数据日益增长&#xff0c;每天都有新的视频、评论、点赞、分享等数据涌现。如何高效、精准地获取并处理这些庞大的数据&#xff0c;已成为各大平…

位图,晶圆MAP 边缘算法

例如这样的一张图: 如果想要求外边缘点&#xff0c;即红色区域,首先遍历所有点位&#xff0c;求出每行每列X轴和Y轴的最大值MAX和最小值MIN。然后再次遍历每个点&#xff0c;判断该点的X值&#xff0c;Y值是否是最大值或者最小值&#xff0c;如果是&#xff0c;那么它就是外边…