Docker 应用实践-容器篇

news2024/11/17 1:59:04

在 Docker 镜像篇中,我们了解到 Docker 镜像类似于模板,那么 Docker 容器就相当于从模板复制过来运行时的实例,Docker 容器可以被创建、复制、暂停和删除等。

每一个 Docker 容器在运行时都是以镜像为基础层,并在镜像的基础上创建当前容器的存储层,容器存储层的生存周期与容器是一致的,因此当某一个容器删除后,该容器存储层的数据也会随之被删除掉。

按照 Docker 最佳实践的要求,Docker 容器是不应该向其存储层内写入数据的,Docker 容器存储层需保持无状态话。Docker 容器中的所有文件写入操作都应该使用数据卷或绑定到宿主机目录上,在这些位置的读写操作会跳过容器存储层,性能和稳定性也会更高

本篇内容主要介绍:关于 Docker 容器、Docker 命令应用实践


文章目录

    • 一、关于 Docker 容器
        • 1、对于 Docker 容器的理解
        • 2、虚拟机与容器
        • 3、容器生命周期
    • 二、Docker 命令应用实践
        • 1、容器查看
        • 2、容器创建 – docker create
        • 3、容器启动 – docker start
        • 4、容器创建并启动 – docker run
        • 5、docker run 与 docker create + docker start
        • 6、容器暂停 – docker pause
        • 7、容器取消暂停 – docker unpause
        • 8、容器关闭 – docker stop
        • 9、容器终止 – docker kill
        • 10、docker stop和docker kill的区别
        • 11、容器重启 – docker restart
        • 12、容器删除 – docker container rm


一、关于 Docker 容器

1、对于 Docker 容器的理解

在 Docker 镜像篇中,我们了解到 Docker 镜像类似于模板,那么 Docker 容器就相当于从模板复制过来运行时的实例,Docker 容器可以被创建、复制、暂停和删除等。

每一个 Docker 容器在运行时都是以镜像为基础层,并在镜像的基础上创建当前容器的存储层,容器存储层的生存周期与容器是一致的,因此当某一个容器删除后,该容器存储层的数据也会随之被删除掉。

按照 Docker 最佳实践的要求,Docker 容器是不应该向其存储层内写入数据的,Docker 容器存储层需保持无状态话。Docker 容器中的所有文件写入操作都应该使用数据卷或绑定到宿主机目录上,在这些位置的读写操作会跳过容器存储层,性能和稳定性也会更高

2、虚拟机与容器

虚拟机(VM)是物理硬件的抽象,它将一台服务器变成很多服务器。 虚拟机管理程序允许多个 VM 在单台计算机上运行。 每个 VM 均包含操作系统,应用程序以及必要的二进制文件和库的完整副本-占用数十 GB。 VM也 可能启动缓慢。

容器是应用程序层的抽象,将代码和依赖项打包在一起。 多个容器可以在同一台计算机上运行,并与其他容器共享其 OS 内核,每个容器在用户空间中作为隔离的进程运行。 容器占用的空间少于VM(容器映像的大小通常为几十 MB),可以处理更多的应用程序,并且需要的 VM 和操作系统更少。

