Build, Ship, and Run
Any App, Anywhere

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上。

开始学习之旅

1. Docker 核心概念

理解 Docker 的关键在于理解"集装箱"的比喻。Docker 将软件及其依赖打包成标准化的单元,称为容器。

镜像 (Image)

只读的模板。例如:一个镜像可以包含一个完整的 Ubuntu 操作系统环境,里面仅安装了 Apache 或用户的其他应用程序。

容器 (Container)

镜像的运行实例。可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。

仓库 (Repository)

集中存放镜像文件的场所。最大的公开仓库是 Docker Hub。

Client docker build docker pull docker run Docker Host (Daemon) Images Containers Registry
Docker 架构图:客户端发送指令给守护进程,守护进程管理镜像与容器,并与远程仓库交互。
Virtual Machines App A App B Guest OS Guest OS Hypervisor Infrastructure Containers App A App B Docker Engine Infrastructure
容器 vs 虚拟机:容器共享主机内核,更轻量;虚拟机需要独立的 Guest OS,更笨重。

2. 安装与配置

Windows 安装指南

  1. 下载 Docker Desktop for Windows 安装包。
  2. 确保 Windows 开启了 Hyper-V 或安装了 WSL 2(推荐)。
  3. 运行安装程序,按照提示完成安装。
  4. 重启电脑后,启动 Docker Desktop。
注意:WSL 2 性能更好,建议在设置中开启 "Use the WSL 2 based engine"。

macOS 安装指南

  1. 下载 Docker Desktop for Mac (.dmg 文件)。
  2. 注意选择对应芯片版本(Intel 或 Apple Silicon/M1/M2)。
  3. 拖拽 Docker 图标到 Applications 文件夹。
  4. 启动 Docker,顶部菜单栏出现鲸鱼图标即成功。

Linux (Ubuntu) 安装指南

# 1. 更新包索引
sudo apt-get update

# 2. 安装依赖
sudo apt-get install ca-certificates curl gnupg

# 3. 添加官方 GPG Key
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

# 4. 安装 Docker Engine
sudo apt-get install docker-ce docker-ce-cli containerd.io

3. 基础命令实操

掌握以下命令,你就能应对 80% 的日常工作。

镜像操作

# 拉取镜像
docker pull nginx:latest

# 查看本地镜像
docker images

# 删除镜像
docker rmi <image_id>

容器操作

# 启动容器 (后台运行, 映射端口)
docker run -d -p 80:80 --name my-nginx nginx

# 查看运行中的容器
docker ps

# 进入容器内部
docker exec -it my-nginx bash

# 停止容器
docker stop my-nginx

# 删除容器
docker rm my-nginx

小测验:如何查看所有容器(包括已停止的)?

docker ps
docker ps -a
docker images

4. Dockerfile 最佳实践

Dockerfile 是一个文本文件,包含了一条条构建镜像的指令。

Image Layers (Union FS) Base Layer (Ubuntu) Add Python Copy Code Container Layer (Writable) Read Only Read / Write
分层存储:镜像层是只读的,容器启动时会在顶部添加一个可写层。

示例 Dockerfile

# 1. 选择基础镜像 (尽量使用 alpine 等小镜像)
FROM python:3.9-alpine

# 2. 设置工作目录
WORKDIR /app

# 3. 复制依赖文件并安装 (利用缓存)
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

# 4. 复制源代码
COPY . .

# 5. 暴露端口
EXPOSE 5000

# 6. 启动命令
CMD ["python", "app.py"]

5. 网络模式

Bridge (Default) docker0 Bridge Host Host Network Stack None No Network
Bridge: 默认模式,通过虚拟网桥通信;Host: 共享主机网络栈,性能高但端口冲突;None: 无网络。

6. Docker Compose

使用 YAML 文件定义多容器应用。一键启动所有服务。

Docker Compose Project Web App Database Network
Compose 允许定义服务之间的依赖和网络连接。
version: '3'
services:
  web:
    build: .
    ports:
      - "5000:5000"
  redis:
    image: "redis:alpine"

常用命令:

  • docker-compose up -d : 后台启动所有服务
  • docker-compose down : 停止并删除容器、网络
  • docker-compose logs -f : 查看日志

7. 生产环境注意事项

安全 (Security)

  • 不要以 root 用户运行容器。
  • 使用可信的官方镜像。
  • 定期扫描镜像漏洞。

优化 (Optimization)

  • 使用多阶段构建 (Multi-stage builds) 减小镜像体积。
  • 合理利用构建缓存。
  • 限制容器资源 (CPU/Memory)。