阶段一:容器化技术之Docker基础
认识容器技术
容器技术概述
容器技术是一种轻量级的虚拟化技术,它通过操作系统级别的隔离机制(Linux namespace),将应用程序及其依赖环境(如代码、运行时、系统工具、库等)打包成一个独立、可移植的单元(称为容器),从而实现快速部署、跨环境一致运行和资源高效利用,是一种进程级别的虚拟化。
容器的前世今生
前世 —— 为什么会有 Docker?
在 Docker 之前,软件交付和部署有几个痛点:
1. 开发环境和生产环境不一致
- 开发在 Windows,部署在 Linux,经常出现 *“我本地能跑,线上跑不起来”*。
2. 传统虚拟机太重
- 虚拟机(VMware、VirtualBox)需要跑完整的操作系统(几十 GB),启动慢,资源浪费大。
3. 应用依赖管理复杂
- 一个应用可能依赖不同版本的库(PHP 7.4 vs PHP 8.1),在同一台服务器上难以共存。
➡️ 于是人们需要一种 轻量、隔离、可移植 的解决方案 —— 这就是 容器化(Container)。
Docker 的诞生(2013 年)
- 2013 年,dotCloud 公司(一家 PaaS 提供商)开源了 Docker。
- 基于 Linux 的 cgroups + namespace 技术(实际上 Linux 已有容器化基础,但门槛高)。
- Docker 提供了:
- 镜像(Image):打包应用和依赖
- 容器(Container):镜像的运行实例
- 仓库(Registry):镜像的分发(如 Docker Hub)
一句话:Docker 把“环境”当做代码打包,解决了“能跑起来”的问题。
今生 —— Docker 的发展历程
1. 2013 - 2014
- Docker 开源,迅速走红,成为 DevOps 的明星项目。
2. 2015
- Docker 公司成立,围绕生态打造 Docker Engine、Docker Hub。
- 容器编排问题开始被关注(Swarm、Mesos、Kubernetes 出现)。
3. 2017
- Kubernetes(K8s)成为事实上的容器编排标准,Swarm 渐渐被边缘化。
- Docker 更多专注于开发者工具。
4. 2019 - 2020
- Kubernetes 默认运行时改用 containerd(从 Docker 剥离出的核心)。
- 业界出现“Kubernetes 不再使用 Docker 运行时”的新闻,但实际 Docker 生态依旧繁荣。
5. 现在(2025)
- Docker 仍是最流行的容器开发工具。
- Kubernetes 主导容器编排,Docker 常用作开发、打包、测试。
- 镜像格式(OCI 标准)已经统一,Docker 只是其中的实现之一。
Docker 的价值
- 一次打包,到处运行
- 轻量:容器比虚拟机快、占用资源少
- 标准化:镜像规范化,交付更容易
- 生态完善:Docker Compose、Docker Hub、与 CI/CD 系统集成
未来趋势
1. 云原生生态(Cloud Native)
- Docker 已成为 开发者工具,而生产部署更多依赖 Kubernetes + containerd/cri-o。
2. 无服务器化(Serverless)
- 结合容器技术,应用无需关心底层运行环境。
3. 轻量化运行时
- 如 Podman、CRI-O、Firecracker(AWS Lambda 用)正在兴启
容器引擎分类
Docker Engine
- 定位:最流行的全功能容器引擎
- 核心组件:
dockerd:守护进程(Docker Daemon)
containerd:底层运行时(通过runc实际启动容器)
Docker CLI:用户命令行工具
- 特点:
- 完整的镜像管理(构建、推送、拉取)
- 内置网络和存储驱动
- 支持 Docker Compose(多容器编排)
- 适用场景:开发、测试环境,传统容器化应用。
Podman
- 定位:无守护进程的 Docker 替代品(Red Hat 主导)
- 核心特性:
- 无需后台服务(直接调用
runc/crun)
- 兼容 Docker CLI 命令(
alias docker=podman)
- 支持 Rootless 容器(无需 root 权限)
- 原生集成
systemd管理容器
- 工具生态:
Buildah:专用于构建 OCI 镜像
Skopeo:镜像仓库操作工具
- 适用场景:安全敏感环境、Kubernetes 开发侧工具链。
Containerd
- 定位:轻量工业级容器引擎(CNCF 项目)
- 核心特性:
- 被 Docker 和 Kubernetes 用作默认运行时
- 通过
ctr命令行工具直接操作(功能较基础)
- 支持插件化架构(快照、存储、运行时)
- 适用场景:Kubernetes 生产环境、需要直接控制底层运行时的场景。
Docker版本和安装

