Docker之Dockerfile文件常用配置说明及快速入门

Docker之Dockerfile文件常用配置说明及快速入门

前面说到了Docker快速搭建日常开发的环境,那么我们要构建自己的镜像时需要用到Dockerfile,今天继续来复习一下Dockerfile,快速入门Dockerfile并构建自己的镜像。

什么是Dockerfile

Dockerfile是一个文本文件,包含了一系列用于自动化构建Docker镜像的指令。通过Dockerfile,您可以定义镜像的内容、环境和运行命令。

Dockerfile基础指令

FROM: 指定基础镜像。
RUN: 在镜像构建过程中运行命令。
COPY/ADD: 将文件和目录复制到镜像中。
WORKDIR: 设置工作目录。
CMD/ENTRYPOINT: 指定容器启动时执行的命令。
EXPOSE: 指定容器监听的端口。
ENV: 设置环境变量。

FROM

FROM指令指定了用作基础镜像的基本操作系统镜像。这是Dockerfile中的第一条指令,它代表了您的新镜像的起点。例:

1
FROM ubuntu:latest
RUN

RUN指令用于在容器中执行命令。这可以是任何有效的shell命令,例如安装软件包、更新系统或者下载文件。例:

1
RUN apt-get update && apt-get install -y python3
COPY

COPY指令将文件从构建上下文(例如主机文件系统)复制到镜像中的目标路径。例:

1
COPY target/myapp.jar /app/   # COPY /path/to/src /path/to/destination
ADD

ADD指令类似于COPY,但它更加功能强大,可以解压缩本地文件、从URL下载文件等。一般情况下,推荐使用COPY。例:

1
ADD http://example.com/big.tar.xz /usr/src/things/
WORKDIR

WORKDIR指令用于设置后续命令的工作目录。如果目录不存在,将会被创建。例:

1
WORKDIR /path/to/directory
EXPOSE

EXPOSE指令告诉Docker该容器将在运行时侦听指定的网络端口,该指令仅是一个元数据,它并不会自动在宿主机上打开或映射端口。例:

1
EXPOSE 8080
CMD

CMD指令提供了容器启动后要运行的默认命令。这可以是任何可执行命令或脚本,适用于定义容器启动时要运行的默认应用程序或服务。例:

1
CMD ["python", "app.py"]
ENTRYPOINT

ENTRYPOINT指令允许您配置一个容器使得它可像可执行文件一样运行。这样可以让容器在启动时像一个可执行程序一样运行,适用于提供容器运行时所需的环境变量,如配置信息、认证凭据等。例:

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

编写一个简单的Dockerfile

以下是一个用于构建Java应用程序的Dockerfile示例:

1
2
3
4
5
FROM openjdk:11
WORKDIR /app
COPY target/myapp.jar /app/
EXPOSE 8080
CMD ["java", "-jar", "myapp.jar"]

优化Dockerfile

Dockerfile最佳实践

  • 减少镜像层次
  • 清理不必要的文件和依赖
  • 多阶段构建
多阶段构建示例

使用多阶段构建构建Java应用程序,可以帮助我们优化镜像、减小镜像体积,并且只包含生产环境所需的组件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 阶段1:准备构建所需的依赖
FROM maven:3.8.1-jdk-11 AS builder
WORKDIR /build
COPY pom.xml .
RUN mvn dependency:go-offline

# 阶段2:编译、测试和打包应用程序
COPY src /build/src
RUN mvn package

# 阶段3:准备运行时环境
FROM adoptopenjdk:11-jre-hotspot

# 拷贝构建阶段中打包好的jar文件到生产镜像中
COPY --from=builder /build/target/my-application.jar /app/my-application.jar

# 设置工作目录
WORKDIR /app

# 设置容器启动时的默认命令
CMD ["java", "-jar", "my-application.jar"]

多阶段构建可用于优化镜像大小和构建时间。以下是一个多阶段构建的示例,用于构建Vue.js应用程序的镜像:

1
2
3
4
5
6
7
8
9
10
11
12
# 阶段1:构建Vue应用
FROM node:14 as builder
WORKDIR /app # 切换到app目录
COPY . . # 将当前目录的文件复制到app文件夹下
RUN npm config set registry https://registry.npmmirror.com
RUN npm install
RUN npm run build

# 阶段2:创建生产镜像
FROM nginx:alpine
COPY --from=builder /app/dist /usr/share/nginx/html # 从上一阶段复制编译好的文件到当前镜像中
EXPOSE 80

构建镜像

当编写好我们的Dockerfile后,就可以执行命令来构建咱们自己的镜像了,在Dockerfile目录直接执行docker build .即可。我们也可以指定文件,

1
docker build -f /path/to/Dockerfile .

Dockerfile是构建可靠、可重复、可管理的Docker镜像的关键。使用.dockerignore文件排除敏感信息,通过安全的方式传递机密信息。做好镜像的版本控制和镜像标签,定期清理不再使用的镜像

Docker之Dockerfile文件常用配置说明及快速入门

https://blogs.52fx.biz/posts/3878550165.html

作者

eyiadmin

发布于

2024-02-13

更新于

2024-05-31

许可协议

评论