第一章:Docker环境搭建前的准备工作
在正式安装和配置Docker之前,充分的前期准备能够显著提升部署效率并减少潜在问题。系统兼容性、资源分配以及安全策略是必须提前评估的关键因素。
确认操作系统支持
Docker对操作系统的版本和内核有明确要求。主流Linux发行版如Ubuntu、CentOS、Debian均被支持,但需确保内核版本不低于3.10。可通过以下命令检查当前系统信息:
# 查看操作系统版本
cat /etc/os-release
# 查看内核版本
uname -r
上述命令将输出系统的发行版本号和正在运行的内核版本,用于判断是否满足Docker的安装条件。
资源规划与分配
Docker运行容器依赖于足够的计算资源。建议最低配置如下:
- 内存:至少2GB RAM
- 磁盘空间:至少20GB可用空间
- CPU:双核及以上
若主机资源不足,可能导致容器启动失败或性能下降。
用户权限与安全设置
Docker守护进程以root权限运行,因此需要将普通用户加入docker用户组以避免每次使用sudo:
# 创建docker组(若不存在)
sudo groupadd docker
# 将当前用户添加到docker组
sudo usermod -aG docker $USER
# 激活组变更
newgrp docker
执行后,用户无需sudo即可运行Docker命令,提升操作便捷性同时降低权限滥用风险。
网络与防火墙配置
确保主机可以访问外部镜像仓库(如Docker Hub),必要时配置代理或国内镜像加速器。以下是配置阿里云镜像加速的示例:
| 配置项 | 说明 |
|---|
| Registry Mirror | https://<your-code>.mirror.aliyuncs.com |
| 适用系统 | Docker Desktop / Linux daemon.json |
编辑配置文件:
{
"registry-mirrors": ["https://<your-code>.mirror.aliyuncs.com"]
}
该配置需写入
/etc/docker/daemon.json 并重启Docker服务生效。
第二章:Docker的安装与基础配置
2.1 理解Docker架构与核心组件
Docker采用客户端-服务器(C/S)架构,主要由Docker客户端、Docker守护进程、镜像、容器和仓库五大核心组件构成。
Docker工作流程
用户通过Docker CLI向Docker Daemon发送指令,Daemon负责构建、运行和分发容器。容器基于镜像创建,镜像采用分层结构,实现高效复用与快速部署。
核心组件交互示例
docker run -d --name webapp nginx:latest
该命令启动一个名为webapp的Nginx容器。其中
-d表示后台运行,
nginx:latest为镜像名。Docker Daemon检查本地是否存在该镜像,若无则从注册仓库(如Docker Hub)拉取。
- Docker Client:用户操作入口,发送REST请求
- Docker Daemon:监听并处理请求,管理镜像与容器
- 镜像(Image):只读模板,包含运行应用所需环境
- 容器(Container):镜像的运行实例,可启动、停止、删除
- Registry:集中存储与分发镜像的服务
2.2 在Windows系统上安装Docker Desktop
系统要求与前置准备
在安装Docker Desktop前,需确保Windows系统为Windows 10或Windows 11专业版/企业版,并启用WSL 2(Windows Subsystem for Linux)。同时需开启BIOS中的虚拟化支持。
- 64位操作系统,版本1909或更高
- 至少4GB RAM
- 启用Hyper-V和容器功能
安装步骤
从Docker官网下载Docker Desktop Installer.exe,双击运行后选择“Use WSL 2 instead of Hyper-V”选项。安装完成后重启系统并启动Docker Desktop。
# 启用WSL和虚拟机平台
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:Microsoft-Hyper-V /all /norestart
上述PowerShell命令用于启用WSL和Hyper-V功能,/norestart表示暂不重启,可后续手动重启生效。
2.3 在macOS系统上部署Docker环境
在macOS上部署Docker最便捷的方式是使用官方提供的Docker Desktop for Mac。它集成了Docker引擎、CLI工具和Kubernetes支持,安装过程简单且兼容性良好。
安装步骤
- 访问Docker官网下载Docker Desktop for Mac安装包
- 双击下载的
.dmg文件并拖拽应用至Applications目录 - 启动Docker应用程序,首次运行会请求权限以配置必要组件
验证安装
执行以下命令检查Docker是否正常运行:
docker --version
该命令输出Docker CLI版本信息,例如:
Docker version 24.0.7。
docker run hello-world
此命令将拉取测试镜像并运行容器,若成功显示欢迎信息,则表示Docker环境已正确部署。
资源配置
通过Docker Desktop图形界面可调整CPU核心数、内存配额和磁盘空间,建议至少分配2GB内存以确保多容器并发运行稳定。
2.4 在Linux系统中安装Docker引擎
在主流Linux发行版中,Docker引擎可通过包管理器便捷安装。以Ubuntu为例,首先需更新软件包索引并安装依赖:
sudo apt-get update
sudo apt-get install -y ca-certificates curl gnupg
上述命令确保系统具备通过HTTPS获取软件包的能力,并准备好GPG密钥管理工具。
接下来,添加Docker官方GPG密钥以验证软件包完整性:
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
该步骤将密钥写入受信任密钥环,防止中间人攻击导致的软件篡改。
配置APT仓库
启用稳定版Docker仓库,便于后续升级维护:
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo $VERSION_CODENAME) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
此命令动态生成适配当前系统的仓库源地址,提升兼容性。
最后执行安装:
- 更新APT缓存:
sudo apt-get update - 安装Docker引擎:
sudo apt-get install -y docker-ce docker-ce-cli containerd.io
安装完成后,Docker服务将自动启动并注册为系统守护进程。
2.5 验证安装并运行第一个Hello-World容器
完成Docker的安装后,首要任务是验证其是否正确部署并能够正常运行容器。
执行Hello-World测试
通过官方提供的测试镜像,可快速确认Docker引擎的工作状态:
docker run hello-world
该命令会自动拉取
hello-world镜像(若本地不存在),创建容器实例,并输出一段欢迎信息,表明Docker环境已就绪。输出内容包含版本说明与基本指令提示,是环境健康检查的关键步骤。
常见问题排查
若命令执行失败,需检查以下几点:
- Docker服务是否已启动(Linux下可使用
systemctl status docker) - 当前用户是否加入
docker用户组 - 网络连接是否正常,能否访问Docker Hub
一旦成功运行,说明本地Docker环境已具备容器化应用的运行能力。
第三章:镜像与容器的基本操作
3.1 获取与管理Docker镜像(pull、tag、rmi)
获取远程镜像:docker pull
使用
docker pull 可从镜像仓库(如 Docker Hub)下载镜像到本地。默认会拉取最新版本。
docker pull nginx:latest
该命令拉取标签为
latest 的 Nginx 镜像。
:tag 指定版本,若省略则默认为
latest。
为镜像打标签:docker tag
可为本地镜像添加自定义标签,便于组织或推送到私有仓库。
docker tag nginx myrepo/nginx:v1.0
将原有镜像
nginx 重新标记为
myrepo/nginx:v1.0,其中
myrepo 通常是仓库命名空间。
删除本地镜像:docker rmi
不再需要的镜像可通过
rmi 命令删除,释放磁盘空间。
- 先使用
docker images 查看本地镜像列表; - 执行
docker rmi myrepo/nginx:v1.0 删除指定镜像; - 若镜像被容器引用,需先移除容器。
3.2 启动、停止与删除容器的常用命令
在 Docker 容器管理中,启动、停止和删除是最基础且高频的操作。掌握这些命令有助于高效维护容器环境。
启动容器:docker start 与 docker run
`docker run` 用于创建并启动新容器,而 `docker start` 则用于启动已存在的停止容器。
docker run -d --name webserver nginx:latest
上述命令以后台模式(-d)启动一个名为 webserver 的 Nginx 容器。--name 指定容器名称,便于后续管理。
停止与删除容器
使用以下命令可安全停止并移除容器:
docker stop webserver && docker rm webserver
`docker stop` 发送 SIGTERM 信号,允许容器优雅终止;`docker rm` 彻底删除已停止的容器,释放资源。
- 强制删除运行中的容器:docker rm -f webserver
- 批量删除所有停止容器:docker container prune
3.3 容器日志查看与状态监控
实时日志查看
通过
docker logs 命令可查看容器的标准输出和标准错误日志,适用于排查运行时异常。
docker logs -f --tail=50 my-container
其中
-f 表示持续跟踪日志输出,类似
tail -f;
--tail=50 仅显示最近50行,加快启动响应。
容器状态监控
使用
docker stats 可实时监控容器资源使用情况:
- CPU 使用率
- 内存占用与限制
- 网络 I/O 与存储读写
该命令默认动态刷新,便于快速识别性能瓶颈。
结构化日志集成
生产环境中建议将日志导出至 ELK 或 Loki 等集中式平台,通过结构化标签(如容器名、服务名)实现高效检索与告警联动。
第四章:Docker网络与数据持久化实践
4.1 理解Docker默认网络模式与通信机制
Docker 默认使用
bridge 网络模式,为容器提供基础的网络隔离与通信能力。启动容器时,若未指定网络,Docker 会自动将其连接到默认的 bridge 网络。
默认网络特性
- 容器通过虚拟网桥 docker0 连接到宿主机网络
- 每个容器分配独立的 IP 地址(通常在 172.17.0.0/16 网段)
- 容器间可通过 IP 直接通信,但无法通过名称解析
查看默认网络配置
docker network inspect bridge
该命令输出 bridge 网络的详细信息,包括子网、网关、连接的容器等。关键字段说明:
-
Subnet:容器 IP 分配范围
-
Gateway:容器访问外部网络的出口
-
Containers:当前接入的容器列表
通信机制示意图
[Container A (172.17.0.2)] ↔ docker0 ↔ [Host] ↔ [External Network]
容器通过 NAT 与外部通信,内部容器间基于 IP 实现互通,但需手动管理地址依赖。
4.2 自定义网络创建与容器间互联
在 Docker 中,自定义网络是实现容器间安全、高效通信的关键机制。通过创建独立的网络命名空间,可以隔离服务并提升网络可管理性。
创建自定义桥接网络
使用以下命令可创建一个用户自定义的桥接网络:
docker network create --driver bridge mynet
其中
--driver bridge 指定使用桥接驱动,
mynet 为网络名称。该网络支持 DNS 解析,容器可通过名称直接通信。
容器连接与通信示例
启动两个容器并加入同一网络:
docker run -d --name web --network mynet nginx
docker run -it --name client --network mynet alpine ping web
此时
client 容器可通过主机名
web 直接访问 Nginx 服务,实现无缝互联。
- 自定义网络提供内置 DNS 支持
- 避免端口冲突,增强安全性
- 支持动态添加和移除容器
4.3 使用卷(Volume)实现数据持久化存储
在容器化应用中,数据持久化是保障状态不丢失的关键。Docker 卷(Volume)由引擎直接管理,独立于容器生命周期,确保数据安全可靠。
创建并使用命名卷
docker volume create app-data
docker run -d --name webapp -v app-data:/app/data nginx
第一条命令创建名为 `app-data` 的持久化卷;第二条将该卷挂载至容器内的 `/app/data` 路径,实现数据持久存储与跨容器共享。
卷的管理优势
- 数据独立于容器存在,删除容器不影响卷内容
- 支持备份、迁移和版本控制
- 可在多个容器间安全共享
相比绑定挂载,卷由 Docker 管理,路径统一、可移植性强,是生产环境推荐的数据持久化方案。
4.4 绑定挂载(Bind Mounts)的实际应用场景
数据同步机制
绑定挂载常用于将宿主机的目录直接映射到容器内部,实现文件共享与实时同步。开发环境中,源代码目录可通过绑定挂载共享至容器,避免频繁构建镜像。
docker run -v /home/user/app:/app my-web-app
该命令将宿主机的
/home/user/app 挂载到容器的
/app 路径。容器内对文件的修改会直接反映在宿主机上,适用于热重载开发。
配置文件管理
通过绑定挂载可动态注入配置文件,如 Nginx 或数据库配置,无需重建镜像即可更新服务行为。
- 提升部署灵活性
- 支持多环境配置切换
- 便于审计和版本控制
第五章:总结与后续学习建议
深入实践微服务架构
在完成基础学习后,建议通过构建完整的微服务系统来巩固知识。例如,使用 Go 语言实现一个用户认证服务,并与其他模块通过 gRPC 通信:
package main
import (
"context"
"log"
"net"
pb "your-project/proto"
"google.golang.org/grpc"
)
type server struct {
pb.UnimplementedAuthServiceServer
}
func (s *server) Login(ctx context.Context, req *pb.LoginRequest) (*pb.LoginResponse, error) {
// 实现登录逻辑,如 JWT 签发
token := "generated-jwt-token"
return &pb.LoginResponse{Token: token}, nil
}
func main() {
lis, err := net.Listen("tcp", ":50051")
if err != nil {
log.Fatalf("监听端口失败: %v", err)
}
s := grpc.NewServer()
pb.RegisterAuthServiceServer(s, &server{})
log.Println("gRPC 服务启动在 :50051")
s.Serve(lis)
}
持续集成与部署优化
采用 CI/CD 流程提升交付效率。以下为 GitHub Actions 的典型工作流配置片段:
- 代码推送触发自动化测试
- 镜像构建并推送到 Docker Hub
- 通过 Kubectl 部署到 Kubernetes 集群
- 执行健康检查与回滚机制
推荐学习路径
| 阶段 | 学习内容 | 推荐资源 |
|---|
| 进阶 | Distributed Tracing | OpenTelemetry 官方文档 |
| 高级 | Service Mesh | Istio 入门教程 |