Dockerfile自定义镜像
Dockerfile自定义镜像
CAMELLIADockerfile自定义镜像
对于MySQL、Redis这类可以在DockerHUB找到的镜像,在使用的时候直接拉取即可。但是对于我们自己写的项目DockerHUB基本是没有合适的镜像,这时只能自定义镜像了。
自定义 Docker 镜像是通过编写 Dockerfile
文件来定义镜像的构建过程。Dockerfile
是包含一系列指令的文本文件,用于告诉 Docker 如何构建一个镜像。
1. 镜像的结构
Docker 镜像是将应用程序及其所需的系统函数库、运行时环境、配置和依赖项打包在一起的只读模板。这个模板可用于创建一个或多个容器。
镜像在基础操作系统或运行环境的基础上,加入应用程序文件、配置文件和依赖,最后编写启动脚本,一起打包形成的一个可重复使用的文件。
而构建镜像,就是实现上述打包的过程。
2. Dockerfile
Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明,每一个指令都会形成一层。通过定义一系列命令和参数,实现Dockerfile 指导 Docker 构建一个自定义的镜像。
Dockerfile 的基本结构可以简单分为以下几部分:
1. 基础镜像(Base Image):通过 FROM
指令选择一个基础镜像,作为你构建新镜像的起点。这个基础镜像通常包含操作系统和一些预装软件。
2. 构建步骤:用一系列指令描述构建流程,比如 RUN
执行命令安装软件,COPY
或 ADD
用来复制文件,WORKDIR
设置工作目录等。
3. 启动指令:通过 CMD
或 ENTRYPOINT
定义容器启动时执行的命令,也就是容器运行时的默认操作。
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