虚拟化 vs 容器化:

  • 速度:说到速度,容器是明显的赢家。它们被设计用来大大减少软件应用程序的加载和运行时间。由于操作系统已经启动和运行,应用程序的启动将没有明显的延迟。这种没有延迟的情况对于软件开发团队来说是一个很好的解决方案,因为它将在应用测试周期中节省时间。相反,虚拟机需要充足的时间来完成整个操作系统的启动过程,导致虚拟机的启动时间要比容器长得多。
  • 资源:由于虚拟服务器运行独立的操作系统,每一个系统调用都要经过虚拟化层,所以它们往往是资源密集型的。这对于内存来说尤其如此,因为即使不处理用户请求,虚拟机也会消耗内存。由于CPU虚拟化的成本相对较低,所以虚拟机的处理器成本往往较低。当涉及到容器时,它们会快速启动,与虚拟机相比,它们的内存消耗保持在较低水平。容器也减少了开销,因为它们可以不使用管理程序而运作。
  • 安全性和隔离性:虚拟化在安全和隔离方面获胜。就其本质而言,虚拟机保持独立和相互隔离。一个被感染的虚拟机不会影响另一个,而且每个虚拟机都可以实现自己的安全协议。由于容器只在进程层面隔离数据和应用程序,它们提供的安全环境较差,并依赖于主机系统的安全协议。
  • 可移植性和应用程序共享:由于容器镜像比虚拟机小得多,它们更容易转移,并节省主机文件系统的空间。另一方面,虚拟机需要复制整个操作系统、主机内核、系统库、配置文件和任何必要的文件目录。这大大增加了映像的大小,使虚拟机在共享或转移时面临挑战。容器图像可以通过几种方式共享,互联网上有各种应用共享中心。虚拟机图像不能利用这些集中的中心。转移它们需要把它们上传到另一台服务器上。
  • 操作系统要求:当一个企业运行多个需要专用操作系统的应用程序时,虚拟机是最好的。但是,如果大多数应用程序有相同的操作系统要求,容器化将是一个更实用的解决方案。
  • 应用程序的生命周期:容器对于短期的应用需求很有效。它们可以快速设置,可移植,而且启动时间比虚拟机快得多。它们的局限性来自于缺乏一个专门的操作系统、处理和存储资源。当你的主要目标是优化你的服务器资源的效率时,使用容器。但是,如果你计划运行需要长时间运行的应用程序,虚拟机是一个更好的选择。虚拟机更适合处理延长的运行时间,因为它们在虚拟化环境中运行,更加强大和通用。

3、容器生命周期

对于一个 Docker 容器可以具有以下状态:

img

  • created:初建状态
  • running:运行状态
  • exited:停止状态
  • paused: 暂停状态
  • deleted:删除状态

二、Docker 命令应用实践

1、容器查看

# 查看机器上正在运行的所有容器
docker ps

# 查看宿主机上所有的容器(包括停止的)
docker ps -a

# 查看最后一次运行的容器
docker ps –l

# 查看停止的容器
docker ps -f status=exited

2、容器创建 – docker create

# 作用:
	利用镜像创建出一个Created 状态的待启动容器
    
# 命令格式:
	docker create [OPTIONS] IMAGE [COMMAND] [ARG...]
    
# 命令参数(OPTIONS):查看更多
	-t, --tty           		分配一个伪TTY,也就是分配虚拟终端bash
    -i, --interactive    	    以交互模式运行容器,加入-t-i这两个参数,容器启动后会直接进入容器。分配一个伪终端
    --name          		    为容器起名,如果没有指定将会随机产生一个名称
    
# 命令参数(COMMAND\ARG):
	COMMAND 表示容器启动后,需要在容器中执行的命令,如ps、ls 等命令
	ARG 表示执行 COMMAND 时需要提供的一些参数,如ps 命令的 aux、ls命令的-a等等
    
# 命令演示:
# ps -A 提前预设一个命令,容器一启动就会执行
# 当容器启动-->执行ps -A,命令一执行完,容器就停止了,因为它不是可以夯住的命令
docker create --name test-container centos ps -A
docker create -ti --name test-container2 centos /bin/bash


# 我们拉的centous镜像是纯净版,里面没有sshd服务端,如果启了一个centos7的容器,宿主机不能直接用ssh连接容器(进到容器做交互)
# 要么装一个sshd服务端,要么下载第三方集成了sshd服务端的镜像。
# 这里用的-t,并不是真正的进到容器,只是分配一个伪终端,相当于启一个bash窗口,和宿主机做交互

3、容器启动 – docker start

# 作用:
	将一个或多个处于创建状态或关闭状态的容器启动起来
    
# 命令格式:
	docker start [OPTIONS] CONTAINER [CONTAINER...]
    
# 命令参数(OPTIONS):
	-a, --attach		将当前shell的 STDOUT/STDERR 连接到容器上
	-i, --interactive	将当前shell的 STDIN连接到容器上	
    
# 命令演示:
docker ps -a
docker start -a 65ebc
docker start test-container2

4、容器创建并启动 – docker run

# 作用:
	利用镜像创建并启动一个容器
    
# 命令格式:
	docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
    
# 命令参数(OPTIONS):查看更多
	-t, --tty           分配一个伪TTY,也就是分配虚拟终端,表示容器启动后会进入其命令行
    -i, --interactive   以交互模式运行容器,加入-t-i这两个参数,容器启动后会直接进入容器。分配一个伪终端
        --name          为容器起名,如果没有指定将会随机产生一个名称
	-d, --detach		创建一个守护进程在后台运行容器并打印出容器ID,不会自动登录容器,如果只加-i -t两个参数,创建后就会自动进入容器
	--rm			    当容器退出运行后,自动删除容器
    
