使用Dockerfile创建Docker镜像(详解)

Docker容器之Dockerfile构建镜像 阅读详情

什么是Dockerfile?

  Dockerfile是一个包含用于组合镜像命令的文本文档。可以使用命令行中任何命令。Docker通过读取Dockerfile中的指令自动生成镜像。

docker build -f /path/dockerfile
Dockerfile的基本架构

  Dockerfile一般分为四部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令。’#'为Dockerfile中的注释。

Dockerfile命令详解

  Docker以从上到下的顺序运行Dockerfile的指令,第一条必须是FROM。

  1. FROM:指定基础镜像,必须是第一个命令
格式:
  FROM <image>
  FROM <image>:<tag>
  FROM <image>@<digest>
示例:
  FROM mysql:5.6
注:
  tag或digest是可选的,如果不使用这两个值时,会使用latest版本的基础镜像
  1. MAINTAINTER:维护者信息
格式:
    MAINTAINER <name>
示例:
    MAINTAINER Jasper Xu
    MAINTAINER sorex@163.com
    MAINTAINER Jasper Xu <sorex@163.com>
  1. RUN:构建镜像时执行的命令
RUN用于在镜像容器中执行命令,其有以下两种命令执行方式:
shell执行
格式:
    RUN <command>
exec执行
格式:
    RUN ["executable", "param1", "param2"]
示例:
    RUN ["executable", "param1", "param2"]
    RUN apk update
    RUN ["/etc/execfile", "arg1", "arg1"]
注:
  RUN指令创建的中间镜像会被缓存,并会在下次构建中使用。如果不想使用这些缓存镜像,
  可以在构建时指定--no-cache参数,如:docker build --no-cache
  1. ADD:将本地文件添加到容器中,tar类型文件会自动解压(网络压缩资源不会被解压),可以访问网络资源,类似wget
格式:
    ADD <src>... <dest>
    ADD ["<src>",... "<dest>"] 用于支持包含空格的路径
示例:
    ADD hom* /mydir/          # 添加所有以"hom"开头的文件
    ADD hom?.txt /mydir/      # ? 替代一个单字符,例如:"home.txt"
    ADD test relativeDir/     # 添加 "test" 到 `WORKDIR`/relativeDir/
    ADD test /absoluteDir/    # 添加 "test" 到 /absoluteDir/
  1. COPY:功能类似ADD,但是不会自动解压文件,也不能访问网络资源
  2. CMD:构建容器后调用,也就是在容器启动时进行调用
格式:
    CMD ["executable","param1","param2"] (执行可执行文件,优先)
    CMD ["param1","param2"] (设置了ENTRYPOINT,则直接调用ENTRYPOINT添加参数)
    CMD command param1 param2 (执行shell内部命令)
示例:
    CMD echo "This is a test." | wc -
    CMD ["/usr/bin/wc","--help"]
注:   
	CMD不同于RUN,CMD用于指定在容器启动时所要执行的命令,而RUN用于指定镜像构建时所要执行的命令。
  1. ENTRYPOINT:配置容器,使其可执行化。配合CMD可省去"application",只使用参数
格式:
    ENTRYPOINT ["executable", "param1", "param2"] (可执行文件, 优先)
    ENTRYPOINT command param1 param2 (shell内部命令)
示例:
    FROM ubuntu
    ENTRYPOINT ["top", "-b"]
    CMD ["-c"]
注:
	ENTRYPOINT与CMD非常类似,不同的是通过docker run执行的命令
    不会覆盖ENTRYPOINT,而docker run命令中指定的任何参数,都会被当做参数再次传递给ENTRYPOINT。
    Dockerfile中只允许有一个ENTRYPOINT命令,多指定时会覆盖前面的设置,而只执行最后的ENTRYPOINT指令。
  1. LABLE:用于为镜像添加元数据
格式:
    LABEL <key>=<value> <key>=<value> <key>=<value> ...
示例:
  LABEL version="1.0" description="这是一个Web服务器" by="IT笔录"
