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...

相关推荐
用户03284722207014 小时前
如何搭建本地yum源(上)
运维
武子康15 小时前
调查研究-183 Apple container:Mac 上用轻量 VM 跑 Linux 容器,Swift 会改写本地容器体验吗?
docker·容器·apple
大树884 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠4 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质4 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
Inhand陈工4 天前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
Alsn864 天前
等待学习-学习目录:Docker 容器安全攻防
学习·安全·docker
酣大智4 天前
ARP代理--工作原理
运维·网络·arp·arp代理
shushangyun_4 天前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化
施努卡机器视觉4 天前
SNK施努卡侧滑门锁上滑轮总成自动化装配线,从零件到组件,全流程精密制造方案
运维·自动化·制造