Docker 从入门到实战指南

目录

  1. Docker 核心概念
  2. Docker 安装与配置
  3. 镜像管理
  4. 容器操作
  5. 数据卷与持久化
  6. 网络管理
  7. Dockerfile 编写
  8. Docker Compose
  9. 实战案例

1. Docker 核心概念

1.1 核心组件

  • 镜像(Image)
    只读模板,包含运行环境和应用程序(如 ubuntu:22.04nginx:latest)。
  • 容器(Container)
    镜像的运行实例,拥有独立的文件系统、网络和进程。
  • 仓库(Registry)
    存储镜像的服务,默认官方仓库为 Docker Hub

1.2 架构

  • Docker Daemon:后台服务,管理容器和镜像。
  • Docker Client:命令行工具,与 Daemon 交互。
  • Dockerfile:定义镜像构建步骤的脚本。

2. Docker 安装与配置

2.1 安装 Docker

# Ubuntu/Debian
sudo apt update
sudo apt install docker.io
sudo systemctl enable --now docker

# CentOS/RHEL
sudo yum install docker
sudo systemctl enable --now docker

# 验证安装
docker --version
docker info

2.2 配置镜像加速(国内用户)

编辑 /etc/docker/daemon.json

{
  "registry-mirrors": [
    "https://registry.docker-cn.com",
    "https://mirror.baidubce.com"
  ]
}

重启服务:

sudo systemctl restart docker

3. 镜像管理

3.1 拉取镜像

docker pull ubuntu:22.04      # 拉取官方镜像
docker pull nginx:alpine      # 拉取特定版本

3.2 查看镜像

docker images                 # 列出本地镜像
docker image ls -a            # 显示所有镜像(含中间层)

3.3 删除镜像

docker rmi ubuntu:22.04       # 删除单个镜像
docker image prune            # 清理未使用的镜像

4. 容器操作

4.1 启动容器

# 启动交互式容器(退出后容器停止)
docker run -it --name my_ubuntu ubuntu:22.04 /bin/bash

# 启动后台容器
docker run -d --name my_nginx -p 8080:80 nginx:alpine

4.2 管理容器

docker ps                     # 查看运行中的容器
docker ps -a                  # 查看所有容器(含已停止)
docker stop my_nginx          # 停止容器
docker start my_nginx         # 启动已停止的容器
docker rm my_nginx            # 删除容器

4.3 进入容器

docker exec -it my_nginx /bin/sh   # 进入运行中的容器

5. 数据卷与持久化

5.1 挂载主机目录

# 将主机 `/data` 挂载到容器的 `/app`
docker run -v /data:/app -d my_app

5.2 创建命名卷

docker volume create my_volume
docker run -v my_volume:/data -d my_app

5.3 查看数据卷

docker volume ls
docker volume inspect my_volume

6. 网络管理

6.1 查看网络

docker network ls
docker network inspect bridge

6.2 自定义网络

docker network create my_network
docker run --network=my_network -d my_app

7. Dockerfile 编写

7.1 基础示例

# 使用官方 Python 镜像
FROM python:3.9-slim

# 设置工作目录
WORKDIR /app

# 复制依赖文件并安装
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

# 复制应用代码
COPY . .

# 暴露端口
EXPOSE 8000

# 启动命令
CMD ["gunicorn", "--bind", "0.0.0.0:8000", "app:app"]

7.2 构建镜像

docker build -t my_python_app:1.0 .

8. Docker Compose

8.1 编写 docker-compose.yml

version: '3.8'

services:
  web:
    image: nginx:alpine
    ports:
      - "80:80"
    volumes:
      - ./html:/usr/share/nginx/html

  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: secret
    volumes:
      - mysql_data:/var/lib/mysql

volumes:
  mysql_data:

8.2 常用命令

docker-compose up -d      # 启动服务
docker-compose down       # 停止并删除容器
docker-compose logs       # 查看日志

9. 实战案例

9.1 部署 WordPress

# docker-compose.yml
version: '3.8'

services:
  wordpress:
    image: wordpress:latest
    ports:
      - "8080:80"
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_USER: root
      WORDPRESS_DB_PASSWORD: secret
    volumes:
      - wordpress_data:/var/www/html

  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: secret
    volumes:
      - mysql_data:/var/lib/mysql

volumes:
  wordpress_data:
  mysql_data:

启动服务:

docker-compose up -d

10. 调试与排错

# 查看容器日志
docker logs my_container

# 检查容器元数据
docker inspect my_container

# 查看资源使用
docker stats

附:学习资源

提示

  • 容器应保持无状态,重要数据通过卷持久化。
  • 优先使用 Docker Compose 管理多容器应用。
  • 定期清理未使用的镜像和容器以节省空间:
    docker system prune -a