注:
  使用LABEL指定元数据时,一条LABEL指定可以指定一或多条元数据,指定多条元数据时不同元数据之间
  通过空格分隔。推荐将所有的元数据通过一条LABEL指令指定,以免生成过多的中间镜像。
  1. ENV:设置环境变量
格式:
    ENV <key> <value>  #<key>之后的所有内容均会被视为其<value>的组成部分,因此,一次只能设置一个变量
    ENV <key>=<value> ...  # 可以设置多个变量,每个变量为一个"<key>=<value>"的键值对,
    					   # 如果<key>中包含空格,可以使用\来进行转义,也可以通过""来进行标示;另外,反斜线也可以用于续行
示例:
    ENV myName John Doe
    ENV myDog Rex The Dog
    ENV myCat=fluffy
  1. EXPOSE:指定于外接交互的端口
格式:
    EXPOSE <port> [<port>...]
示例:
    EXPOSE 80 443
    EXPOSE 8080    EXPOSE 11211/tcp 11211/udp
注:
	EXPOSE并不会让容器的端口访问到主机。要使其可访问,需要在docker run运行容器时通过-p来发布这些端口,
    或通过-P参数来发布EXPOSE导出的所有端口
  1. VOLUME:用于指定持久化目录
格式:
    WORKDIR /path/to/workdir
示例:
    WORKDIR /a  (这时工作目录为/a)
    WORKDIR b  (这时工作目录为/a/b)
    WORKDIR c  (这时工作目录为/a/b/c)
注:
	通过WORKDIR设置工作目录后,Dockerfile中其后的命令RUN、CMD、ENTRYPOINT、ADD、COPY等命令都会在该目录下执行。
    在使用docker run运行容器时,可以通过-w参数覆盖构建时所设置的工作目录。
  1. WORKDIR:工作目录,类似于cd命令
格式:
    WORKDIR /path/to/workdir
示例:
    WORKDIR /a  (这时工作目录为/a)
    WORKDIR b  (这时工作目录为/a/b)
    WORKDIR c  (这时工作目录为/a/b/c)
注:
	通过WORKDIR设置工作目录后,Dockerfile中其后的命令RUN、CMD、ENTRYPOINT、ADD、COPY等命令都会在该目录下执行。
    在使用docker run运行容器时,可以通过-w参数覆盖构建时所设置的工作目录。
  1. USER:指定运行容器时的用户名或者 UID,后续 RUN 也会使用指定用户。使用USER指定用户时,可以使用用户名、UID或GID,或者两者的组合。当服务不需要管理权限时,可以通过该命令指定运行用户。并且可以在之前创建所需要的用户
 格式:
  USER user
  USER user:group
  USER uid
  USER uid:gid
  USER user:gid
  USER uid:group

 示例:
  USER www

 注:使用USER指定用户后,Dockerfile中其后的命令RUN、CMD、ENTRYPOINT都将使用该用户。
   镜像构建完成后,通过docker run运行容器时,可以通过-u参数来覆盖所指定的用户。
  1. ARG:用于指定传递给构建运行时的变量
格式:
    ARG <name>[=<default value>]
示例:
    ARG site
    ARG build_user=www
  1. ONBUILD:用于设置镜像触发器
格式:
  ONBUILD [INSTRUCTION]
示例:
  ONBUILD ADD . /app/src
  ONBUILD RUN /usr/local/bin/python-build --dir /app/src
注:
  当所构建的镜像被用做其它镜像的基础镜像,该镜像中的触发器将会被钥触发
案例
使用Dockerfile创建Docker镜像 文章目录Docker镜像的好处创建Docker镜像手动创建Docker镜像通过Dockerfile创建Docker镜像Dockerfile的基本组成与相关指令通过Dockerfile创建Docker镜像实例使用Docker镜像查看生成的Docker镜像创建并使用Docker容器在浏览器中访问 Docker镜像的好处   项目在开发过程中往往会经历不同的环境,比如说有开发环境、有测试环境、有生产环境... 阅读详情

相关推荐

Docker入门实战——mysql镜像使,使用Dockerfile创建自己的镜像