# 命令参数(COMMAND\ARG):
	COMMAND 表示容器启动后,需要在容器中执行的命令,如ps、ls 等命令
	ARG 表示执行 COMMAND 时需要提供的一些参数,如ps 命令的 aux、ls命令的-a等等
    
# 命令演示:
# 注意,docker run 镜像, 如果本地没有该镜像,会先pull最新版镜像,再执行docker run
docker run --name test1 centos:centos7                # 创建并启动test1,启动后容器就停止了
docker run --name test2 centos:centos7 /bin/bash      # 创建并启动test2,启动后容器就停止了
docker run -ti --name test3 centos:centos7            # 创建并启动test3,启动后运行/bin/bash交互(根路径下),exit退出后,容器就停止了 
docker run -ti --name test4 centos:centos7 /bin/bash  # 创建并启动test4,启动后运行/bin/bash交互(根路径下),exit退出后,容器就停止了 
docker run -ti --name test5 redis            # 创建并启动test5,启动后进入到redis前端,exit退出后,容器就停止了 
docker run -ti --name test6 redis /bin/bash  # 创建并启动test6,启动后运行/bin/bash交互(/data路径下),exit退出后,容器就停止了

docker run -d --name t1 centos:centos7    # 创建并启动t1,启动后容器就停止了
docker run -di --name t2 centos:centos7  # 创建并启动t2,启动后容器维持后台运行
docker run -d --name t3 redis             # 创建并启动t3,启动后容器维持后台运行
docker run -dti --name t4 redis           # 创建并启动t4,启动后容器维持后台运行

5、docker run 与 docker create + docker start

docker run    相当于 docker create + docker start –a      前台模式
docker run -d 相当于 docker create + docker start          后台模式

6、容器暂停 – docker pause

# 作用:
	暂停一个或多个处于运行状态的容器
    
# 命令格式:
	docker pause CONTAINER [CONTAINER...]
    
# 命令参数(OPTIONS):
	无
    
# 命令演示
docker ps -a
docker pause test-container2
docker ps -a # 容器是Pause状态

7、容器取消暂停 – docker unpause

# 作用:
	取消一个或多个处于暂停状态的容器,恢复运行
    
# 命令格式:
	docker unpause CONTAINER [CONTAINER...]
    
# 命令参数(OPTIONS):
	无	
    
# 命令演示:
docker unpause test-container2
docker ps -a # 处于运行状态

8、容器关闭 – docker stop

# 作用:
	关闭一个或多个处于暂停状态或者运行状态的容器
    
# 命令格式:
	docker stop [OPTIONS] CONTAINER [CONTAINER...]
    
# 命令参数(OPTIONS):
	-t, --time int   关闭前,等待的时间,单位秒(默认 10s)	
    
# 命令演示:
docker stop -t 1 容器id

9、容器终止 – docker kill

# 作用:
	强制并立即关闭一个或多个处于暂停状态或者运行状态的容器
    
# 命令格式:
	docker kill [OPTIONS] CONTAINER [CONTAINER...]
    
# 命令参数(OPTIONS):
	-s, --signal string   	指定发送给容器的关闭信号 (默认“KILL”信号)	
    
# 命令演示:
docker kill test-container2

10、docker stop和docker kill的区别

# 一 前提知识点:
    1 Linux其中两种终止进程的信号是:SIGTERM和SIGKILL
    2 SIGKILL信号:无条件终止进程信号。
    进程接收到该信号会立即终止,不进行清理和暂存工作。
    该信号不能被忽略、处理和阻塞,它向系统管理员提供了可以杀死任何进程的方法。
    3  SIGTERM信号:程序终结信号,可以由kill命令产生。
    与SIGKILL不同的是,SIGTERM信号可以被阻塞和终止,以便程序在退出前可以保存工作或清理临时文件等。

# 二 docker stop 会先发出SIGTERM信号给进程,告诉进程即将会被关闭。在-t指定的等待时间过了之后,将会立即发出SIGKILL信号,直接关闭容器。
# 三 docker kill 直接发出SIGKILL信号关闭容器。但也可以通过-s参数修改发出的信号。

