目录
[1.1、Docker 容器的核心定义与本质](#1.1、Docker 容器的核心定义与本质)
[2.2 启动容器(docker start)](#2.2 启动容器(docker start))
[启动交互式容器(如 CentOS)](#启动交互式容器(如 CentOS))
[2.5 停止容器](#2.5 停止容器)
[4.1、docker exec命令的核心解析](#4.1、docker exec命令的核心解析)
[4.2 容器文件的导出与导入](#4.2 容器文件的导出与导入)
[五,Docker 的网络模式](#五,Docker 的网络模式)
[5.1、Bridge 模式(默认桥接模式)](#5.1、Bridge 模式(默认桥接模式))
[5.2、Host 模式(共享宿主机网络)](#5.2、Host 模式(共享宿主机网络))
[5.3、None 模式(无网络)](#5.3、None 模式(无网络))
[5.4、Container 模式(共享其他容器网络)](#5.4、Container 模式(共享其他容器网络))
一,什么是docker的容器
Docker 容器是 Docker 技术的核心运行时组件,是基于 Docker 镜像创建的可运行、隔离的应用执行环境,也是镜像的动态实例化载体,其设计核心是实现应用及其依赖的封装与隔离运行,以下从核心属性、本质特征、生命周期、隔离原理、与虚拟化的差异等维度展开讲解:
1.1、Docker 容器的核心定义与本质
- 镜像与容器的关系:镜像是静态的只读模板,包含应用运行所需的代码、依赖、配置等;容器是镜像的动态运行实例,在镜像的基础上添加了可写层,是实际承载应用运行的实体。
- 运行时本质 :容器并非独立的操作系统,而是依托宿主机内核运行的进程组,通过技术手段实现了与宿主机及其他容器的隔离,使其拥有独立的运行环境视图。
二,容器的操作
2.1创建容器
建和启动 Docker 容器主要有两种核心方式 :一种是先创建容器(docker create)再手动启动(docker start) ,另一种是一步完成创建 + 启动(docker run)(最常用)。以下从命令语法、核心参数、实操步骤和注意事项展开讲解,覆盖基础到常用配置。
docker create [可选参数] 镜像名[:标签] [容器内执行的命令]

核心参数:
| 参数 | 作用 |
|---|---|
--name |
为容器指定自定义名称(避免系统自动生成随机名,方便管理) |
-p |
端口映射,格式宿主机端口:容器端口(如8080:80) |
-it |
分配伪终端并开启交互模式(适用于需要终端操作的容器,如 CentOS、Ubuntu) |
2.2 启动容器(docker start)
docker start [可选参数] 容器ID/容器名称
# 通过容器ID启动(替换为实际的容器ID)
docker start 17dd0f74be94
启动交互式容器(如 CentOS)
CentOS 容器启动后立即退出 的问题,需用-itd组合参数:
# 后台交互运行CentOS,指定容器名,启动bash进程
docker run -itd --name my-centos centos:7 /bin/bash
验证 :通过docker exec -it my-centos /bin/bash可进入容器终端,容器不会退出。
2.3、关键注意事项
- 容器名称唯一性 :
--name指定的名称不能重复,否则会报错Conflict. The container name "/xxx" is already in use,需删除原有容器或更换名称。 - 端口冲突 :
-p映射的宿主机端口若已被占用,会启动失败,需更换端口(如8081:80)或释放占用端口。 - 容器主进程 :容器的生命周期与主进程绑定,若主进程退出(如交互式容器未加
-d且终端关闭),容器会进入Exited状态。 - 镜像拉取 :若本地没有指定的镜像,
docker create/docker run会自动从 Docker Hub 拉取镜像(需网络畅通)。
2.4、验证容器状态
# 查看运行中的容器
docker ps
# 查看所有容器(包括已创建、已停止的)
docker ps -a
# 查看容器启动日志(排查启动失败问题)
docker logs 容器ID/容器名称

2.5 停止容器
docker stop 【id】
三,容器的状态
Docker 容器全生命周期的状态体系及状态转换逻辑,明确了各状态的定义、触发转换的命令,是容器运维的核心流程参考。
3.1、容器核心状态及含义
图中涵盖 Docker 容器的 5 类核心状态:
- created(已创建):基于镜像完成容器配置(如网络、存储),但主进程未启动,处于待运行状态。
- 运行中:容器主进程正常执行,应用在容器内提供服务,是容器的核心工作状态。
- paused(暂停):容器内所有进程被冻结,资源占用保持当前状态,可快速恢复运行。
- stopped(停止):容器主进程被主动终止,容器停止运行但配置、数据仍保留在宿主机中。
- dead(异常终止):容器因故障(如进程崩溃、资源耗尽)异常停止,无法直接恢复运行。
3.2、状态转换流程及对应命令
各状态间的转换需通过特定 Docker 命令触发,具体流转关系:
- 镜像到容器的初始化 :
- 执行
docker pull获取镜像后,通过docker create创建容器,进入created状态; - 直接执行
docker run(等价于docker create + docker start),跳过created状态,直接进入 "运行中" 状态。
- 执行
- created → 运行中 :执行
docker start,启动容器主进程。 - 运行中 → 其他状态 :
- 执行
docker stop:容器主进程终止,进入stopped状态; - 执行
docker pause:容器进程冻结,进入paused状态; - 进程异常崩溃:进入
dead状态。
- 执行
- paused → 运行中 :执行
docker unpause,恢复容器进程的执行。 - stopped → 其他状态 :
- 执行
docker start:重新启动主进程,回到 "运行中" 状态; - 执行
docker rm:删除容器(仅stopped状态支持此操作)。
- 执行
3.3、操作注意事项
- dead 状态处理 :处于
dead状态的容器无法通过docker start恢复,需先执行docker rm删除,再重新创建容器。 - 容器删除约束 :仅
stopped状态的容器可被删除,运行中 / 暂停的容器需先执行docker stop(或docker unpause + docker stop),避免资源泄漏。 - pause 的适用场景 :
pause仅冻结进程、不释放资源,适用于临时暂停容器操作(如调试),长期停止容器建议用docker stop(释放部分资源)。
四,容器交互
4.1、docker exec命令的核心解析
该命令用于进入运行中的容器执行命令,是容器调试的核心工具,关键信息如下:
- 作用 :在运行的容器内启动独立进程(如交互式 shell),不会影响容器主进程(区别于
docker attach,后者直接连接主进程的输入输出)。 - 参数含义 :
-i:保持容器标准输入流打开,确保交互输入有效;-t:为容器分配伪终端,使交互体验与本地终端一致。
- 操作逻辑 :
- 需先通过
docker start确保容器处于运行状态; - 执行
exit退出容器后,容器仍保持运行(因exec启动的是独立进程,不关联主进程生命周期); - 若用
docker run -it 镜像 bash且不加-d,退出容器会导致容器停止(此时容器主进程是 bash,主进程终止则容器退出)。
- 需先通过

4.2 容器文件的导出与导入
导入。

导出

执行docker cp命令,把容器内/opt/test.txt复制到宿主机主目录,并重命名为abc123.txt:
docker cp 2592d3fad0fb:/opt/test.txt ~/abc123.txt

容器的导出与导入
导出格式: docker export 容器 ID/ 名称 > 文件名
docker export 2592d3fad0fb > centos7.tar
导入格式: cat 文件名 | docker import -- 镜像名称 : 标签
cat centos7.tar | docker import - centos7:test #导入后会生成镜像,但不会创建容器
删除容器
格式: docker rm [-f] 容器 ID/ 名称
docker rm $(docker ps -a -q) # 批量清理后台停止的容器
五,Docker****的网络模式
5.1、Bridge 模式(默认桥接模式)
Docker 自动创建虚拟网桥 docker0(默认 IP 段172.17.0.0/16),每个容器会分配独立的私有 IP(如172.17.0.2),并通过虚拟网卡连接到docker0;容器与外部网络通信依赖宿主机的 NAT 转发,容器之间可通过IP / 容器名互通(Docker 内置 DNS 解析容器名)。
-
启动容器(默认启用 Bridge):
# 启动两个Nginx容器(默认Bridge模式) docker run -d --name nginx1 nginx docker run -d --name nginx2 nginx -
验证网络:
-
查看容器 IP:
docker inspect -f '{{.NetworkSettings.IPAddress}}' nginx1 # 输出如172.17.0.2 docker inspect -f '{{.NetworkSettings.IPAddress}}' nginx2 # 输出如172.17.0.3 -
容器间互通:进入
nginx1,pingnginx2的 IP 或容器名docker exec -it nginx1 ping 172.17.0.3 # 通 docker exec -it nginx1 ping nginx2 # 通(Docker DNS解析) -
容器访问外部网络:
docker exec -it nginx1 ping www.baidu.com # 通(宿主机NAT转发)
-
适用场景
大多数常规场景(如 Web 服务、应用容器),需容器独立网络、且容器间 / 容器与宿主机通信的场景。
5.2、Host 模式(共享宿主机网络)
容器直接共享宿主机的网络命名空间,无独立 IP、端口,容器使用的端口就是宿主机的端口(无 NAT 转发开销);容器的网络配置与宿主机完全一致。
-
启动容器(指定 Host 模式):
# 容器共享宿主机网络,启动Nginx(占用宿主机80端口) docker run -d --net=host --name nginx-host nginx -
验证网络:
-
容器无独立 IP:查看容器网络,与宿主机一致:
docker exec -it nginx-host ifconfig # 输出与宿主机ifconfig结果相同 -
访问容器服务:直接访问宿主机 80 端口(无需端口映射):
curl localhost:80 # 直接返回Nginx默认页面
-
注意事项
- 容器端口与宿主机端口冲突会导致启动失败;
- 无网络隔离,容器可直接访问宿主机所有网络资源。
适用场景
高网络性能需求的场景(如高并发 API、实时通信服务),追求零 NAT 转发开销的场景。
5.3、None 模式(无网络)
容器仅保留回环接口(lo),无外部网络连接,完全隔离网络环境;需手动配置网络才能通信。
-
启动容器(指定 None 模式):
docker run -it --net=none --name centos-none centos:7 -
验证网络:
-
容器仅含 lo 接口:
# 在容器内执行 ifconfig # 仅显示lo(127.0.0.1) -
无法访问外部 / 其他容器:
# 在容器内执行 ping www.baidu.com # 不通 ping 172.17.0.2 # 不通(其他容器IP)
-
适用场景
无需网络的容器(如本地文件处理、离线计算任务),或需完全自定义网络配置的特殊场景。
5.4、Container 模式(共享其他容器网络)
新容器共享另一个已运行容器的网络命名空间,与目标容器使用同一 IP、端口范围,网络完全互通(相当于 "网络层面的容器共享")。
-
启动基础容器(提供网络):
# 启动一个Nginx容器(Bridge模式,作为网络提供方) docker run -d --name base-nginx nginx -
启动新容器(共享 base-nginx 的网络):
docker run -it --net=container:base-nginx --name share-container centos:7 -
验证网络:
-
新容器与 base-nginx 共享 IP:
# 在share-container内执行 ifconfig # IP与base-nginx的IP完全一致 -
新容器可直接访问 base-nginx 的服务(无需网络转发):
# 在share-container内执行 curl localhost:80 # 直接返回base-nginx的Nginx页面
-
适用场景
多容器共享网络的场景(如 "应用容器 + 日志采集容器",共享网络便于日志采集;"主程序容器 + 辅助工具容器",共享网络简化通信)。
5.5,模式核心差异对比
| 模式 | 独立 IP | 网络隔离 | 与宿主机通信 | 容器间通信 | 性能 |
|---|---|---|---|---|---|
| Bridge | 有 | 容器级 | 是(NAT) | 是(IP / 容器名) | 一般 |
| Host | 无 | 无 | 是(直接共享) | 是 | 最优 |
| None | 无 | 完全隔离 | 否 | 否 | - |
| Container | 共享 | 容器级 | 同目标容器 | 同目标容器 | 优 |