mysql镜像使 安装docker 1.yum安装 yum install docker -y 启动docker systemctl enable docker #设置docker开机自启 systemctl start docker #开启docker 获得mysql镜像 1.搜索镜像 docker search mysql 可以看到有很多mysql镜像我们直接选择stats最多的镜像 2.从远处库拉取镜像 docker pull mysql 3.查看镜像 do

马小婧QAQ 1816

Dockerfile创建镜像

基础镜像尽量使用轻量级最小化的镜像。Dockerfile中尽量把RUN指令合并在一起,减少镜像的层数(因为每一个RUN指令就是一个镜像层)。多级构建(拿Dockerfile构建好的镜像再构建一次)。FROM 镜像 AS 别名 COPY --FROM 别名构建镜像时最后添加清空系统或应用程序的缓存的命令。

Yuzhang2046的博客 5859

Docker学习笔记之使用Dockerfile创建镜像

Docker学习笔记之Dockerfile;Docker 仓库;使用 Supervisord

Lockey23的博客 2095

【docker】dockerfile构建镜像

docker run创建并启动容器,再通过docker exec/cp 等容器操作指令修改容器内容,然后再去用docker commit提交成新的镜像。

manyulanlanlu的博客 1万+

STM32F407控制舵机

STM32F407控制舵机运行 使用STM32F407控制舵机,首先来看下舵机图片 [黑红白,黑线接GND,红线接VCC,信号线接白色线(有的舵机线的颜色不同,例如褐色红色橘色,仅颜色不同接法还如上述)] 舵机需要信号的周期为20ms,即频率为50Hz。 接下来正式操作: 步骤一:STM32F4程序(本次程序的PWM信号产生的周期频率由定时器TIM14通道1产生(TIM14_CH1),想要使用其它定时器也没关系下面会讲到) #include "pwm.h" void TIM14_CH1_PWM_In

Ievn_Hare的博客 1万+

PyTorch转ONNX遇到算子不支持?3种实战解决方案+TensorRT适配技巧

本文针对PyTorch模型导出ONNX时常见的算子不支持问题,提供了从诊断到解决的完整实战指南。首先讲解如何精准定位错误根源,随后详细介绍了三种核心解决方案:注册缺失的符号映射、实现自定义算子,以及为TensorRT开发插件的终极落地方案。文章还分享了构建稳健部署流水线的工程化实践,帮助开发者系统性地解决模型部署中的算子兼容性挑战。

fern8的博客 843

关于制作Docker镜像?| Dockerfile快速开始

要落地云原生架构,其中的一个核心点是通过容器来部署我们的应用。如果要使用容器来部署应用,那么制作应用的 Docker 镜像就是我们绕不开的关键一步。

西京刀客 3万+

EtherCAT从站协议栈---- sampleappl.c 文件解析