# 四 因此会发现在docker stop的等过过程中,如果终止docker stop的执行,容器最终没有被关闭。而docker kill几乎是立刻发生,无法撤销。

# 五 此外还有些异常原因也会导致容器被关闭,比如docker daemon重启、容器内部进程运行发生错误等等“异常原因”。

11、容器重启 – docker restart

# 作用:
	重启一个或多个处于运行状态、暂停状态、关闭状态或者新建状态的容器
	该命令相当于stop和start命令的结合
    
# 命令格式:
	docker restart [OPTIONS] CONTAINER [CONTAINER...]
    
# 命令参数(OPTIONS):
	 -t, --time int   	重启前,等待的时间,单位秒(默认 10s) 
				        实则是关闭前等待的时间

12、容器删除 – docker container rm

# 作用:
	删除一个或多个容器
    
# 命令格式:
	docker container rm [OPTIONS] CONTAINER [CONTAINER...]
      或者 docker rm [OPTIONS] CONTAINER [CONTAINER...]
        
# 命令参数(OPTIONS):
	 -f, --force     		强行删除容器(会使用 SIGKILL信号) 
	 -v, --volumes   		同时删除绑定在容器上的数据卷	
        
# 命令演示
docker rm -f 容器id 容器名
docker rm 8379 7380 1023      # 可以放多个id,批量删除
docker rm `docker ps -a -q`   # 删除所有容器

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

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

相关文章

PWM 应用

1.PWM 同样也是通过 sysfs 方式进行操控,进入到/sys/class/pwm 目录下。8 个以 pwmchipX(X 表示数字 0~7)命名的文件夹,这八个文件夹其实就对应了 I.MX6U的 8 个 PWM 控制器, I.MX6U 总共有 8 个 PWM 控制器。2.进入到…

云GPU服务器部署及pycharm远程连接

我们在之前使用CoLab来运行项目,但其存在时长限制问题所以并不是很理想,今天博主发现腾讯云服务目前在搞活动,比较实惠,便买了一台来体验一下。 直接搜索gpu服务器租用即可找到 购买服务器 博主买的是NVIDIA T4 GPU,还是较有性…

web流程设计器andflow_js已支持自定义颜色

andflow_js 是一个web 开源流程设计框架,目前版本已支持对各类节点单独设置颜色。除了颜色之外,andflow_js还支持通过setActionInfo、setGroupInfo、setListInfo、setTipInfo 等设置节点各种参数。 设置节点的颜色: 设置节点边框颜色 and…

Arduino环境下对NodeMCU ESP8266的闪存flash系统使用

flash存储简答介绍 参考:https://www.elecfans.com/consume/572040.html flash存储器又称闪存(快闪存储器),就其本质而言,flash存储器属于EEPROM(电擦除可编程只读存储器)类型。是一种长寿命的…

矩阵求导学习

