2-Dockerfile入门与实战

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的关键:

  • FROMRUNCOPYADD这类指令会生成新层
  • 层可以被缓存——如果指令和上下文没变,Docker直接复用缓存,构建极快
  • 这也是为什么要把COPY package.jsonRUN 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. 查看推送结果

可以看到仓库地址:

在这里插入图片描述

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

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值