首页 > 其他分享 >dockerfile构建镜像

dockerfile构建镜像

时间:2024-07-03 16:11:32浏览次数:21  
标签:容器 RUN CMD 指令 构建 镜像 dockerfile

dockerfile构建镜像

镜像是多层存储,每一层在前一层的基础上进行修改;
容器也是多层存储,以镜像为基础层,在其基础上加一层作为容器运行时的存储层。

要求

1.docker会逐行读取dockerfile中每一行的指令,按顺序解析,实现images的自动构建
2.通过docker build命令构建镜像
3.dockerfile只认识自己规定的指令,不支持自定义
4.大小写不明感,但是建议指令用纯大写

docker指令

FROM

FROM base镜像
必须在dockerfile第一行,表示从哪个基础镜像构建

MAINTAINER

MAINTAINER
可选,填入作者信息,如 MAINTAINER Denlin

RUN

# 用法
RUN
每一个RUN指令都是单独开启一个镜像层(镜像优化里需要关注)
可以写入多个RUN,自上而下执行RUN命令
语法一
RUN <cmd>  会被当做 /bin/sh -c "cmd" 执行方式
语法二
RUN ["命令","参数1","参数2"] docker会将其解析为json,因此必须是双引号,且命令必须是绝对路径

# 原理
RUN后面的命令,每一个RUN本质上就是开启一个容器,执行命令,然后提交执行结果加入为新的一层镜像记录。
前一个RUN的执行结果,仅仅是针对当前进程,在内存中产生的数据变化;
后一个RUN的执行,会产生新的容器,和第一个RUN容器没有任何关系,也不会继承前一层构建产生的内存变化。
如果你要并联执行2个命令,可以用 如 cd /opt && echo "hello,denlin"

CMD

CMD 
- CMD是专门用于容器运行时候的默认命令;
- 当容器运行时,你也可以在命令结尾 主动添加 command,就会覆盖dockerfile构建的镜像中的默认cmd;
- dockerfile里只能写一个CMD,即使写多个,只有最后一个CMD生效;
- CMD定义语法
CMD <cmd>  以/bin/sh -c "cmd"执行
CMD <"executable","args1","args2">
CMD ["arg1","arg2"]   这里要注意,ENTRYPOINT的参数了
参考用法
CMD ["nginx", "-g", "daemon off;"]

EXPOSE

EXPOSE
声明容器暴露端口;
语法:EXPOSE <port1> <port2>
EXPOSE只是声明容器运行时,提供哪个对外的服务端口,并不会自己开启,需要主动用参数映射;
-p <宿主机端口>:<容器端口>
- 作用1是帮助运维理解这个镜像所开启的端口,便于配置映射关系
- 作用2是,使用随机映射的话,也会使用EXPOSE打开的端口

ENTRYPOINT

ENTRYPOINT
- 翻译为入口点,可以理解为,将最终的容器变成一个可执行的文件,
- ENTRYPOINT 的格式和 RUN 指令格式一样,分为 exec 格式和 shell 格式。
- ENTRYPOINT 的目的和 CMD 一样,都是在指定容器启动程序及参数。
- 当指定了 ENTRYPOINT 后,CMD 的含义就发生了改变,不再是直接的运行其命令,而是将 CMD 的内容作为参数传给 ENTRYPOINT 指令
- 换句话说实际执行时,将变为:
<ENTRYPOINT> "<CMD>"

ADD和COPY

注意

在 Docker 官方的 Dockerfile 最佳实践文档 中要求,尽可能的使用 COPY,因为 COPY 的语义很明确,就是复制文件而已,而 ADD 则包含了更复杂的功能,其行为也不一定很清晰。最适合使用 ADD 的场合,就是所提及的需要自动解压缩的场合。 另外需要注意的是,ADD 指令会令镜像构建缓存失效,从而可能会令镜像构建变得比较缓慢。 因此在 COPY 和 ADD 指令中选择的时候,可以遵循这样的原则,所有的文件复制均使用 COPY 指令,仅在需要自动解压缩的场合使用 ADD。 在使用该指令的时候还可以加上--chown=:选项来改变文件的所属用户及所属组

1.如源码编译下这个需求,可以用ADD,COPY将宿主机上的文件,复制到镜像里
2.DD和COPY的源路径,必须是以dockerfile所在目录的相对路径
3.原路径也可以是一个网络URL
4.ADD比COPY多一个解压tar的功能。

ENV

格式有两种:
ENV <key> <value>
ENV <key1>=<value1> <key2>=<value2>...
这个指令很简单,就是设置环境变量而已
无论是后面的其它指令,如 RUN,还是运行时的应用,都可以直接使用这里定义的环境变量。


ENV VERSION=1.0 DEBUG=on \
    NAME="Happy Feet"

基于该镜像运行容器,自动拥有该环境变量,常用于设置如数据库等配置信息

WORKDIR

使用 WORKDIR 指令可以来指定工作目录(或者称为当前目录),以后各层的当前目录就被改为指定的目录,如该目录不存在,WORKDIR 会帮你建立目录。

