dockerfile

Dockerfile 是一个文本文件,包含了一系列指令,用于构建自定义 Docker 镜像。通过 Dockerfile,你可以定义镜像的基础环境、安装软件、配置环境变量、暴露端口等操作。

构建自定义镜像

Dockerfile 是 Docker 镜像的构建脚本,它定义了镜像的构建步骤。Docker 的构建器(Builder)会根据 Dockerfile 中的指令逐步构建镜像。最终生成的镜像会包含运行应用程序所需的所有依赖和配置。

常见指令

https://docs.docker.com/reference/dockerfile

FROM

指定基础镜像。所有 Dockerfile 都必须以 FROM 指令开始。

1FROM ubuntu:20.04

RUN

在镜像构建过程中执行命令。通常用于安装软件包或配置环境。

1RUN apt-get update && apt-get install -y nginx

CMD

指定容器启动时默认执行的命令或参数。一个 Dockerfile 中只能有一个 CMD 指令。

1CMD ["nginx", "-g", "daemon off;"]

LABEL

为镜像添加元数据(如作者、版本等)。

1LABEL maintainer="your-email@example.com"
2LABEL version="1.0"

EXPOSE

声明容器运行时监听的端口。

1EXPOSE 80

ENV

设置环境变量。

1ENV NGINX_VERSION 1.18.0

ADD

将文件或目录从主机复制到镜像中,支持自动解压 tar 文件。

1ADD app.tar.gz /var/www/html

COPY

将文件或目录从主机复制到镜像中。与 ADD 类似,但不支持自动解压。

1COPY app /var/www/html

ENTRYPOINT

指定容器启动时的固定命令。与 CMD 不同,ENTRYPOINT 不会被覆盖。

1ENTRYPOINT ["nginx", "-g", "daemon off;"]

VOLUME

声明数据卷,用于持久化数据。

1VOLUME /var/log/nginx

USER

指定运行容器时的用户和用户组。

1USER www-data

WORKDIR

设置工作目录。后续的 RUNCMDENTRYPOINT 等指令都会在该目录下执行。

1WORKDIR /app

ARG

定义构建参数,可以在构建时通过 --build-arg 传递。

1ARG APP_VERSION=1.0

构建

使用 docker build 命令可以根据 Dockerfile 构建自定义镜像。

构建命令

1docker build -f Dockerfile -t 镜像名:标签 .
  • -f Dockerfile:指定 Dockerfile 文件路径(默认为当前目录下的 Dockerfile,可省略)。

  • -t 镜像名:标签:指定镜像的名称和标签。

  • .:指定构建上下文路径(通常是 Dockerfile 所在的目录)。

示例

1# 使用 Python 3.9 作为基础镜像
2FROM python:3.9-slim
3
4# 设置工作目录
5WORKDIR /app
6
7# 复制 requirements.txt 到工作目录
8COPY requirements.txt .
9
10# 安装依赖
11RUN pip install --no-cache-dir -r requirements.txt
12
13# 复制应用代码到工作目录
14COPY . .
15
16# 暴露端口
17EXPOSE 5000
18
19# 设置环境变量
20ENV FLASK_APP=app.py
21
22# 启动应用
23CMD ["flask", "run", "--host=0.0.0.0"]

构建

1docker build -t my-flask-app:v1.0 .

运行

1docker run -d -p 5000:5000 my-flask-app:v1.0