这个源文件实际上包含该项目的入口函数main函数。 那么如何找到入口函数呢? 可以进入debug的simulator模式,选中run to main(), 当执行完启动文件startup_cm3.s后就进入了main函数(注意在main函数之前还进入了SystemInit函数), 如下图所示: 这个main函数主要架构如下: int main(void) { HW_Init(); /*PDI(过程数据接口)初始化,这里用的是MCI接.

Jiawei_Z的博客 3069

Docker(七)—— 如何用Dockerfile制作自己的镜像

自己写了一个小程序,如何带着环境打包成一个镜像,然后发布给别人run起来呢?以前程序员需要交付一个jar包或者war包,但是现在!

qq_44886213的博客 1万+

power bi 演唱会-佐罗

我是业务分析人员,注重使用性,因此,课程不到 30% 的内容就可以解决目前为止我碰到的所有业务问题,剩下的 70% 内容是帮助我提升,优化,升华,精益求精用的,比如第三方工具,比如代码运行速度优化,比如查询逻辑优化等等。系统性上来说,结构明晰,安排上非常有条理,层层递进;《BI 真经》,中有真经二字,略显夸大,而当我第一次证明了这点的时候,我也非常惊讶,这就是我做以下所有事情的一切动力。《BI 真经》综合考量思想性,系统性,本质性,创新性,通用性,技巧性,启发性,对比其他课程有压倒性的显著优势。

v_1090213742的博客 911

点云配准SIFT+SI+RANSAC+ICP

Spin Image(SI)是一种用于点云数据描述的特征描述子,广泛应用于三维点云配准、识别和重建等领域。它能够捕捉点云中的局部几何信息,具有旋转不变性和部分平移不变性等优点,是一种非常强大的特征描述子。Spin Image是一种强大的点云特征描述子,具有旋转不变性、局部几何信息捕捉等优点,适用于点云配准、目标识别和三维重建等多个领域。通过合理选择局部区域、建立参考框架和计算描述子,可以充分利用Spin Image描述点云的特征,从而实现各种三维场景分析和处理任务。

点云兔子的博客 558

[docker] Docker镜像的创建以及Dockerfile的使用

Dockerfile结构大致分为四个部分:基础镜像信息(用from指定)、维护者信息(maintainer、镜像操作指令和容器启动时执行指令。第一行必须使用FROM指令指明所基于的镜像名称;之后使用MAINTAINER 指令说明维护该镜像的用户信息;然后是镜像操作相关指令,如RUN指令/EXPOSE/ADD/ENV/ARG等等。每运行一条指令,都会给基础镜像添加新的一层。(多条命令可以使用;或 && 合并成一条命令,减少镜像的层数)

热心网友 2570

HFSS实战项目——高带外抑制特性SIW带通滤波器

本文对单级滤波器和双级滤波器的设计、工作原理及仿真结果进行了详细分析,并验证了双级SIW带通滤波器在性能方面的优越性,为微波通信系统中滤波器的设计和应用提供了重要参考。

2401_87464239的博客 1816

Docker——使用Dockerfile创建镜像

Dockerfile一、相关概念Docker镜像Docker镜像的创建方法二、Dockerfile常用命令解释三、创建apache镜像四、挂载数据卷 一、相关概念 Dockerfile中的每个指令都会创建一个新的镜像层(相当于一个临时容器) 镜像层将被缓存和复用 当Dockerfile的指令修改了,复制的文件变化了,或者构建镜像时指定的变量不同了,对应的镜像层缓存就会失效 某一层的镜像缓存失效之后,它之后的镜像层缓存都会失效 镜像层是不可变的,如果在某一层中添加一个文件,然后在下一层中删除它,则镜像中依

weixin_51613313的博客 4244

【数字孪生与仿真技术】10:半导体制造中的虚拟量测技术深度解析:从多尺度建模到工业级应用

摘要:半导体制造过程中,晶圆加工需实时监测300+关键参数,传统物理量测技术面临产能损耗、延迟检测等痛点。本文系统阐述虚拟量测(Virtual Metrology)技术的完整解决方案,通过多尺度混合建模实现物理机理与数据驱动的深度融合。内容涵盖等离子体刻蚀、薄膜沉积等关键工艺的物理模型构建,LSTM神经网络的数据校正算法,以及边缘-云协同的实时部署架构。某12英寸晶圆厂实践表明,虚拟量测技术可减少70%物理量测频次,异常漏检率从18%降至3%,机台利用率提升11%。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 2552

第7章: MMU notifier在AMD GPU驱动中的应用

AMD GPU驱动利用MMU Interval Notifier机制实现共享虚拟内存(SVM)和异构内存管理(HMM)。通过分析AMDGPU内存架构(VRAM、GTT、Userptr)和Buffer Object设计,重点探讨了Userptr零拷贝机制如何依赖MMU notifier保持CPU/GPU内存一致性。HMM框架进一步实现统一地址空间和透明页面迁移,AMDGPU通过amdgpu_hmm.c实现两种invalidate回调(GFX和HSA模式),处理不同场景下的内存失效同步问题。

图形/计算GPU的驱动与虚拟化技术分享园地 2470

docker使用dockerfile创建镜像

docker使用dockerfile创建镜像 1、创建一个dockerfile mkdir Dockerfile cd Dockerfile touch Dockerfile vi Dockerfile touch demo1.txt vi demo1.txt 创建一个dockerfile文件夹,同时创建一个Dockerfile文件,把下面内容写入到Dockerfile FROM nginx M...

qq_35679620的博客 3229

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

使用Dockerfile创建docker镜像及Dockerfile命令详解

Dokerfile 是一个文本文件,其中包含了若干条指令,指令描述了构建镜像的细节。 1、先来编写一个最简单的Dockerfile文件 FROM nginx RUN echo '&lt;h1&gt;welcome to nginx by dockerfile build&lt;/h1&gt;' /usr/share/nginx/html/index.html 该Dockerfile 非常简单...

淡淡的倔强的博客 8182

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Docker使用 使用Dockerfile来创建镜像

使用Dockerfile来创建镜像

m0_51579041的博客 1043

Docker之使用Dockerfile创建新镜像

Docker镜像是Docker容器的基础,可以理解为是一个只读的模板,包含了运行Docker容器所需的所有文件、配置和依赖关系。镜像可以从一个或多个Dockerfile构建而来,也可以从其他镜像构建而来。Docker镜像可以被存储、分享和重复使用,可以在不同的环境中部署相同的应用程序,从而实现快速、可靠的部署。Docker Hub是一个公共的镜像仓库,包含了数以万计的Docker镜像,开发者可以在其中找到自己需要的镜像,并在自己的项目中使用它们。

月生的静心苑 1768

使用Dockerfile创建docker镜像

使用Dockerfile创建docker镜像

rznice的专栏 6万+

docker镜像创建完没有名字_使用 Dockerfile 创建镜像 | Docker 系列

之前写镜像的时候说到创建镜像最常用的方式是使用 Dockerfile,这篇就来重点说一下,到底是怎么使用 Dockerfile 来创建的。基本结构# 1、第一行必须是 FROM 基础镜像信息 FROM ubuntu # 2、维护者信息 MAINTAINER docker_user docker_user@email.com # 3、镜像操作指令 RUN echo "deb http://arc...

weixin_31518415的博客 1841

案例:Docker 镜像的创建及使用(commit与dockerfile方式)

docker会缓存已有的镜像层,构建镜像时,如果某镜像层已经存在,就直接使用,无需创建,如果不希望在构建镜像时使用缓存,可以在docker build命令中加上–no-cache参数。在执行dockerfile时,如果因为某种原因执行到某个指令失败了,也能够得到前一个指令成功执行构建出的容器,可以运行新的镜像,手动运行那条失败的指令,从而定位失败的原因。docker理念里,容器启动时,应当为它指定主业是什么,如nginx容器主业就是nginx代理服务,tomcat容器就是web服务等等。

初心不改 2107

Docker(五)---Docker镜像详解 镜像使用、Dockerfile创建镜像

一、Docker 镜像使用 当运行容器时,使用的镜像如果在本地中不存在,docker 就会自动从 docker 镜像仓库中下载,默认是从 Docker Hub 公共镜像源下载。 下面我们来学习: 1、管理和使用本地 Docker 主机镜像 2、创建镜像 列出镜像列表 我们可以使用 docker images 来列出本地主机上的镜像。 [root@server1 ~]# docker images...

qq_35887546的博客 986

Docker——如何使用Dockerfile创建镜像

通过使用Dockerfile可以精确地构建出适合Java应用运行的镜像。本文将详细介绍如何使用Dockerfile为Java应用创建镜像。

1加1等于的博客 1737

Java创建docker镜像_使用Dockerfile构建Docker镜像

目录前言Dockerfile的书写规则及指令使用方法创建Dockerfile,构建运行环境构建镜像Dockerfile参考示例Dockerfile最佳实践1. 前言Dockfile是一种被Docker程序解释的脚本,Dockerfile由一条一条的指令组成,每条指令对应Linux下面的一条命令。Docker程序将这些Dockerfile指令翻译真正的Linux命令。Dockerfile有自己书写格...

weixin_39793434的博客 697
上一篇: CentOS7磁盘空间以及文件系统扩容
下一篇: Java类对象的初始化顺序和类在什么时候会被加载
享字由
博客等级 码龄10年 8粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值