简介
本教程提供了运行 Docker 镜像和管理 Docker 容器的全面指南。你将学习 Docker 的基础知识,探索 Docker 镜像及其用例,并发现拉取、管理和与 Docker 容器进行交互的技术。此外,本教程还涵盖了高级容器管理主题,如 Docker 卷、网络、Compose 和 Swarm,以帮助你使用 Docker 有效地部署和管理应用程序。
Docker 基础
什么是 Docker?
Docker 是一项强大的容器化技术,它彻底改变了应用程序的部署和开发方式。它允许开发者将应用程序及其所有依赖项打包成称为容器的标准化单元,确保在不同的计算环境中具有一致的性能。
Docker 的核心概念
容器化技术
容器化使应用程序能够在隔离的环境中运行,具有以下几个关键优势:
| 特性 | 描述 |
|---|---|
| 隔离性 | 每个容器独立运行 |
| 可移植性 | 容器可以在任何支持 Docker 的系统上运行 |
| 高效性 | 与传统虚拟机相比更轻量级 |
graph TD
A[应用程序代码] --> B[Docker 容器]
B --> C[主机操作系统]
C --> D[基础设施]
Docker 架构
Docker 使用客户端 - 服务器架构,包含以下关键组件:
- Docker 守护进程
- Docker 客户端
- Docker 镜像仓库
- Docker 镜像
- Docker 容器
在 Ubuntu 22.04 上安装
## 更新软件包索引
sudo apt update
## 安装依赖项
sudo apt install apt-transport-https ca-certificates curl software-properties-common
## 添加 Docker 的官方 GPG 密钥
curl -fsSL | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
## 设置稳定仓库
echo "deb [arch=$(dpatch -s)] $(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 pull ubuntu:latest
## 列出镜像
docker images
## 运行容器
docker run -it ubuntu:latest /bin/bash
Docker 的主要优点
- 一致的开发环境
- 更快的部署
- 资源高效利用
- 可扩展性
- 简化的配置管理
使用 Docker 镜像
理解 Docker 镜像
Docker 镜像是用于创建容器的只读模板。它们包含运行应用程序所需的应用代码、运行时环境、库和系统工具。
graph LR
A[Dockerfile] --> B[Docker 镜像]
B --> C[Docker 容器]
镜像管理命令
| 命令 | 描述 |
|---|---|
| docker images | 列出本地镜像 |
| docker pull | 从镜像仓库下载镜像 |
| docker rmi | 删除镜像 |
| docker tag | 为镜像打标签以便版本控制 |
创建 Dockerfile
## 基础镜像
FROM ubuntu:22.04
## 元数据
LABEL maintainer="your-email@example.com"
## 更新系统
RUN apt-get update && apt-get install -y \
python3 \
pip
## 设置工作目录
WORKDIR /app
## 复制应用文件
COPY. /app
## 安装依赖项
RUN pip install -r requirements.txt
## 暴露端口
EXPOSE 5000
## 运行应用
CMD ["python3", "app.py"]
构建 Docker 镜像
## 构建镜像
docker build -t myapp:v1.
## 使用特定标签构建
docker build -t myapp:latest.
## 使用构建参数构建
docker build --build-arg VERSION=1.0 -t myapp:v1.
Docker 镜像层
graph TD
A[基础镜像] --> B[系统更新]
B --> C[安装依赖项]
C --> D[复制应用代码]
D --> E[定义启动命令]
镜像存储与共享
## 登录到 Docker Hub
docker login
## 将镜像推送到镜像仓库
docker push username/myapp:v1
## 从镜像仓库拉取镜像
docker pull username/myapp:v1
最佳实践
- 最小化镜像大小
- 使用多阶段构建
- 利用缓存
- 避免安装不必要的软件包
Docker 实践
容器网络
Docker 为容器通信提供了多种网络模式:
| 网络模式 | 描述 |
|---|---|
| 桥接(Bridge) | 默认网络模式 |
| 主机(Host) | 直接访问主机网络 |
| 无(None) | 无网络连接 |
## 创建自定义网络
docker network create mynetwork
## 在特定网络上运行容器
docker run --network=mynetwork ubuntu
Docker Compose
version: "3"
services:
web:
image: nginx
ports:
- "8080:80"
database:
image: postgres
environment:
POSTGRES_PASSWORD: secret
容器编排工作流程
graph TD
A[开发] --> B[容器化]
B --> C[测试]
C --> D[预发布]
D --> E[生产部署]
扩展应用程序
## 扩展服务
docker-compose up -d --scale web=3
## 监控容器资源
docker stats
生产部署策略
## 滚动更新
docker service update \
--image myapp:v2 \
--update-parallelism 2 \
--update-delay 10s \
myservice
容器监控
## 查看容器日志
docker logs mycontainer
## 实时资源使用情况
docker top mycontainer
高级网络
## 创建覆盖网络
docker network create \
-d overlay \
--subnet 10.0.0.0/24 \
my_overlay_network
安全实践
| 实践 | 描述 |
|---|---|
| 资源限制 | 限制 CPU/内存 |
| 只读文件系统 | 防止修改 |
| 非根用户 | 降低容器权限 |
总结
在本教程结束时,你将对如何运行 Docker 镜像、管理 Docker 容器以及利用高级容器管理技术更高效地部署和管理应用程序有扎实的理解。从本教程中学到的知识将使你能够在软件开发和部署过程中利用 Docker 的优势,如一致性、可扩展性和可移植性。



