Docker核心技术

Docker核心技术容器

容器(Container):容器是一种轻量级、可移植、并将应用程序进行的打包的技术,使应用程序可以在几乎任何地方以相同的方式运行。

  • Docker将镜像文件运行起来后,产生的对象就是容器。
  • 容器具备一定的生命周期。

容器与虚拟机

  • 容器和虚拟机一样,都会对物理硬件资源进行共享使用。
  • 容器和虚拟机的生命周期比较相似(创建、运行、暂停、关闭等等)。
  • 容器中或虚拟机中都可以安装各种应用如redis、mysql等。

Docker容器与虚拟机不同点:

  • 虚拟机的创建、启动和关闭都是基于一个完整的操作系统。一个虚拟机就是一个完整的操作系统。而容器直接运行在宿主机的内核上,其本质上以一系列进程的结合。
  • 容器是轻量级的,虚拟机是重量级的。

容器的生命周期

容器的生命周期包括创建、运行、暂停、停止和删除等阶段

首先,在创建阶段,Docker引擎会读取Dockerfile中的指令构建镜像,然后使用该镜像创建一个新的容器,并在主机文件系统中生成一个独特的文件系统层。

接着,在运行阶段,容器中的应用开始执行,处理请求并与Docker引擎进行交互。此阶段中,可以进行网络设置和端口映射,确保容器可以与外界通信。

此外,在暂停阶段 ,容器内的所有进程都将被暂停,但可以在之后继续运行。而在停止阶段 ,容器将不再接受新的请求,并且其资源及状态可以被保留以便未来重启。最后,在删除阶段,将移除容器及其所有相关数据,包括主机文件系统中的文件系统层。

容器创建 -- docker create

利用镜像创建出一个Created 状态的待启动容器:docker create OPTIONS IMAGE COMMAND ARG...

-t, --tty 分配一个伪TTY,也就是分配虚拟终端

-i, --interactive 即使没有连接,也要保持STDIN打开

--name 为容器起名,如果没有指定将会随机产生一个名称

容器启动 -- docker start

将一个或多个处于创建状态或关闭状态的容器启动起来:docker start OPTIONS CONTAINER CONTAINER...

-a, --attach 将当前shell的 STDOUT/STDERR 连接到容器上

-i, --interactive 将当前shell的 STDIN连接到容器上

容器创建并启动 -- docker run

利用镜像创建并启动一个容器,docker run OPTIONS IMAGE COMMAND ARG...

-t, --tty 分配一个伪TTY,也就是分配虚拟终端

-i, --interactive 即使没有连接,也要保持STDIN打开

-d, --detach 在后台运行容器并打印出容器ID

--rm 当容器退出运行后,自动删除容器

容器暂停 -- docker pause

暂停一个或多个处于运行状态的容器 :docker pause CONTAINER CONTAINER...

容器取消暂停 -- docker unpause

docker unpause CONTAINER CONTAINER...

容器关闭 -- docker stop

关闭一个或多个处于暂停状态或者运行状态的容器

docker stop OPTIONS CONTAINER CONTAINER...

-t, --time int 关闭前,等待的时间,单位秒

容器终止 -- docker kill

强制并立即关闭一个或多个处于暂停状态或者运行状态的容器

docker kill OPTIONS CONTAINER CONTAINER...

-s, --signal string 指定发送给容器的关闭信号

docker stop和docker kill的区别:

  • Docker stop:该命令首先向容器发送SIGTERM信号,允许容器内的进程捕获此信号并执行一系列结束前的清理工作,如保存当前状态、完成正在处理的请求或释放占用的资源。如果在默认的宽限期(通常为10秒)内,容器内的主进程没有响应SIGTERM信号并优雅地停止,Docker将随后发送SIGKILL信号,以确保容器被终止。
  • Docker kill:该命令直接向容器发送SIGKILL信号,这是一个不能被捕获或忽略的信号,会立即终止容器中的所有进程。这种停止方式不允许进行任何清理或保存状态的操作,因此被认为是一种"硬"终止方式。

容器信息查看

容器详细信息 -- docker container inspect

docker container inspect OPTIONS CONTAINER CONTAINER...

-f, --format string 利用特定Go语言的format格式输出结果

-s, --size 显示总大小

容器日志信息 -- docker logs

docker logs OPTIONS CONTAINER

容器连接 -- docker attach

将当前终端的STDIN、STDOUT、STDERR绑定到正在运行的容器的主进程上实现连接

docker attach OPTIONS CONTAINER

Docker容器与镜像的关系

网络管理

容器的网络默认与宿主机、与其他容器都是相互隔离。

容器中可以运行一些网络应用(如nginx、web应用、数据库等),如果要让外部也可以访问这些容器内运行的网络应用,那么就需要配置网络来实现。 有可能有的需求下,容器不想让它的网络与宿主机、与其他容器隔离。或者容器根本不需要网络。

Docker有五种网络驱动模式:

  • bridge network 模式(网桥):默认的网络模式。类似虚拟机的nat模式
  • host network 模式(主机):容器与宿主机之间的网络无隔离
  • None network 模式:容器禁用所有网络。
  • Overlay network 模式(覆盖网络): 利用VXLAN实现的bridge模式
  • Macvlan network 模式:容器具备Mac地址,使其显示为网络上的物理设备

网络管理命令

查看网络 -- docker network ls

docker network ls OPTIONS

创建网络 -- docker network create

docker network create OPTIONS NETWORK

-d, --driver string 指定网络的驱动(默认 "bridge")

网络删除 -- docker network rm

docker network rm NETWORK NETWORK...

查看网络信息:

docker network inspect OPTIONS NETWORK NETWORK...

相关推荐
人还是要有梦想的25 分钟前
linux下用搜狗输入法,中英文切换
linux·运维·服务器
北京智和信通33 分钟前
某部队IT基础设施及机房动环统一运维建设实例
运维·网管平台·网管软件·网络管理系统·网络运维平台·网络运维系统
乐维_lwops42 分钟前
从 “救火运维” 到 “自动驾驶”:运维智能体到底解决了什么?
运维·人工智能·运维智能体
bush41 小时前
嵌入式linux学习记录二
linux·运维·学习
weixin_468466851 小时前
MoneyPrinterTurbo 短视频自动化生产实战指南
运维·人工智能·自动化·大模型·音视频·moneyprinter
難釋懷2 小时前
Nginx自签名-图形化工具 XCA
运维·nginx
志栋智能3 小时前
小步快跑:从单一场景开启超自动化巡检之旅
运维·网络·人工智能·自动化
AugustRed4 小时前
Linux 运维常用命令大全(超全速查表)
运维·网络·php
qq_452396234 小时前
第十篇:《Dockerfile 最佳实践与镜像瘦身》
docker
Plastic garden4 小时前
Docker(1)
运维·docker·容器