目录
Dockerfile 介绍
Dockerfile 是用于定义 Docker 镜像构建过程的文本文件。它包含了一系列指令,这些指令按照顺序执行以创建一个自定义的 Docker 镜像。
常用指令
指令 | 说明 | 示例 |
---|---|---|
FROM | 指定基础镜像,所有 Dockerfile 必须以 FROM 开头。 | FROM ubuntu:20.04 |
LABEL | 设置镜像元数据标签,替代已废弃的 MAINTAINER 指令。 | LABEL maintainer="John Doe <john.doe@example.com>" |
RUN | 执行命令并创建新的层,常用来安装软件包。 | RUN apt-get update && apt-get install -y curl vim && rm -rf /var/lib/apt/lists/* |
COPY | 将文件从主机复制到镜像中,仅做简单复制操作。 | COPY ./app /usr/src/app/ |
ADD | 类似于 COPY ,但还支持远程 URL 和自动解压 tar 文件。 | ADD http://example.com/file.tar.gz /usr/src/file.tar.gz |
WORKDIR | 设置工作目录,即后续命令的工作路径。 | WORKDIR /usr/src/app |
ENV | 设置环境变量,可以在后续指令中引用。 | ENV APP_HOME=/usr/src/app NODE_ENV=production |
EXPOSE | 声明容器运行时打算使用的网络端口。 | EXPOSE 8080 |
CMD | 定义容器启动时要执行的命令,默认参数可以被命令行覆盖。 | CMD ["node", "server.js"] |
ENTRYPOINT | 更固定的命令定义,通常与 CMD 结合使用来传递参数。 | ENTRYPOINT ["java", "-jar"] |
VOLUME | 创建挂载点,允许外部卷映射到容器内部位置。 | VOLUME ["/var/log"] |
USER | 切换用户身份,默认情况下是以 root 用户执行命令。 | USER appuser |
ARG | 定义构建时变量,可以在构建过程中通过 --build-arg 参数传入值。 | ARG BUILD_DATE LABEL build-date=$BUILD_DATE |
HEALTHCHECK | 配置健康检查命令,确保容器正常运行。 | `HEALTHCHECK --interval=5m --timeout=3s CMD curl -f http://localhost/ |
具体实现
创建springboot
项目
修改项目pom.xml
文件
<properties>
<java.version>1.8</java.version>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<docker.image.prefix>demo-docker</docker.image.prefix>
<!--跳过单元测试-->
<skipTests>true</skipTests>
</properties>
<build>
<finalName>docker-cloud-demo</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<!--需要加这个,不然打包镜像找不到启动文件-->
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
<configuration>
<fork>true</fork>
<addResources>true</addResources>
</configuration>
</plugin>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>dockerfile-maven-plugin</artifactId>
<version>1.4.10</version>
<configuration>
<repository>${docker.image.prefix}/${project.artifactId}</repository>
<buildArgs>
<JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
</buildArgs>
</configuration>
</plugin>
</plugins>
</build>
在src同级创建 Dockerfile
文件
Dockerfile
文件配置
FROM adoptopenjdk/openjdk8:jre8u-nightly
VOLUME /tmp
ARG JAR_FILE
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
创建一个测试controller
启动项目访问返回
执行项目编译
mvn clean package dockerfile:build
注意
: 执行项目生成镜像,默认连接的是本机docker
服务的2375
端口,如果本机未开通端口需要开通才能正常打包成镜像,如需要远程打包,需要添加环境变量DOCKER_HOST
,并指向远程服务的2375
端口.
DOCKER_HOST tcp://192.168.2.104:2375
编译完成
项目打包的镜像
启动镜像测试功能