1. Docker 基础概念
1.1 云服务与虚拟化基础
1.1.1 云服务模型对比
服务模型 | 核心提供 | 用户责任 | 优点 | 缺点 |
---|---|---|---|---|
IaaS | 虚拟化资源(虚拟机、存储、网络) | 管 OS、应用部署与资源 | 灵活、可扩展 | 管理复杂,需技术支持 |
PaaS | 开发平台(运行环境、工具) | 仅专注应用开发 | 简化开发流程 | 灵活度低,受平台限制 |
SaaS | 现成应用(直接使用) | 仅使用应用 | 快速部署,省成本 | 定制化差,依赖服务商 |
DaaS | 数据处理、分析与访问服务 | 仅用数据与分析 | 降低数据管理难度 | 存在数据隐私风险 |
1.1.2 常见云服务提供商
-
阿里云、腾讯云、AWS、Google Cloud、华为云等
-
提供存储、计算、网络、CDN 等服务
1.1.3 虚拟化技术
-
全虚拟化:完全模拟硬件环境,兼容多操作系统
-
半虚拟化:与宿主机协作,性能更优
-
主流产品:VMware、KVM、Hyper-V、VirtualBox
1.2 Docker 核心价值
1.2.1 为什么需要 Docker
-
一致性环境:实现跨平台部署,确保应用运行一致性
-
资源高效:相比传统虚拟机,资源消耗减少50%以上
-
快速部署:秒级启动,简化应用部署流程
1.2.2 Docker 与传统虚拟机对比
特性 | Docker 容器 | 虚拟机 |
---|---|---|
启动速度 | 秒级 | 分钟级 |
资源消耗 | 几乎无 | 损耗50%左右 |
性能 | 接近原生 | 较弱 |
单机支持量 | 上千个 | 几十个 |
隔离性 | 资源隔离/限制 | 完全隔离 |
1.3 Docker 架构组成
核心组件:
-
Docker Daemon:后台守护进程
-
Docker Client:用户交互界面
-
Images:只读模板,包含应用及其依赖
-
Containers:镜像的运行实例
-
Registry:镜像存储和分发服务(如 Docker Hub)
核心技术:
-
Namespace:实现资源隔离(6大命名空间)
-
Cgroup:实现资源限制
-
Copy-on-Write:高效文件操作
核心概念
-
镜像(Image):包含应用及依赖的只读模板
-
容器(Container):镜像的运行实例,具有独立文件系统、网络、进程空间
-
仓库(Repository):存放 Docker 镜像的地方(如 Docker Hub)
2. Docker 实践操作
2.1 安装配置
2.1.1 基本安装步骤
# 关闭防火墙和增强功能
systemctl stop firewalld.service
setenforce 0
# 安装依赖包
yum install -y yum-utils device-mapper-persistent-data lvm2
# 设置阿里云镜像源
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 安装 Docker-CE
yum install -y docker-ce docker-ce-cli containerd.io
# 启动服务
systemctl start docker
systemctl enable docker
2.1.2 镜像加速配置
# 华为云加速器
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": [ "https://0a40cefd360026b40f39c00627fa6f20.mirror.swr.myhuaweicloud.com" ]
}
EOF
2.2 镜像管理
2.2.1 基本命令
#查看 Docker 版本
docker --version
#查看 Docker 系统信息
docker info
2.2.2 核心命令
# 拉取镜像
docker pull nginx
# 查看镜像
docker images
# 镜像标签
docker tag nginx:latest nginx:web
# 删除镜像
docker rmi nginx:web #通过 仓库:标签
docker rmi ID #通过 ID
# 导出
docker save nginx:latest > nginx.tar
# 导入
docker load < nginx.tar
2.3 容器管理
2.3.1 生命周期管理
# 创建容器
docker create -it nginx:latest /bin/bash
# 启动/停止
docker start <container_id>
docker stop <container_id>
# 创建一个自定义名称的容器
docker run -itd --name 自定义名称 镜像名 [命令]
# 修改容器名称
docker rename 原容器名/原容器ID 新名称
# 运行容器
docker run -itd <镜像名> /bin/bash
# 进入容器
docker exec -it <container_id> /bin/bash
# 文件复制
docker cp ~/test.txt <container_id>:/opt/ # 主机复制到容器
docker cp <container_id>:/opt/test.txt /opt # 容器复制到主机
2.3.2 查看容器
# 查看正在运行的容器
docker ps
# 查看所有容器
docker ps -a
2.3.2 批量操作
# 批量停止容器
docker ps -a | awk 'NR>=2{print "docker stop "$1}' | bash
# 批量清理后台停止的容器
docker rm $(docker ps -a -q)
# 批量删除所有容器
docker ps -a | awk 'NR>=2{print "docker rm "$1}' | bash
# 批量删除镜像
docker images | awk 'NR>=2{print "docker rmi "$3}'| bash # 批量删除镜像
docker images |awk 'NR>=2{print "docker rmi "$1 ":" $2}'|bash # 批量删除同id的镜像
3. Docker 网络管理
3.1 网络模式
主要网络模式:
-
Bridge模式(默认)
-
容器通过docker0网桥通信
-
支持端口映射:
-p 43000:80
-
-
Host模式
-
容器直接使用宿主机网络栈
-
无独立IP,性能最佳
-
-
Container模式
-
共享其他容器的网络命名空间
-
多个容器使用相同IP
-
-
None模式
-
无网络配置,只有lo接口
-
安全性最高
-
3.2 网络实践
端口映射
# 随机端口映射
docker run -d --name test1 -P nginx
# 指定端口映射
docker run -d --name test2 -p 43000:80 nginx
自定义网络
# 创建自定义网络
docker network create --subnet=172.18.0.0/16 mynetwork
# 使用指定IP运行容器
docker run -itd --name test4 --net mynetwork --ip 172.18.0.10 centos:7 /bin/bash
4. 关键知识点总结
4.1 核心概念
-
一次封装,到处运行:Docker 的核心设计理念
-
镜像分层:基于联合文件系统的写时复制机制
-
容器隔离:通过Namespace和Cgroup实现
4.2 最佳实践
-
容器设计:一个容器只运行一个进程
-
数据持久化:使用Volume存储重要数据
-
网络规划:根据需求选择合适的网络模式
-
资源限制:使用Cgroup限制容器资源使用
4.3 故障排查
-
查看容器日志:
docker logs <container_id>
-
检查容器状态:
docker ps -a
-
进入容器调试:
docker exec -it <container_id> /bin/bash
这份整理突出了Docker学习的核心脉络,从基础概念到实践操作,再到网络管理和故障排查,形成了一个完整的学习路径。重点强调了Docker与传统虚拟机的区别、核心架构组件以及实际操作的命令和技巧。