Dockerfile中常用配置项的功能都是什么?

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: Dockerfile是用于构建Docker镜像的文本文件,其指令执行基于文件所在目录。`FROM`指定了基础镜像,`RUN`执行命令,`CMD`定义默认启动命令,`ENTRYPOINT`配置启动容器的应用,`COPY`和`ADD`复制本地文件到镜像。`WORKDIR`设置容器内工作目录,`VOLUME`创建持久化数据卷,`EXPOSE`声明暴露端口,`ENV`设置环境变量,`LABEL`添加元数据,`USER`设定运行用户,`ARG`定义构建时环境变量,`ONBUILD`定义后续构建触发的操作,`STOPSIGNAL`设置停止信号,`HEALTHCHECK`定义健康检查。

Dockerfile默认的执行路径是构建镜像时的上下文路径,即Dockerfile所在的目录。

Dockerfile中的指令通常包括设置基础镜像、复制文件、安装软件包、设置环境变量、定义容器启动时要运行的命令等。这些指令都是基于Dockerfile所在的目录来执行的,因此,Dockerfile中引用的文件或目录路径都是相对于该目录的。

举个例子,如果你在Dockerfile中使用了COPY指令来复制一个文件到镜像中,你需要指定源文件相对于Dockerfile的路径。如果源文件就在Dockerfile所在的目录下,你可以直接写文件名;如果源文件在子目录中,你需要写子目录/文件名。

 

Dockerfile中常用配置项:

FROM:

指定基础镜像,新镜像将基于这个基础镜像构建。

RUN:

在镜像构建时执行命令,如安装软件包、设置环境变量等。

格式:RUN <command>RUN ["executable", "param1", "param2"]

CMD:

设置容器启动时默认执行的命令。

格式:CMD ["executable","param1","param2"]CMD command param1 param2CMD ["param1","param2"](作为ENTRYPOINT的默认参数)。

ENTRYPOINT:

配置容器启动时运行的命令,使得容器以应用程序的方式运行。

格式:ENTRYPOINT ["java", "-jar", "/app.jar"]

在这个例子中,当容器启动时,它会执行java -jar /app.jar命令来运行指定的Java应用程序。

COPY:

本地文件或目录复制到Docker镜像的指定路径

格式:COPY <src>... <dest>

比如

COPY . . 这个命令实际上做了两件事情:

  1. 第一个 . 指的是构建上下文中的当前目录。构建上下文通常是你在运行 docker build 命令时所在的目录,或者是通过 -f 参数指定的 Dockerfile 所在的目录。这个目录中的所有文件和子目录都会被考虑在内。
  2. 第二个 . 是目标路径,也就是镜像内的路径。在这里,它表示镜像的当前工作目录。因此,COPY . . 会将构建上下文中的所有文件和目录复制到镜像的当前工作目录中。

ADD:

与COPY类似,但还可以从URL获取文件并自动解压缩。

格式:ADD <src>... <dest>

WORKDIR:

设置容器内的工作目录,即容器内部,命令执行时的默认路径。用于RUN、CMD、ENTRYPOINT、COPY和ADD指令。

格式:WORKDIR /path/to/workdir

VOLUME:

用于为容器指定一个或多个挂载点。这些挂载点可以用于将宿主机的目录或文件与容器内部进行共享,从而实现数据的持久化存储

使用VOLUME指令的一个常见场景是数据库容器。例如,你可以使用VOLUME指令将MySQL数据库的存储目录挂载到容器外部,这样即使MySQL容器被删除或重建,数据库的数据也会保留在宿主机上,不会被丢失。

例如,你可以在Dockerfile中添加如下指令来声明一个数据卷:

Dockerfile:

VOLUME /var/lib/mysql

在运行容器时,使用-v选项将数据卷映射到宿主机的目录来实现数据的持久化存储:-v <宿主机目录或文件>:<容器目录或文件>

bash:

docker build -t myimage . 

docker run -v /host/path:/var/lib/mysql myimage

  在这个例子中,/host/path 是宿主机上的目录,/var/lib/mysql 是容器内的目录。通过 -v 参数,你将宿主机的 /host/path 目录挂载到了容器的 /var/lib/mysql 目录上。这样,容器对 /var/lib/mysql 目录的读写操作实际上是在操作宿主机上的 /host/path 目录,从而实现了数据的持久化。

  

EXPOSE:

声明容器要监听的端口,方便外部访问容器服务。

格式:EXPOSE <port> [<port>...]

ENV:

设置环境变量。可以在构建镜像和启动容器时调用。

格式:ENV <key>=<value> [<key>=<value>...]

LABEL:

为镜像添加元数据标签,比如版本号。

格式:LABEL <key>=<value> [<key>=<value>...]

USER:

设置运行容器时使用的用户名或UID和组名或GID。

格式:USER <user>[:<group>]USER <uid>[:<gid>]

ARG:

定义构建时的环境变量,仅在构建过程中有效。(可以后续覆盖)

格式:ARG <name>[=<default value>]

ONBUILD:

定义在当前镜像基础上构建新镜像时需要执行的操作。

格式:ONBUILD [INSTRUCTION]

STOPSIGNAL:

设置容器停止时发送的信号。

HEALTHCHECK:

定义容器健康检查指令,用于判断容器是否正常运行。

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
JSON 搜索推荐 Java
做了个springboot接口参数解密的工具,我给它命名为万能钥匙(已上传maven中央仓库,附详细使用说明)
更新的功能具体使用示例已经更新到博文中,请在目录中找到对应位置查看
|
7月前
|
资源调度
vue.config常用配置项、自动导入依赖项
vue.config常用配置项、自动导入依赖项
182 0
|
7月前
|
Java Maven
Maven【3】( 依赖的范围,传递性和依赖的排除)(命令行操作)
Maven【3】( 依赖的范围,传递性和依赖的排除)(命令行操作)
74 0
|
7月前
|
JavaScript jenkins Java
Jenkinsfile 脚本放置源码仓库
Jenkinsfile 脚本放置源码仓库
134 0
|
Java jenkins 应用服务中间件
Jenkins+Gitlab+Nginx+Maven编译Java项目自动发布与基于tag版本回退(重复构建问题已解决)
Jenkins+Gitlab+Nginx+Maven编译Java项目自动发布与基于tag版本回退(重复构建问题已解决)
119 0
|
NoSQL Redis
安装ntopng及其相关依赖项,可以按照以下步骤进行操作
安装ntopng及其相关依赖项,可以按照以下步骤进行操作
|
Java Maven 数据库
Maven的聚合 继承 属性 版本管理 多环境资源配置 跳过测试
Maven的聚合 继承 属性 版本管理 多环境资源配置 跳过测试
Maven的聚合 继承 属性 版本管理 多环境资源配置 跳过测试
|
监控 安全 Java
使用 Docker 安装 Zabbix,并配置自定义监控项
Zabbix 可以用来监控各种网络参数,来保证服务器和系统的安全运行。并且 Zabbix 还提供了灵活的通知机制,以此来让系统管理员快速定位/解决存在的各种问题。是一个基于 Web 界面提供的分布式系统监控以及网络监控功能的企业级开源解决方案。
1235 0
使用 Docker 安装 Zabbix,并配置自定义监控项
|
Java 编译器 微服务
Devtools热部署配置使用步骤
Devtools热部署配置使用
225 0
Devtools热部署配置使用步骤
|
C++ 计算机视觉
VS2019配置项目环境依赖的方法
VS2019配置项目环境依赖的方法
621 0
VS2019配置项目环境依赖的方法