内部培训
02 第2周D7 Docker

D7 作业:容器化一个小服务 + compose 编排

D7 作业:容器化一个小服务 + compose 编排

目标

  • 验证:能写 Dockerfile、构建镜像、跑容器、用 compose 拉起多服务。

场景

  • 本地开发机(Docker 已装好,D1 已装)。

任务

任务 1:容器化一个极简 HTTP 服务

新建 ~/lab/hellodocker/,内容:

# main.py
from http.server import BaseHTTPRequestHandler, HTTPServer

class H(BaseHTTPRequestHandler):
    def do_GET(self):
        self.send_response(200)
        self.end_headers()
        self.wfile.write(b"hello from docker container\n")
    def log_message(self, *args):
        pass

HTTPServer(("0.0.0.0", 8000), H).serve_forever()
# Dockerfile
FROM python:3.12-slim
WORKDIR /app
COPY main.py .
EXPOSE 8000
CMD ["python", "main.py"]
docker build -t hellodocker:v1 .
docker run -d --name hd1 -p 8000:8000 hellodocker:v1
curl -s http://localhost:8000          # 应输出 hello from docker container
docker logs hd1                        # 看日志
docker exec -it hd1 ls /app            # 进容器看文件
docker stop hd1 && docker rm hd1       # 清理

任务 2:镜像分层验证(思考题)

  • 修改 main.py 里一行文字,重新 docker build,观察第二次构建快在哪一步
  • 回答:为什么"先 COPY 依赖再 COPY 代码"能加速构建?

任务 3:compose 拉起 web + db

  • 用课程.md 第 5 节的 compose 示例(web 用你的 hellodocker 镜像,db 用 postgres:16),docker compose up -d
  • 验证:docker compose ps 显示两个容器;docker exec -it <web容器> bash 里能 ping db 或访问 db 服务名。
  • 完事后 docker compose down 清理(数据卷可保留)。

验收标准(讲师核验用)

  • 任务 1:curl 返回"hello from docker container"
  • 任务 1:docker logsdocker exec 操作成功
  • 任务 2:能说出缓存加速原理(依赖层未变 → 直接复用)
  • 任务 3:compose 两个容器同时运行,web 能访问 db 服务名

提交方式

  • 代码与回答放 docs/training/学员/<姓名>/D7/,按 D6 流程提交 PR,中文提交信息,如:D7 作业:容器化与compose(姓名)

参考

  • 课程.md 第 2、3、5 节
  • 学习网站.md → D7 分组

On this page