简介
本全面的 Docker 教程为开发者和 IT 专业人员提供有关容器技术的基础知识。学习如何在 Ubuntu 上安装 Docker,理解核心概念,并利用容器化在不同计算环境中实现一致的应用程序部署。
Docker 基础
Docker 技术简介
Docker 是一个强大的容器技术平台,它彻底改变了软件部署和虚拟化方式。作为一个开源工具,Docker 使开发者能够在不同的计算环境中一致地打包、分发和运行应用程序。
Docker 的核心概念
什么是 Docker?
Docker 是一种轻量级虚拟化技术,它允许开发者使用容器来创建、部署和运行应用程序。与传统虚拟机不同,容器共享主机系统的内核,这使得它们的效率更高,启动速度更快。
容器架构
graph TD
A[Docker 引擎] --> B[容器运行时]
A --> C[Docker 镜像]
B --> D[应用容器]
C --> D
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=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] $(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 安装
docker run hello-world
## 列出正在运行的容器
docker ps
## 列出所有容器
docker ps -a
Docker 的优势
Docker 为现代软件开发带来了显著的好处:
- 开发和生产环境一致
- 应用程序部署更快
- 资源利用率提高
- 依赖管理简化
- 可扩展性和可移植性增强
创建 Docker 镜像
理解 Docker 镜像
Docker 镜像是用于创建容器的只读模板。它们包含运行应用程序所需的应用代码、运行时环境、库、环境变量和配置文件。
Dockerfile 基础
Dockerfile 是一个文本文件,其中包含构建 Docker 镜像的指令。每条指令都会在镜像中创建一个新层。
Dockerfile 结构
graph TD
A[基础镜像] --> B[安装依赖项]
B --> C[复制应用代码]
C --> D[设置环境变量]
D --> E[定义启动命令]
常见的 Dockerfile 指令
| 指令 | 用途 | 示例 |
|---|---|---|
| FROM | 指定基础镜像 | FROM ubuntu:22.04 |
| RUN | 执行命令 | RUN apt-get update |
| COPY | 将文件复制到镜像中 | COPY./app /application |
| WORKDIR | 设置工作目录 | WORKDIR /application |
| CMD | 定义默认命令 | CMD ["python", "app.py"] |
创建一个简单的 Python Web 应用镜像
示例 Dockerfile
## 使用官方 Python 运行时作为基础镜像
FROM python:3.9-slim
## 设置工作目录
WORKDIR /app
## 复制需求文件
COPY requirements.txt.
## 安装依赖项
RUN pip install --no-cache-dir -r requirements.txt
## 复制应用代码
COPY..
## 暴露端口
EXPOSE 5000
## 定义启动命令
CMD ["python", "app.py"]
构建 Docker 镜像
## 使用标签构建镜像
docker build -t hello-world-app.
## 列出本地镜像
docker images
## 运行创建的镜像
docker run -p 5000:5000 hello-world-app
镜像管理命令
## 删除特定镜像
docker rmi hello-world-app
## 删除所有未使用的镜像
docker image prune
## 从 Docker Hub 拉取镜像
docker pull ubuntu:22.04
最佳实践
- 使用最小化的基础镜像
- 减少层数
- 避免安装不必要的软件包
- 使用多阶段构建以生成更小的镜像
- 高效利用构建缓存
容器管理
容器生命周期概述
Docker 容器具有从创建到终止的定义明确的生命周期,包含多个状态。了解这些状态对于有效的容器管理至关重要。
stateDiagram-v2
[*] --> 创建
创建 --> 运行
运行 --> 暂停
暂停 --> 运行
运行 --> 停止
停止 --> 删除
删除 --> [*]
基本容器操作
容器管理命令
| 命令 | 功能 | 示例 |
|---|---|---|
| docker create | 创建一个容器 | docker create nginx |
| docker start | 启动一个容器 | docker start container_id |
| docker stop | 停止一个正在运行的容器 | docker stop container_id |
| docker restart | 重启一个容器 | docker restart container_id |
| docker rm | 删除一个容器 | docker rm container_id |
运行容器
## 在前台运行容器
docker run nginx
## 在后台运行容器
docker run -d nginx
## 运行容器并进行端口映射
docker run -p 8080:80 nginx
## 以自定义名称运行容器
docker run --name web-server nginx
容器检查与监控
## 列出正在运行的容器
docker ps
## 列出所有容器
docker ps -a
## 查看容器日志
docker logs container_id
## 检查容器详细信息
docker inspect container_id
## 监控容器资源使用情况
docker stats
容器网络
## 列出 Docker 网络
docker network ls
## 创建自定义网络
docker network create mynetwork
## 将容器连接到网络
docker network connect mynetwork container_id
高级容器管理
容器资源限制
## 限制 CPU 和内存
docker run -d \
--cpus="1.5" \
--memory="512m" \
nginx
容器扩展
## 创建多个容器实例
docker run -d -p 8001:80 nginx
docker run -d -p 8002:80 nginx
docker run -d -p 8003:80 nginx
容器部署策略
持久数据管理
## 创建卷
docker volume create myvolume
## 将卷挂载到容器
docker run -v myvolume:/app/data nginx
环境配置
## 设置环境变量
docker run -e DATABASE_URL=localhost nginx
总结
Docker 通过启用轻量级、可移植的容器来彻底改变软件开发,这些容器简化了应用程序部署。通过掌握 Docker 的核心组件、安装过程和基本命令,开发者可以以最小的开销和最大的灵活性创建更高效、可扩展和可重复的软件环境。