USER

USER 指令和 WORKDIR 相似,都是改变环境状态并影响以后的层。WORKDIR 是改变工作目录,USER 则是改变之后层的执行 RUN, CMD 以及 ENTRYPOINT 这类命令的身份

VOLUME

用来创建一个在镜像以外的挂载点,用于在多个容器之间共享数据
格式为:
VOLUME ["<路径1>", "<路径2>"...]
VOLUME <路径>

标签:容器,RUN,CMD,指令,构建,镜像,dockerfile
From: https://www.cnblogs.com/ctynlnlnl/p/18281938

相关文章

  • centos7下载关联centos镜像文件
    1.CentOS在官网上直接下载网址:https://www.centos.org/download/我选择在这里下载https://mirrors.aliyun.com/centos/7/isos/x86_64/ 感觉还是慢直接网盘下载了 centos7.9:链接: https://pan.baidu.com/s/13BAfdn1-T5YkxLJ1IpwQyw提取码: bqyg2. 3. 4, 5. ......
  • 基于Java+Vue的智慧园区管理系统:创新园区运营模式,构建全方位企业服务体系(代码分享)
     前言:智慧园区管理系统是一个集成了多种功能的综合性系统,旨在通过信息化、智能化手段提升园区的管理效率和服务质量。以下是针对系统的各个功能模块的简要描述:一、楼栋管理会务管理:管理园区内的会议预约、会议室使用等。园区信息:展示园区的基本信息,如位置、面积、规划等。......
  • 构建支持多平台的返利App跨平台开发策略
    构建支持多平台的返利App跨平台开发策略大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天我们将讨论如何构建支持多平台的返利App,特别关注跨平台开发策略,以提高应用的覆盖范围和用户体验。为什么选择跨平台......
  • linux_centos镜像下载及百度网盘分享链接
    1.Centos镜像国内最全下载地址CentOS官方下载地址:https://www.centos.org/download/Centos国内下载源http://man.linuxde.net/download/CentOShttp://mirrors.btte.net/centoshttp://mirrors.cn99.com/centos (希网)http://mirrors.sohu.com/centos (搜狐)http://mirrors.aliyun.......
  • 动手学Avalonia:基于SemanticKernel与硅基流动构建AI聊天与翻译工具
    Avalonia是什么?Avalonia是一个跨平台的UI框架,专为.NET开发打造,提供灵活的样式系统,支持Windows、macOS、Linux、iOS、Android及WebAssembly等多种平台。它已成熟并适合生产环境,被SchneiderElectric、Unity、JetBrains和GitHub等公司采用。许多人认为Avalonia是WPF的继任者,它为XA......
  • 【镜像取证篇】DD和E01镜像格式区别
    【镜像取证篇】DD和E01镜像格式区别(简)文章目录【镜像取证篇】DD和E01镜像格式区别(简)1、实验环境(一)DD镜像-原始镜像(和源盘大小一致)(二)E01镜像-压缩镜像(一般比源盘小)(三)镜像大小对比1、空盘数据2、非空盘数据总结1、实验环境系统 版本Windows11专业工作站版 22H2(22621.1555);FTKImange......
  • Golang开发:构建支持并发的网络爬虫
    Golang开发:构建支持并发的网络爬虫随着互联网的快速发展,获取网络数据成为了许多应用场景中的关键需求。网络爬虫作为一种自动化获取网络数据的工具,也因此迅速崛起。而为了应对日益庞大的网络数据,开发支持并发的爬虫成为了必要的选择。本文将介绍如何使用Golang编写一个支持......
  • Pycharm远程连接GPU(内容:下载安装Pycharm、GPU租借、配置SSH、将代码同步到镜像、命令
    目录windows下载安装pycharmGPU租借网站GPU租借GPU选择选择镜像充值然后创建镜像创建成功复制SSH登录信息远程进入镜像在Pycharm中进行ssh连接新建SFTP配置SSH复制ssh根据复制的信息填写ssh配置测试连接将代码同步到远程镜像上设置mappings将本地代码上传到镜像配......
  • 运维管理一体化:构建多维一体化的运维体系
    本文来自腾讯蓝鲸智云社区用户:CanWay摘要:笔者根据自身的技术和行业理解,解析运维一体化的内涵和实践。涉及关键词:一体化运维、平台化运维、数智化运维、运维PaaS、运维工具系统、蓝鲸等。本文作者:嘉为蓝鲸运维产品及解决方案负责人张敏全文共计7100字,预计阅读时间16min。运......
  • 构建高效盲盒小程序:数据库设计、安全策略与性能优化
    在移动互联网时代,盲盒经济以其独特的魅力迅速崛起,成为连接消费者与商品的新桥梁。盲盒小程序作为这一趋势的载体,不仅要求用户体验流畅,还需确保数据安全与性能卓越。本文将从数据库设计、安全策略及性能优化三个方面,深入探讨如何构建一个高效、安全的盲盒小程序。一、数据库设......