Docker 是一个开源的应用容器引擎,它允许开发者将应用及其依赖包打包到一个可移植的容器中,然后发布到任何流行的 Linux 机器或 Windows 机器上,也可以实现虚拟化。Dockerfile 是一个文本文件,其中包含了一系列命令,用户可以调用 docker build
来创建一个镜像。本文将详细介绍 Dockerfile 的基本语法和最佳实践,并通过一个具体的示例来帮助你更好地理解 Dockerfile 的编写方法。
Dockerfile 基本语法
Dockerfile 是一个文本文件,每一行包含一个指令。Docker 在构建镜像时会逐行执行这些指令。Dockerfile 的指令非常直观,
其对应的语法可以参考官方文档:
https://docs.docker.com/engine/reference/builder/
下面是一些常用的指令:
Dockerfile 编写流程
-
选择基础镜像:
- 选择一个合适的官方基础镜像,如
node:14
、python:3.8
等。
- 选择一个合适的官方基础镜像,如
-
设置工作目录:
- 使用
WORKDIR
指令设置应用的工作目录。
- 使用
-
复制必要的文件:
- 使用
COPY
或ADD
指令将应用的源代码、配置文件等复制到工作目录中。
- 使用
-
安装依赖:
- 使用
RUN
指令安装应用所需的依赖。
- 使用
-
设置环境变量:
- 使用
ENV
指令设置环境变量。
- 使用
-
声明端口:
- 使用
EXPOSE
指令声明应用运行时需要监听的端口。
- 使用
-
指定启动命令:
- 使用
CMD
或ENTRYPOINT
指令指定容器启动时执行的命令。
- 使用
示例:编写一个简单的 java 应用的 Dockerfile
1.Dockerfile标准写法
# 指定基础镜像
FROM ubuntu:16.04
# 配置环境变量,JDK的安装目录、容器内时区
ENV JAVA_DIR=/usr/local
ENV TZ=Asia/Shanghai
# 拷贝jdk和java项目的包
COPY ./jdk8.tar.gz $JAVA_DIR/
COPY ./docker-demo.jar /app.jar
# 设定时区
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# 安装JDK
RUN cd $JAVA_DIR \&& tar -xf ./jdk8.tar.gz \&& mv ./jdk1.8.0_144 ./java8
# 配置环境变量
ENV JAVA_HOME=$JAVA_DIR/java8
ENV PATH=$PATH:$JAVA_HOME/bin
# 指定项目监听的端口
EXPOSE 8080
# 入口,java项目的启动命令
ENTRYPOINT ["java", "-jar", "/app.jar"]
2.简化写法(就有人提供了基础的系统加JDK环境,我们在此基础上制作java镜像,就可以省去JDK的配置了)
# 基础镜像
FROM openjdk:11.0-jre-buster
# 设定时区
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# 拷贝jar包
COPY docker-demo.jar /app.jar
# 入口
ENTRYPOINT ["java", "-jar", "/app.jar"]
ps:jdk版本下载链接:Java Downloads | Oracle 中国
希望你喜欢这篇文章!请点关注和收藏吧。你的关注和收藏会是我努力更新的动力,祝关注和收藏的帅哥美女们今年都能暴富。如果有更多问题,欢迎随时提问