Dockerfile入门与实战
一、Dockerfile基础
1. 什么是Dockerfile
Dockerfile是一个文本文件,包含了一系列指令,用来自动化构建Docker镜像。
2. 完整的Dockerfile示例
来看一个实际的Node.js应用的Dockerfile,这是最常见的结构:
# 1. 指定基础镜像
FROM node:20-alpine
# 2. 设置工作目录
WORKDIR /app
# 3. 复制依赖文件(先复制,利用缓存层)
COPY package*.json ./
# 4. 安装依赖
RUN npm install --production
# 5. 复制源代码
COPY . .
# 6. 声明端口
EXPOSE 3000
# 7. 设置启动命令
CMD ["node", "server.js"]
3. 核心概念:镜像分层
Dockerfile中每一条指令都会创建一个新的镜像层。这是理解Docker的关键:
FROM、RUN、COPY、ADD这类指令会生成新层- 层可以被缓存——如果指令和上下文没变,Docker直接复用缓存,构建极快
- 这也是为什么要把
COPY package.json和RUN npm install放在COPY . .之前:依赖不常变,代码经常变,这样改代码时不需要重新安装依赖
二、Windows主机Docker实战
1. 准备项目文件

(1) main.py
from fastapi import FastAPI
import uvicorn
app = FastAPI()
@app.get("/")
def read_root():
return {"Hello": "World"}
if __name__ == "__main__":
uvicorn.run(app, host="0.0.0.0", port=8000)
(2) requirements.txt
fastapi
uvicorn
(3) Dockerfile
FROM python:3.13-slim
WORKDIR /app
COPY . .
RUN pip install -r requirements.txt
EXPOSE 8000
CMD ["python3", "main.py"]
2. Dockerfile文件讲解
# 指定基础镜像,希望当前创建的基础镜像中自带python
FROM python:3.13-slim
# 设置工作目录
WORKDIR /app
# 将代码文件拷贝到镜像内的工作目录
# 第一个.表示当前目录,第二个.代表镜像内的当前工作目录,即/app
COPY . .
# 安装依赖
RUN pip install -r requirements.txt
# 声明镜像提供的端口
EXPOSE 8000
# CMD是容器运行时的默认启动命令,每当容器启动时,容器内部会自动执行这个命令
CMD ["python3", "main.py"]
三、构建镜像
1. 使用命令构建
文件准备就绪后,开始准备构建镜像。
# -t 后面是给构建的镜像起的名字
# . 表示在当前文件夹中构建
docker build -t docker_test .
构建成功:

可以直接在Docker Desktop中看到构建的镜像,或使用docker images命令查看。

2. 常见问题处理
问题1:终端运行命令失败
使用命令构建时,若在VSCode中的终端运行命令失败,建议改到cmd中运行命令,切换到文件对应的目录中。
示例:

问题2:拉取基础镜像失败
若在构建镜像时报错:
=> ERROR [internal] load metadata for docker.io/library/python:3.13-slim
这表示拉取python:3.13-slim镜像失败,这是因为网络问题导致的,需要配置成国内的镜像源。
配置方法:
{
"ipv6": false,
"registry-mirrors": [
"https://docker.1panel.live",
"https://docker.m.daocloud.io",
"https://hub-mirror.c.163.com",
"https://mirror.baidubce.com"
]
}

配置后,可以直接拉取镜像,查看网络问题是否解决:
docker pull python:3.13-slim
成功示例:

四、运行容器
1. 创建并运行容器
使用docker run命令基于这个镜像创建一个容器并运行起来:
docker run -d -p 8000:8000 docker_test
2. 验证运行结果
在浏览器中可以看到:

五、推送镜像到Docker Hub
1. 注册Docker Hub账号
首先需要在Docker Hub中注册账号。
网址:https://hub.docker.com
2. 登录Docker Hub
使用以下命令进行登录:
docker login

3. 构建并推送镜像
# 填写我的用户名giniclark
docker build -t giniclark/docker_test .
# 推送
docker push giniclark/docker_test
4. 查看推送结果
可以看到仓库地址:

可以看到已经成功推送上来了:


1602

被折叠的 条评论
为什么被折叠?



