# ===== CodeLab: Docker 容器入门 =====
# 来源: https://aoerliang.dpdns.org/articles/tool-docker
# 以下代码片段按文章出现顺序拼接, 共 7 段

# ----- 片段 1 (bash) -----
# 验证安装
docker --version

# 运行一个测试容器:hello-world
docker run hello-world

# 运行 nginx,映射端口 8080 -> 80
docker run -d -p 8080:80 --name web nginx

# ----- 片段 2 (bash) -----
docker pull mysql:8.0    # 拉取指定版本镜像
docker images            # 查看本地镜像
docker rmi mysql:8.0     # 删除镜像
docker image prune       # 清理悬空镜像

# 容器操作
docker ps                # 查看运行中的容器
docker ps -a             # 查看所有容器
docker stop web          # 停止
docker rm web            # 删除容器

# ----- 片段 3 (bash) -----
# Dockerfile
FROM python:3.12-slim        # 基础镜像
WORKDIR /app                 # 工作目录
COPY requirements.txt .      # 复制依赖清单
RUN pip install -r requirements.txt  # 安装依赖
COPY . .                     # 复制项目代码
EXPOSE 8000                  # 声明端口
CMD ["python", "app.py"]     # 启动命令

# ----- 片段 4 (bash) -----
docker build -t myapp:1.0 .
docker run -d -p 8000:8000 --name app myapp:1.0

# ----- 片段 5 (bash) -----
# 匿名卷:容器删除后数据仍在
docker run -d -p 3306:3306 \
  -v mysql-data:/var/lib/mysql \
  -e MYSQL_ROOT_PASSWORD=secret \
  mysql:8.0

# 挂载宿主机目录(适合开发,改代码即时生效)
docker run -d -p 8000:8000 -v $(pwd):/app myapp:1.0

# ----- 片段 6 (bash) -----
# docker-compose.yml
services:
  web:
    build: .
    ports: ["8000:8000"]
    depends_on: [db]
  db:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: secret
    volumes: ["mysql-data:/var/lib/mysql"]
volumes:
  mysql-data:

# ----- 片段 7 (bash) -----
docker compose up -d   # 一键启动所有服务
docker compose down    # 停止并清理
