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 logs、docker exec操作成功 - 任务 2:能说出缓存加速原理(依赖层未变 → 直接复用)
- 任务 3:compose 两个容器同时运行,web 能访问 db 服务名
提交方式
- 代码与回答放
docs/training/学员/<姓名>/D7/,按 D6 流程提交 PR,中文提交信息,如:D7 作业:容器化与compose(姓名)。
参考
- 课程.md 第 2、3、5 节
- 学习网站.md → D7 分组