布局 分子布局 ∂y∂x(∂y∂x1∂y∂x2⋯∂y∂xn)\frac{\partial y}{\partial \mathbf{x}} \begin{pmatrix} \frac{\partial y}{\partial x_1} & \frac{\partial y}{\partial x_2} &\cdots & \frac{\partial y}{\partial x_n} \end{pmatrix} ∂x∂y​(∂x1​∂y​​…

tkinter绘制组件(38)——状态开关按钮

tkinter绘制组件(38)——状态开关按钮引言布局函数结构按钮主体渐变色处理颜色处理基础渐变色列表形成列表样式绑定完整函数代码效果测试代码最终效果github项目pip下载结语引言 TinUI里的状态开关按钮(togglebutton)和开关&…

DPU网络开发SDK—DPDK(五)

rte_eal_init 接上次内容继续对rte_eal_init()所做的工作进行分析。 18. 检查是否允许直接物理地址访问 rte_eal_using_phys_addrs()会去检查当前系统是否允许在进程虚拟地址空间直接访问物理地址。需要有两个支持条件:存在大页内存和能够进行虚拟地址到物理地址…

智云通CRM:如何把握拓客成交的三种时间?

在我们邀约、拜访及展示产品之后,客户就一定会成为你的客户吗?当然不尽然,这取决于众多因素。任何事情都不是一蹴而就的,我们不能刚到某个场合认识了一个人,就一定要立即成交,或者反过来因为对方此时没有需…

Pytorch实战笔记(2)——CNN实现情感分析

本文展示的是使用 Pytorch 构建一个 TextCNN 来实现情感分析。本文的架构是第一章详细介绍 TextCNN(不带公式版),第二章是核心代码部分。 目录1. TextCNN2. TextCNN 实现情感分析参考1. TextCNN 相较于 LSTM 而言,我个人其实是没…

手把手教你学51单片机-C语言基础

二进制、十进制和十六进制 对于二进制来说,8 位二进制我们称之为一个字节。 我们在进行 C 语言编程的时候,我们只写十进制和十六进制,那么不带 0x 的就 是十进制,带了 0x 符号的就是十六进制。 C 语言变量类型和范围 C 语言的数据基本类型分为字符型、整型、长整型以及…

【算法题解】12. 删除链表中的节点

文章目录题目题解Java 代码实现Go 代码实现复杂度分析这是一道简单题,题目来自 leetcode 题目 给定一个单链表的 head,我们想删除它其中的一个节点 node。 只给你一个需要删除的节点 node 。你将 无法访问 第一个节点 head。 链表的所有值都是 唯一的&…

1.吴恩达机器学习课程笔记:多元梯度下降法

1.吴恩达机器学习课程笔记:多元梯度下降法 笔记来源:吴恩达机器学习课程笔记:多元梯度下降法 仅作为个人学习笔记,若各位大佬发现错误请指正 1.1 多元特征(变量) 每一列代表一个特征,例如&…

FMC子卡设计资料原理图:FMC550-基于ADRV9002双窄带宽带射频收发器FMC子卡

FMC550-基于ADRV9002双窄带宽带射频收发器FMC子卡一、产品概述 ADRV9002 是一款高性能、高线性度、高动态范围收发器,旨在针对性能与功耗系统进行优化。该设备是可配置的,非常适合要求苛刻、低功耗、便携式和电池供电的设备。ADRV9002 的工作频率为 …

计算机基础——无处不网络(2)

作者简介:一名云计算网络运维人员、每天分享网络与运维的技术与干货。 座右铭:低头赶路,敬事如仪 个人主页:网络豆的主页​​​​​​ 目录 前言 一.计算机网络的接入方式 1

青龙脚本-稳定阅读

稳定阅读积分 查看请求头的cookie 变量 export zzbhd 多号或换行 */ 脚本附后 /* 查看请求头的cookie 变量 export zzbhd 多号或换行*/const $ new Env(至尊宝阅读); const axios require(axios); let request require("request"); request request.defaults(…

纯手工模拟Vue中的数据劫持和代理

为什么要实现数据劫持和代理 举一个场景:比如在小程序开发中,我们需要逻辑层修改的数据能同步响应更新到视图层的页面上,那么底层框架在实现这种效果的时候,机制是什么样的呢? 其实这里的底层原理类似于Vue中的数据劫…

基于蜣螂算法优化的BP神经网络(预测应用) - 附代码

基于蜣螂算法优化的BP神经网络(预测应用) - 附代码 文章目录基于蜣螂算法优化的BP神经网络(预测应用) - 附代码1.数据介绍3.蜣螂优化BP神经网络3.1 BP神经网络参数设置3.2 蜣螂算法应用4.测试结果:5.Matlab代码摘要&am…

ClickHouse快速复习

ClickHouse​一.特性​1.列式数据库管理系统​2.数据压缩​3.数据的磁盘存储​4.支持SQL​5.索引​6.适合在线查询​7.支持数据复制和数据完整性​8.实时的数据更新​9.处理大量短查询的吞吐量​10.处理大量短查询的吞吐量​11.限制​二.数据类型​1.数字类型​2.浮点数(float)…

前端都在聊什么 - 第 1 期

Hello 小伙伴们早上、中午、下午、晚上、深夜好,我是爱折腾的 jsliang~「前端都在聊什么」是 jsliang 日常写文章/做视频/搞直播过程中,小伙伴们的提问以及我的解疑整理。本期对应 2023 年的 01.01-01.15 这个时间段。本期针对「工作」「学习」「规划」「…

迭代器、可迭代对象、生成器的区别和联系

目录1 迭代器2 可迭代对象3 生成器1 迭代器 迭代器是一种可以更新迭代的工具,迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。但是他不能像列表一样使用下标来获取数据,也就是说迭代器是不能返回的。迭代器只能往前不会…