Docker Dockerfile 详解教程案例

Dockerfile 是一个包含了一系列用于构建 Docker 镜像的指令的文本文件。通过 Dockerfile,你可以自定义你的镜像内容,包括安装软件、设置环境变量、添加文件等。

1. Dockerfile 基础

1.1 指令概览

以下是一些常用的 Dockerfile 指令:

  • FROM:设置基础镜像。
  • RUN:执行命令。
  • CMD:容器启动时执行的命令。
  • ENTRYPOINT:容器启动时执行的入口点。
  • COPY:从构建上下文复制文件到镜像。
  • ADD:从构建上下文添加文件到镜像,可以解压缩。
  • ENV:设置环境变量。
  • WORKDIR:设置工作目录。
  • USER:设置用户。
  • VOLUME:定义挂载点。
  • EXPOSE:声明端口。

1.2 示例

# 使用官方的基础镜像
FROM ubuntu:20.04

# 设置环境变量
ENV DEBIAN_FRONTEND noninteractive

# 更新软件包列表并安装软件
RUN apt-get update && apt-get install -y \
    nginx \
    mysql \
    php

# 设置工作目录
WORKDIR /var/www/html

# 复制当前目录下的文件到容器内
COPY . /var/www/html

# 声明容器运行时监听的端口
EXPOSE 80

# 定义启动时执行的命令
CMD ["nginx", "-g", "daemon off;"]

2. 实战案例

2.1 构建 Python Web 应用的镜像

# 使用官方的 Python 3.8 镜像
FROM python:3.8

# 设置工作目录
WORKDIR /app

# 复制 requirements.txt 并安装依赖
COPY requirements.txt /app/
RUN pip install --no-cache-dir -r requirements.txt

# 复制应用文件
COPY . /app

# 声明端口
EXPOSE 8000

# 定义启动命令
CMD ["python", "app.py"]

2.2 构建 Node.js 应用的镜像

# 使用官方的 Node.js 14 镜像
FROM node:14

# 设置工作目录
WORKDIR /usr/src/app

# 复制 package.json 和 package-lock.json
COPY package*.json ./

# 安装依赖
RUN npm ci --only=production

# 复制应用文件
COPY . .

# 声明端口
EXPOSE 8080

# 定义启动命令
CMD [ "node", "server.js" ]

2.3 构建 Java 应用的镜像

# 使用官方的 OpenJDK 11 镜像
FROM openjdk:11-jre-slim

# 设置工作目录
WORKDIR /app

# 复制应用文件
COPY . /app

# 定义环境变量
ENV JAVA_OPTS="-Xmx512m -Xms256m"

# 定义启动命令
CMD ["java", "${JAVA_OPTS}", "-jar", "app.jar"]

2.4 使用多阶段构建优化镜像

# 构建阶段
FROM maven:3.6.3-jdk-11 AS build
WORKDIR /app
COPY src ./src
COPY pom.xml .
RUN mvn -f pom.xml clean package

# 运行阶段
FROM openjdk:11-jre-slim
WORKDIR /app
COPY --from=build /app/target/*.jar ./app.jar
EXPOSE 8080
CMD ["java", "-jar", "app.jar"]

3. 构建和运行

3.1 构建镜像

在包含 Dockerfile 的目录下运行以下命令:

docker build -t my-image .

3.2 运行容器

使用以下命令运行容器:

docker run -d -p 4000:80 my-image

4. 最佳实践

  • 最小化基础镜像:使用更小的基础镜像可以减少镜像体积,加快构建速度。
  • 利用缓存:合理安排 Dockerfile 结构,使得层的变化最小化,充分利用缓存。
  • 多阶段构建:使用多阶段构建可以减小最终镜像的体积,分离构建依赖和运行环境。
  • 清理不必要的文件:在构建过程中及时清理不必要的文件和缓存,减小镜像体积。
  • 明确指令:使用明确的指令,避免使用别名,如使用 yum install 而不是 yum -y install

通过以上内容,你应该能够理解 Dockerfile 的基本结构和指令,并能够编写自己的 Dockerfile 来构建 Docker 镜像。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

努力的小T

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值