学习 Docker(三):Dockerfile
2009 年 12 月 18 日
创建 Docker Image 主要有两种方式:
docker commit docker build
在介绍 Dockerfile 之前,需要了解 Layer(层)的概念。
Layer
Docker Image 实际上是由基础的 Docker Base Image 和在其上的 Layer 构建而成的。
以构建一个 Spring Boot 应用为例:
+--------------------------------------------+ | | | | | ENTRYPOINT | | | | | +--------------------------------------------+ | | | | | COPY | | | | | +--------------------------------------------+ | | | | | EXPOSE 8080 | | | | | +--------------------------------------------+ | | | | | openjdk:8-jdk-alpine | | | | | +--------------------------------------------+
由底到顶,每层依次为:
① 使用 openjdk:8-jdk-alpine 镜像作为基础镜像;
② 暴露 8080 端口;
③ 拷贝本地软件包到镜像;
④ 运行应用。
Dockerfile
相应的 Dockerfile 为:
FROM openjdk:8-jdk-alpine EXPOSE 8080 COPY target/app.jar app.jar ENTRYPOINT ["java", "-jar", "/app.jar"]
① FROM
指令指定 Docker Base Image;
② EXPOSE
指令通知 Docker 在运行时应用监听的端口;
③ COPY
指令拷贝本地文件或目录到容器;
③ ENTRYPOINT
指令定义了可执行的命令。
构建
构建 Docker Image:
docker build -t spring-boot:alpine .
查看 Docker Image:
docker history spring-boot:alpine