简介
Docker 通过提供一个强大的容器化平台,彻底改变了软件部署方式。本教程提供了一份全面指南,帮助你正确启动 Docker 服务,助开发者和系统管理员理解高效且可靠地配置与启动 Docker 服务的基本原理和实用技术。
Docker 基础
什么是 Docker?
Docker 是一个开源平台,旨在使用容器化技术自动化应用程序的部署、扩展和管理。它允许开发者将应用程序及其所有依赖项打包成称为容器的标准化单元,这些容器可以在不同的计算环境中一致地运行。
核心概念
容器与虚拟机
| 特性 | 容器 | 虚拟机 |
|---|---|---|
| 资源使用 | 轻量级 | 重量级 |
| 启动时间 | 秒级 | 分钟级 |
| 隔离级别 | 进程级 | 完整操作系统级 |
graph TD
A[Docker 容器] --> B[应用程序]
A --> C[依赖项]
A --> D[运行时环境]
Docker 关键组件
- Docker 引擎:核心运行时环境
- Docker 镜像:用于创建容器的只读模板
- Docker 容器:镜像的可运行实例
- Dockerfile:用于构建 Docker 镜像的脚本
在 Ubuntu 22.04 上安装
## 更新软件包索引
sudo apt update
## 安装依赖项
sudo apt install apt-transport-https ca-certificates curl software-properties-common
## 添加 Docker 官方 GPG 密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
## 设置稳定仓库
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
## 安装 Docker 引擎
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io
Docker 基本命令
## 检查 Docker 版本
docker --version
## 从 Docker Hub 拉取镜像
docker pull ubuntu:latest
## 列出本地镜像
docker images
## 运行容器
docker run -it ubuntu:latest /bin/bash
## 列出正在运行的容器
docker ps
## 停止容器
docker stop [容器 ID]
用例
Docker 广泛应用于:
- 微服务架构
- 持续集成/持续部署(CI/CD)
- 云原生应用开发
- 开发和测试环境
最佳实践
- 保持容器轻量级
- 尽可能使用官方镜像
- 实施多阶段构建
- 最小化镜像层
- 使用.dockerignore 文件
注意:在开始使用 Docker 时,LabEx 提供了出色的实践学习环境来练习容器化技能。
服务配置
Docker Compose 概述
Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。它允许你使用 YAML 文件来配置应用程序的服务、网络和卷。
Compose 文件结构
version: "3.8"
services:
web:
image: nginx:latest
ports:
- "80:80"
database:
image: postgres:13
environment:
POSTGRES_PASSWORD: example
配置参数
关键配置部分
| 部分 | 用途 | 示例 |
|---|---|---|
| version | Compose 文件格式版本 | 3.8 |
| services | 定义容器 | web, database |
| networks | 创建自定义网络 | frontend, backend |
| volumes | 持久数据存储 | database_data |
服务定义详细示例
version: "3.8"
services:
## Web 应用服务
web:
image: nginx:latest
container_name: web-server
ports:
- "8080:80"
volumes: -./website:/usr/share/nginx/html
networks:
- web_network
restart: always
## 数据库服务
database:
image: postgres:13
container_name: postgres-db
environment:
POSTGRES_DB: myapp
POSTGRES_USER: admin
POSTGRES_PASSWORD: securepassword
volumes:
- postgres_data:/var/lib/postgresql/data
networks:
- web_network
restart: unless-stopped
networks:
web_network:
driver: bridge
volumes:
postgres_data:
服务配置管理
graph TD
A[Docker Compose YAML] --> B{验证配置}
B --> |有效| C[构建服务]
B --> |无效| D[显示错误]
C --> E[启动容器]
E --> F[监控服务]
高级配置技术
环境变量
## 创建.env 文件
echo "DB_PASSWORD=mysecretpassword" > .env
## 在 docker-compose.yml 中引用
environment:
- DB_PASSWORD=${DB_PASSWORD}
健康检查
services:
web:
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost"]
interval: 30s
timeout: 10s
retries: 3
常见配置命令
## 验证 compose 文件
docker-compose config
## 启动服务
docker-compose up -d
## 停止服务
docker-compose down
## 查看服务日志
docker-compose logs web
## 重建服务
docker-compose up -d --build
最佳实践
- 使用特定于环境的 compose 文件
- 实施适当的卷管理
- 使用网络进行服务隔离
- 利用环境变量
- 实施健康检查
注意:LabEx 提供交互式环境,以便有效地实践这些 Docker Compose 配置。
实际部署
部署策略
部署方法
| 策略 | 描述 | 用例 |
|---|---|---|
| 单主机 | 在一台机器上运行容器 | 开发、小型项目 |
| 群模式 | Docker 原生集群 | 中等规模应用程序 |
| Kubernetes | 高级容器编排 | 大型复杂部署 |
Docker 群集设置
graph TD
A[初始化群集] --> B[添加管理节点]
B --> C[添加工作节点]
C --> D[部署服务]
初始化群集
## 在主节点上初始化群集
docker swarm init --advertise-addr 192.168.1.100
## 生成工作节点加入令牌
docker swarm join-token worker
## 生成管理节点加入令牌
docker swarm join-token manager
服务部署配置
version: "3.8"
services:
web:
image: myapp:latest
deploy:
replicas: 3
update_config:
parallelism: 1
delay: 10s
restart_policy:
condition: on-failure
ports:
- "80:80"
networks:
- backend
networks:
backend:
driver: overlay
滚动更新策略
## 使用滚动更新部署服务
docker service create \
--replicas 3 \
--update-parallelism 1 \
--update-delay 10s \
nginx:latest
监控与扩展
Docker 服务管理命令
## 列出服务
docker service ls
## 扩展服务
docker service scale web=5
## 检查服务状态
docker service ps web
## 查看服务日志
docker service logs web
安全注意事项
最佳实践
- 使用最小权限原则
- 实施网络分段
- 定期进行安全更新
- 使用机密管理
- 启用 Docker 内容信任
## 启用 Docker 内容信任
export DOCKER_CONTENT_TRUST=1
持续部署管道
graph LR
A[代码提交] --> B[构建镜像]
B --> C[运行测试]
C --> D[推送到注册表]
D --> E[部署到群集]
E --> F[健康检查]
容器编排比较
| 特性 | Docker 群集 | Kubernetes |
|---|---|---|
| 复杂度 | 低 | 高 |
| 设置难度 | 易 | 复杂 |
| 可扩展性 | 中等 | 广泛 |
| 与 Docker 的原生集成 | 出色 | 有限 |
日志记录与监控
## 配置日志驱动
docker service create \
--log-driver json-file \
--log-opt max-size=10m \
nginx:latest
性能优化
- 使用多阶段构建
- 最小化镜像大小
- 实施缓存策略
- 使用轻量级基础镜像
注意:LabEx 提供全面的实践实验,以便在实际场景中练习这些部署技术。
总结
通过掌握 Docker 服务配置和部署策略,开发者能够创建更健壮、可扩展的容器化应用程序。本教程提供了关于 Docker 服务管理的重要见解,从理解基本概念到实施实际部署技术,使专业人员能够优化其容器基础设施并提高整体系统性能。



