Dockerfile自定义镜像

Dockerfile自定义镜像


对于MySQL、Redis这类可以在DockerHUB找到的镜像,在使用的时候直接拉取即可。但是对于我们自己写的项目DockerHUB基本是没有合适的镜像,这时只能自定义镜像了。

自定义 Docker 镜像是通过编写 Dockerfile 文件来定义镜像的构建过程。Dockerfile 是包含一系列指令的文本文件,用于告诉 Docker 如何构建一个镜像。

1. 镜像的结构


Docker 镜像是将应用程序及其所需的系统函数库、运行时环境、配置和依赖项打包在一起的只读模板。这个模板可用于创建一个或多个容器。

镜像在基础操作系统或运行环境的基础上,加入应用程序文件、配置文件和依赖,最后编写启动脚本,一起打包形成的一个可重复使用的文件。

而构建镜像,就是实现上述打包的过程。

image-20210731175806273

2. Dockerfile


Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明,每一个指令都会形成一层。通过定义一系列命令和参数,实现Dockerfile 指导 Docker 构建一个自定义的镜像。

Dockerfile 的基本结构可以简单分为以下几部分:

1. 基础镜像(Base Image):通过 FROM 指令选择一个基础镜像,作为你构建新镜像的起点。这个基础镜像通常包含操作系统和一些预装软件。

2. 构建步骤:用一系列指令描述构建流程,比如 RUN 执行命令安装软件,COPYADD 用来复制文件,WORKDIR 设置工作目录等。

3. 启动指令:通过 CMDENTRYPOINT 定义容器启动时执行的命令,也就是容器运行时的默认操作。

2.1 Dockerfile指令

  • FROM:指定基础镜像,Dockerfile 的每一层都从某个镜像开始。

    1
    FROM openjdk:17-jdk-alpine
  • LABEL:用于为镜像添加元数据信息,例如作者、版本号等。

    1
    LABEL maintainer="camellia@qq.com"
  • COPY:将本地文件复制到镜像中指定路径。

    1
    COPY . /app
  • ADD:功能类似于 COPY,但可以解压压缩文件或从 URL 下载文件。

    1
    ADD file.tar.gz /app
  • RUN:在镜像中执行命令,通常用于安装依赖或配置环境。

    1
    RUN apt-get update && apt-get install -y curl
  • CMD:指定容器启动时要执行的默认命令。

    1
    CMD ["java", "-jar", "app.jar"]
  • ENTRYPOINT:类似于 CMD,但不会被 docker run 提供的参数覆盖,适用于指定主进程。

    1
    ENTRYPOINT ["java", "-jar", "app.jar"]
  • ENV:设置环境变量。

    1
    ENV APP_ENV=production
  • EXPOSE:声明容器内部服务使用的端口。

    1
    EXPOSE 8080