docker就是目前最火热的能实现容器技术的软件,使用go(golang)语言开发。
参考:https://www.docker.com/
Docker版本
Docker企业版(EE):专为企业的发展和IT团队建立。docker-ee为企业提供最安全的容器平台。
Docker社区版(CE):
- 最新版本:29.4.0-ce(这是目前Docker社区版的最新版本,提供了更新的特性、性能和修复)。
- Docker CE 的核心特点
<sheet sheet-id="yP1ybp" token="LGiosWzQBhVD8it2xDJcgXxvnua"></sheet>
- Docker CE 的组件
<sheet sheet-id="MAz8A1" token="LGiosWzQBhVD8it2xDJcgXxvnua"></sheet>
服务器环境准备
操作系统
CentOS Stream 9
修改主机名和hosts
# hostnamectl set-hostname web01.itcast.cn
# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.88.101 web01 web01.itcast.cn命令作用:
- 读取并输出
/etc/hosts的内容;使用>重定向时,输出会写入目标文件。
执行结果:
- 成功后会输出指定文件内容;文件不存在或权限不足时会报错。
关键参数:
注意事项:
服务管理:启动/停止/重启/查看状态
命令说明:
等价于 SELINUX=disabled
**关键参数:**
**注意事项:**
[ipv4]
method=manual
addresses=192.168.88.101/24
gateway=192.168.88.2
dns=8.8.8.8;
[ipv6]
method=ignore
注意事项:
centos镜像源有很多种,centos-base.repo基础源,epel-release扩展源
-----------------------------------------
自行配置chrony时间同步
**docker-ce的yum源下载(任选其一)**
注意事项:
**注意事项:**
注意事项:
{ }
**注意事项:**
修改前:
[Service]
Type=notify
修改后:
[Service]
Type=notify
ExecStart=/usr/bin/dockerd注意事项:
**注意事项:**注意事项:
参数说明:
-d:后台运行容器(守护模式)。
可通过浏览器访问http://192.168.88.130:8090注意事项:
创建两个需要挂载的宿主机目录
从第一个容器把nginx.conf配置文件复制出来放到/opt/nginx/conf目录下面
在/opt/nginx/html创建一个测试页面
运行my-nginx01容器 harbor.lanqicheng.top/library/nginx:latest
参数说明:
新增参数:
**注意事项:**
实现环境变量设置和故障自动恢复
harbor.lanqicheng.top/library/nginx:latest
新增参数:注意事项:
手动创建要使用的网络并在启动的时候进行网络指定
harbor.lanqicheng.top/library/nginx:latest
**注意事项:**
查看容器启动、停止、重启、和运行状态
#查看运行的容器
#查看所有的容器包括退出和停止的容器
#容器启动、重启、停止、删除,通过容器名称或者容器ID,删除容器必须先停止容器
#删除容器之前先要停止容器
#查看容器的详细信息,可以看到容器运行状态,挂载目录,网络地址,宿主机对应一个的PID号等
#查看容器的日志,可以通过日志进行问题排查,查看最新的300行(重点)
#查看容器时时输出日志命令拆解:
| 命令部分 | 重要程度 | 详细解释 |
|---|---|---|
--tail | 普通 | 限制显示最近的日志行数,数量由后面的 300 指定。 |
300 | 普通 | 日志行数 300,表示只显示最近的这几行日志。 |
注意事项:
可以登录一个正常运行的容器并在里面做具体的工作
命令拆解:
| 命令部分 | 重要程度 | 详细解释 |
|---|---|---|
my-nginx01:/etc/nginx/nginx.conf | 普通 | 复制路径 my-nginx01:/etc/nginx/nginx.conf;路径中带 容器名: 的一侧表示容器内路径,另一侧表示宿主机路径。 |
. | 普通 | 复制路径 .;路径中带 容器名: 的一侧表示容器内路径,另一侧表示宿主机路径。 |
/opt/nginx/conf/nginx.conf | 普通 | 复制路径 /opt/nginx/conf/nginx.conf;路径中带 容器名: 的一侧表示容器内路径,另一侧表示宿主机路径。 |
my-nginx01:/opt | 普通 | 复制路径 my-nginx01:/opt;路径中带 容器名: 的一侧表示容器内路径,另一侧表示宿主机路径。 |
注意事项:
#直接使用以下命令强制清理
**命令拆解:**
| 命令部分 | 重要程度 | 详细解释 |
|---|---|---|
| `status=exited` | 【普通】 | Docker 过滤条件或配置值 `status=exited`,用于限定查询结果或改变容器运行行为。 |
| `status=dead` | 【普通】 | Docker 过滤条件或配置值 `status=dead`,用于限定查询结果或改变容器运行行为。 |
| `status=created` | 【普通】 | Docker 过滤条件或配置值 `status=created`,用于限定查询结果或改变容器运行行为。 |
| `\|` | 【普通】 | 管道,把前一个命令的输出交给后一个命令继续筛选或处理。 |
**注意事项:**
关键组件说明


容器间通信流程:

容器访问外网:

网络配置命令示例
命令拆解:
| 命令部分 | 重要程度 | 详细解释 |
|---|---|---|
--driver=bridge | 普通 | 长参数 --driver 的值是 bridge,用于精确控制命令行为。 |
-d | 核心 | 后台运行容器,命令返回后容器继续运行,终端不会被容器日志占用。 |
--name | 核心 | 指定容器名称 web01,后续可以用这个名称执行 ps、logs、exec 等管理命令。 |
-p | 核心 | 端口映射,格式是 宿主机端口:容器端口,把宿主机访问转发到容器端口。 |
8080:80 | 普通 | Docker 镜像引用 8080:80,指定要运行、上传、下载或重新标记的镜像。 |
8090:80 | 普通 | Docker 镜像引用 8090:80,指定要运行、上传、下载或重新标记的镜像。 |
注意事项:
网络架构图:

实现机制:
使用Host模式启动容器并进行访问
命令拆解:
| 命令部分 | 重要程度 | 详细解释 |
|---|---|---|
-d | 核心 | 后台运行容器,命令返回后容器继续运行,终端不会被容器日志占用。 |
--name=my_nginx | 普通 | Docker 过滤条件或配置值 --name=my_nginx,用于限定查询结果或改变容器运行行为。 |
--cpus=1.5 | 普通 | Docker 过滤条件或配置值 --cpus=1.5,用于限定查询结果或改变容器运行行为。 |
\ | 普通 | \ 是 Docker run 的目标或参数;它决定当前动作实际处理的镜像、容器、网络、数据卷或 Compose 服务。 |
注意事项:
当容器修改文件时,联合文件系统会从底层的只读层复制文件到可写层,再修改(避免直接修改镜像层)。
Docker支持多种联合文件系统驱动,不同驱动实现细节略有差异:

小结:
需要记忆的核心命令: