运维
docker
dockerfile详解
网络
使用sshuttle打通本地与k8s集群环境
使用ktconnect打通网络本地与集群网络
Spring Cloud
nacos部署
中间件
rabbitmq
XXL-JOB部署
RocketMQ部署
K3S
k3s证书过期修改
Kruise Rollout(灰度)
驱动
nginx
nginxWebUI
nginx-ui
Jenkins 介绍与部署文档
ClickHouse Docker 部署文档
本文档使用 MrDoc 发布
-
+
首页
dockerfile详解
# 什么是Dockerfile Dockerfile 是一种用于定义和构建 Docker 镜像的文本文件。它包含了一系列的指令和参数,用于描述镜像的构建过程,包括基础映像、软件包安装、文件拷贝、环境变量设置等。通过编写 Dockerfile,可以将应用程序、环境和依赖项打包成一个独立的容器镜像,使其可以在不同的环境和平台上运行,实现应用程序的可移植性和可扩展性。 Dockerfile 的基本结构通常包括以下几个部分: - 基础镜像:使用 FROM 指令指定基础镜像,作为构建镜像的起点。 - 构建过程指令:例如 RUN 用于执行命令和安装软件包,COPY 用于拷贝文件和目录等。 - 容器启动指令:使用 CMD 或 ENTRYPOINT 指令来定义容器启动时要执行的命令。 Dockerfile 的语法简单且易于理解,使得镜像的构建过程变得可重复和可维护。通过 Dockerfile,开发者能够自动化镜像构建过程,使得镜像构建更加一致、可重复,并且能够方便地迁移和部署到任何支持 Docker 的环境中 ```shell docker build -t system-server:v1.0 . ``` # Dockerfile常用指令 Dockerfile 指令功能简介 | 指令 | 功能简介 | |------------|----------| | FROM | 指定构建新Image时使用的基础Image,通常必须是Dockerfile的第一个有效指令,但其前面也可以出现ARG指令 | | LABEL | 附加到Image之上的元数据,键值格式 | | ENV | 以键值格式设定环境变量,可被其后的指令所调用,且基于新生成的Image运行的Container中也会存在这些变量 | | RUN | 以FROM中定义的Image为基础环境运行指定命令,生成结果将作为新Image的一个镜像层,并可由后续指令所使用 | | CMD | 基于该Dockerfile生成的Image运行Container时,CMD能够指定容器中默认运行的程序,因而其只应该定义一次 | | ENTRYPOINT | 类似于CMD指令的功能,但不能被命令行指定要运行的应用程序覆盖,且与CMD共存时,CMD的内容将作为该指令中定义的程序的参数 | | WORKDIR | 为RUN、CMD、ENTRYPOINT、COPY和ADD等指令设定工作目录 | | COPY | 复制主机上或者前一阶段构建结果中(需要使用--from选项)文件或目录生成新的镜像层 | | ADD | 与COPY指令的功能相似,但ADD额外也支持使用URL指定的资源作为源文件 | | VOLUME | 指定基于新生成的Image运行Container时期望作为Volume使用的目录 | | EXPOSE | 指定基于新生成的Image运行Container时期望暴露的端口,但实际暴露与否取决于"docker run"命令的选项,支持TCP和UDP协议 | | USER | 为Dockerfile中该指令后面的RUN、CMD和ENTRYPOINT指令中要运行的应用程序指定运行者身份UID,以及一个可选的GID | | ARG | 定义专用于build过程中的变量,但仅对该指标之后的调用生效,其值可由命令行选项"--build-arg"进行传递 | | ONBUILD | 触发器,生效于由该Dockerfile构建出的新Image被用于另一个Dockerfile中的FROM指令作为基础镜像时 | | STOPSIGNAL | 用于通知Container终止的系统调用信号 | | HEALTHCHECK| 定义检测容器应用的健康状态的具体方法 | | SHELL | 为容器定义运行时使用的默认shell程序,Linux系统默认使用["/bin/sh","-c"],Windows默认使用["cmd","/S","/C"] | ## 示例 构建 Nginx 镜像的 Dockerfile ```shell # 基础镜像,使用官方的 Nginx 镜像作为基础 FROM nginx:latest # 维护者信息,用于指定镜像的作者或维护者 LABEL maintainer="your_email@example.com" # 将本地的配置文件复制到容器的指定目录,覆盖默认配置 COPY nginx.conf /etc/nginx/nginx.conf # 解释:将本地的静态网页文件复制到 Nginx 的默认网页目录 COPY index.html /usr/share/nginx/html/ # 解释:设置环境变量,用于在容器内部设置一些配置参数 ENV NGINX_VERSION 1.21.3 # 解释:在容器启动时执行的命令,这里指定 Nginx 以前台模式启动 CMD ["nginx", "-g", "daemon off;"] # 解释:暴露容器的 80 端口,让外部可以访问 Nginx 服务 EXPOSE 80 # 解释:在构建镜像过程中执行命令,这里安装了一个额外的软件包 RUN apt-get update && apt-get install -y curl # 解释:定义一个工作目录,后续的 COPY、RUN 等指令都会以这个目录为基准 WORKDIR /usr/share/nginx/html # 解释:添加一个额外的文件到容器中,这里假设有一个额外的静态文件 ADD extra_file.txt /usr/share/nginx/html/ ``` 构建基础 Linux 系统镜像的 Dockerfile ```shell # 基础镜像,使用官方的 Ubuntu 镜像作为基础 FROM ubuntu:latest # 维护者信息 LABEL maintainer="your_email@example.com" # 解释:设置环境变量,这里设置了语言环境 ENV LANG C.UTF-8 # 解释:在构建镜像过程中执行命令,这里更新了系统包列表并安装了几个软件包 RUN apt-get update && apt-get install -y \ vim \ curl \ git \ && rm -rf /var/lib/apt/lists/* # 解释:定义一个工作目录 WORKDIR /app # 解释:将本地的某个脚本文件复制到容器的工作目录中 COPY start.sh /app/start.sh # 解释:给复制到容器中的脚本文件添加执行权限 RUN chmod +x /app/start.sh # 解释:暴露容器的 8080 端口 EXPOSE 8080 # 解释:在容器启动时执行的命令,这里执行刚才复制进去的脚本文件 CMD ["/app/start.sh"] # 解释:添加一个额外的文件到容器中 ADD extra_file.txt /app/ ```
admin
2025年1月14日 16:20
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Rancher
Jenkins
ADMIN-UI
VBEN-ADMIN-UI
RUST-FS
MinIO
mindoc
Markdown文件
PDF文档(打印)
分享
链接
类型
密码
更新密码