Dockerfile 语法

本文深入解析Dockerfile的语法和结构,包括基础镜像、维护者信息、操作指令及启动指令等关键元素,通过实例展示如何构建镜像,适合Docker初学者及进阶用户阅读。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Dockerfile 语法

Dockerfile 由一行行命令语句组成,并且支持#开头的注释行,一般分为四部分:

  • 基础镜像信息
  • 维护者信息
  • 镜像操作指令
  • 容器启动时执行指令

一个简单的栗子:

FROM openjdk:8-jdk-alpine  # 基础镜像
VOLUME /tmp                # 容器访问宿主机上的目录
ARG JAR_FILE               # 引用参数
COPY ${JAR_FILE} app.jar   # 拷贝文件
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"] # 容器启动后启动应用
EXPOSE 8080                # 指定端口

1命令

FROM
FROM命令必须是Dockerfile的首个命令,定义了使用哪个基础镜像启动构建流程。

MAINTAINER
指定维护者的信息,并应该放在FROM的后面。

RUN
它接受命令作为参数并用于创建镜像,RUN命令用于创建镜像。

CMD
镜像构建容器后被调用的命令

ENV
指定一个环境变量,会被后续 RUN 指令使用,并在容器运行时保持。

ADD
ADD命令有两个参数,源和目标,它的基本作用是从源系统的文件系统上复制文件到目标容器的文件系统;
如果源是一个URL,那该URL的内容将被下载并复制到容器中;
如果文件是可识别的压缩格式,则docker会帮忙解压缩。

COPY
将文件从路径 <src复制添加到容器内部路径 ,同ADD。

EXPOSE
指定在docker允许时指定的端口进行转发。

USER
用于设置运行容器的UID。

VOLUME
用于让你的容器访问宿主机上的目录。

WORKDIR
用于设置CMD指明的命令的运行目录。

参考 --> https://docs.docker.com/engine/reference/builder/

### Dockerfile 语法规范 Docker 使用一种简单的指令集来定义如何构建镜像,这些指令被写入到名为 `Dockerfile` 的文件中。每条指令都对应着一个操作,在构建过程中依次执行。 #### 基础结构与注释 为了使 Dockerfile 更具可读性和目的性,建议以注释开头说明该文件的作用及其基础环境[^4]: ```dockerfile # Dockerfile to build MongoDB container images # Based on Ubuntu ``` 这样的做法不仅有助于团队协作中的沟通效率提升,也方便后续维护人员理解当前配置意图。 #### 关键字与参数 以下是几个重要的关键字及相应的解释: - **FROM**: 定义基础镜像,所有 Dockerfiles 都应该以此作为第一条有效指令; - **RUN**: 执行命令并提交结果;可以用来安装软件包等初始化工作; - **WORKDIR**: 设置工作目录,此后的各层都将在此路径下运行,并影响最终容器启动时的工作位置[^5]; - **COPY/ADD**: 将本地文件复制到容器内的指定位置,其中 ADD 提供更多功能如自动解压 tar 文件等; - **EXPOSE**: 声明端口映射关系,告知外界哪些服务可以通过特定端口访问容器内部应用; - **CMD 或 ENTRYPOINT**: 指定容器启动后要执行的默认命令或入口程序。两者区别在于 CMD 可由 docker run 参数覆盖而 ENTRYPOINT 不行。 #### 实践案例:创建 Nginx 镜像 下面是一个具体的例子,展示了如何利用上述概念编写一份完整的 Dockerfile 来创建基于官方 NGINX 映像的新版本[^2]: ```dockerfile # Use the official nginx as base image FROM nginx:latest # Set working directory inside container WORKDIR /usr/share/nginx/html # Copy static files into place within container filesystem COPY ./public . # Expose port 80 so that we can access web server externally EXPOSE 80 # Start up nginx when running this container CMD ["nginx", "-g", "daemon off;"] ``` 这段脚本首先指定了使用最新的稳定版 NGINX 作为起点,接着设置了 Web 应用的工作区,再把项目根目录下的 public 文件夹里的资源拷贝过去,最后声明开放 HTTP 默认监听端口号以便外部请求能够到达服务器进程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值