什么是 Dockerfile?
一个文本文件,包含一系列指令,告诉 Docker 如何构建镜像
类似“菜谱”:需要什么原料(基础镜像)、复制什么文件、运行什么命令
核心指令(先学这 5 个):
| 指令 | 作用 | 示例 |
|---|---|---|
FROM | 指定基础镜像(起点) | FROM ubuntu:22.04 |
WORKDIR | 设置工作目录 | WORKDIR /app |
COPY | 复制文件到镜像 | COPY . /app |
RUN | 构建时执行的命令(安装软件) | RUN apt update && apt install -y curl |
CMD | 容器启动时执行的命令 | CMD ["python", "app.py"] |
镜像层(Layer)原理:
每条指令会创建一个新层(Layer)
层可复用(不变的层会被缓存)
更改频率高的指令应放在 Dockerfile 后面
注意: 最后有一个点 第 14 步操作:制作一个简单的 Python Web 镜像
1. 创建项目目录
cd ~ mkdir my-python-app cd my-python-app
2. 创建一个简单的 Python Web 服务
cat > app.py << 'EOF' from http.server import HTTPServer, BaseHTTPRequestHandler
class Handler(BaseHTTPRequestHandler):
def do_GET(self):
self.send_response(200)
self.send_header('Content-type', 'text/html')
self.end_headers()
self.wfile.write(b'<h1>Hello from my Docker image!</h1>')
if __name__ == '__main__':
print('Starting server on port 8000...')
HTTPServer(('0.0.0.0', 8000), Handler).serve_forever()
EOF
3. 创建 Dockerfile
cat > Dockerfile << 'EOF' # 使用官方 Python 基础镜像
FROM python:3.9-slim
# 设置工作目录
WORKDIR /app
# 复制当前目录所有文件到镜像的 /app 目录
COPY . /app
# 容器启动时运行这个命令
CMD ["python", "app.py"]
EOF
4. 构建镜像
docker build -t my-python-app .
. 表示当前目录5. 查看构建好的镜像
docker images | grep my-python-app
6. 运行容器
docker run -d --name my-app -p 8000:8000 my-python-app
7. 测试访问
curl http://localhost:8000
