文章目录

  • 一、Docker–Dockerfile镜像
    • 1.1 Docker镜像结构的分层
  • 二、Dockerfile常用指令
    • 2.1 FROM 镜像
    • 2.2 MAINTAINER 名字
    • 2.3 RUN命令
    • 2.4 ENTRYPOINT命令
    • 2.5 CMD命令
    • 2.6 EXPOSE端口号
    • 2.7 ENV环境变量变量值
    • 2.8 ADD源文件/目录目标文件/目录
    • 2.9 COPY 源文件/目录 目标文件/目录
  • 三、制作简单镜像

一、Docker–Dockerfile镜像

Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明

Docker镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数〔如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。

镜像的定制实际上就是定制每一层所添加的配置、文件。如果我们可以把每一层修改、安装、构建、操作的命令都写入一个脚本,用这个脚本来构建、定制镜像,那么镜像构建透明性的问题、体积的问题就都会解决。这个脚本就是Dockerfile。

Dockerfile是一个文本文件,其内包含了一条条的指令(Instruction),每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建。有了1noclerfile,当我们需要定制白己额外的需求时,只需在Dockerfile上添加或者修改指令,重新生成image即可,省去了敲命令的麻烦。

除了手动生成Docker镜像之外,可以使用Dockerfile自动生成镜像。Dockerfile是由多条的指令组成的文件,其中每条指令对应linux中的一条命令,Docter程序将读取Dockerfile中的指令生成指定镜像。

Dockerfile结构大致分为四个部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令。Dockerfile每行支持一条指令,每条指令可携带多个参数,支持使用以#”号开头的注释。

1.1 Docker镜像结构的分层

镜像不是一个单一的文件,而是有多层构成。容器其实是在镜像的最上i面加了一层读写层,在运行容器里做的任何文件改动,都会写到这个读写层。如果删除了容器,也就删除了其最上面的读写层,文件改动也就丢失了。Docker使用存储驱动管理镜像每层内容及可读写层的容器层。
(1) Dockerfile 中的每个指令都会创建一个新的镜像层;
(2)镜像层将被缓存和复用;
(3)当Dockerfile 的指令修改了,复制的文件变化了,或者构建镜像时指定的变量不同了,对应的镜像层缓存就会失效;
(4)某一层的镜像缓存失效,它之后的镜像层缓存都会失效;
(5)镜像层是不可变的,如果在某一层中添加一个文件,然后在下一层中剧除它,则镜像中依然会包含该文件,只是这个文件在pocker 容器中不可见了。

二、Dockerfile常用指令

2.1 FROM 镜像

指定新镜像所基于的基础镜像,第一条指令必须为FRON 指令,每创建一个镜像就需要一条FROM 指令

FROM centos:7

2.2 MAINTAINER 名字

说明新镜像的维护人信息

MAINTAINER this is apache image <wpc,2022-06-27>

2.3 RUN命令

在所基于的镜像上执行命令,并提交到新的镜像中

RUN yum install -y httpd

2.4 ENTRYPOINT命令

ENTRYPOINT [“要运行的程序”,“参数1”,“参数2”]
设定容器启动时第一个运行的命令及其参数
可以通过使用命令docker run --entrypoint来覆盖镜像中的ENTRYPOINT指令的内容

ENTRYPOINT ["ls", "/usr/local"]

2.5 CMD命令

CMD[“要运行的程序”,“参数1”,“参数2”]
上面的是exec形式,shell形式:CMD 命令 参数1 参数2
启动容器时默认执行的命令或者脚本,Dockerfile只能有一条CMD命令。如果指定多条命令,只执行最后一条命令
如果在docker run时指定了命令或者镜像中有ENTRYPOINT,那么CMD就会被覆盖
CMD 可以为ENTRYPOINT 指令提供默认参数

执行
CMD ["/run.sh"]给entrypoint传参
ENTRYPOINT [ "/usr/sbin/apachectl" ]
CMD ["-D","FOREGROUND"]

2.6 EXPOSE端口号

指定新镜像加载到Docker时要开启的端口

EXPOSE 80

2.7 ENV环境变量变量值

没置一个环境变量的值,会被后面的RUN使用

ENV myDog Rex The Dog
ENV myCat=fluffy

2.8 ADD源文件/目录目标文件/目录

将源文件复制到镜像中,源文件要与 Dockerfile位于相同目录中,或者是一个URL有如下注意事项
(1)如果源路径是个文件,且目标路径是以│结尾,则docker会把目标路径当作一个目录,会把源文件拷贝到该目录下如果目标路径不存在,则会自动创建目标路径

(2)如果源路径是个文件,且目标路径是不以/结尾,则docker会把目标路径当作一个文件。如果目标路径不存在,会以目标路径为名创建一个文件,内容同源文件
(3)如果目标文件是个存在的文件,会用源文件覆盖它,当然只是内容覆盖,文件名还是目标文件名
(4)如果目标文件实际是个存在的目录,则会源文件拷贝到该目录下。注意,这种情况下,最好显示的以/结尾,以避免混淆

(5)如果源路径是个目录,且目标路径不存在,则docker会自动以目标路径创建一个目录,把源路径目录下的文件拷贝进来。如果目标路径是个已经存在的目录,则docker会把源路径目录下的文件拷贝到该目录下

(6)如果源文件是个归档文件(压缩文件),则docker会自动帮解压
URL下载和解压特性不能一起使用。任何压缩文件通过URL拷贝,都不会自动解压

ADD index.html /var/www/html/

2.9 COPY 源文件/目录 目标文件/目录

只复制本地主机上的文件/目录复制到目标地点,源文件/目录要与Dockerfile在相同的目录中

COPY hom* /mydir/

VOLUME [”目录”]
在容器中创建一个挂载点

VOLUME ["/var/www", "/var/log/apache2", "/etc/apache2"

USER 用户名/UID
指定运行容器时的用户

USER www

WORKDIR 路径
为后续的RUN、CMD、ENTRYPOINT指定工作目录

WORKDIR /a  (这时工作目录为/a)
WORKDIR b  (这时工作目录为/a/b)
WORKDIR c  (这时工作目录为/a/b/c)

ONBUILD 命令
指定所生成的镜像作为一个基础镜像时所要运行的命令。
当在一个Dockerfile文件中加上ONBUILD指令,该指令对利用该Dockerfile构建镜像(比如为A镜像)不会产生实质性影响
但是当编写一个新的Dockerfile文件来基于a镜像构建一个镜像(比如为B印象)时,这时构造A镜像的Dockerfile文件中的ONBUILD指令就生救了,在构建B镜像的过程中,首先会执行ONBUILD指令指定的指令,然后才会执行其它指令

ONBUILD RUN /usr/local/bin/python-build --dir /app/src

AGR
设置编译镜像时加入的参数
使用ENV指令定义的环境变量始终会覆盖同名的 ARG 指令ARG VER
RUN echo $VER

ARG build_user=www

三、制作简单镜像

vim Dockerfile
#基于的基础镜像
FROM centos:7
#维护镜像的用户信息
MAINTAINER this is apache image <wpc,2022-6-27>
#镜像操作指令安装Apache软件
RUN yum install -y httpd
#开启80端口
EXPOSE 80
#复制网站首页文件
ADD index.html /var/www/html/

Dockerfile生成镜像
docker build [选项] <上下文路径/URL/->

docker build -f /opt
docker build -t nginx:centos

Docker--Dockerfile镜像相关推荐

  1. Docker Dockerfile 定制镜像

    使用 Dockerfile 定制镜像 Dockerfile 指令详解 FROM 指定基础镜像 RUN 执行命令 构建镜像 镜像构建上下文(Context) 其它 docker build 的用法 直接 ...

  2. Docker框架使用系列教程(七)Dockerfile镜像创建

    docker框架系列教程已经到第七期了,今天我们介绍一下Dockerfile镜像的创建,重点都在内部进行了标注,喜欢记得分享收藏. Dockerfile创建镜像 Dockerfile由一行行命令语句组 ...

  3. Docker 学习笔记(Docker 架构 / 镜像 / 容器 / 常用命令 / Dockerfile / 镜像仓库)

    Docker 1. Docker 入门 1.1 Docker 是什么 1.2 Docker 和 虚拟机 1.3 镜像 容器 仓库 1.4 Docker 架构 1.5 Docker 安装 1.6 doc ...

  4. docker入门,镜像,容器,数据卷,dockerfile,docker网络,springboot微服务打包docker镜像[狂神yyds]

    docker学习大纲 docker概述 docker安装 docker命令 镜像命令 容器命令 操作命令 - docker镜像 容器数据卷 dockerfile docker网络原理 IDEA整合do ...

  5. docker安装+配置镜像+命令操作+数据卷+网络管理+DockerFile+镜像服务+项目部署+[高级使用]

    文章目录 Docker基础 一.Docker介绍 1. 什么是虚拟化 2. 什么是Docker 3. 容器与虚拟机比较 4. Docker优势 5. Docker架构 [1]镜像服务(`Image`) ...

  6. Docker Dockerfile

    Docker Dockerfile 转自:https://www.runoob.com/docker/docker-dockerfile.html 什么是 Dockerfile? Dockerfile ...

  7. docker~Dockerfile优化程序的部署

    一些理论 我们都知道docker这个容器工具可以帮助我们快速进行环境的部署,这对于运营人员来说,无疑是个福音,而这个工作大叔认为不应该是运营人员干的,而是由开发人员来做,因为只有你知道你干的是什么,你 ...

  8. docker java镜像_Docker JDK镜像

    Docker jdk镜像 说明 使用alpine-glibc作为基础镜像 JAVA JDK/JRE以1.8为基准 下载文件 创建Dockerfile JDK FROM docker.io/jeanbl ...

  9. Dockerfile镜像的制作

    Dockerfile镜像的制作 如果学习Docker,那么制作镜像这一步肯定不能少的,别人给你的是环境,而你自己做的才是你最终需要的东西,接下来就记录一下如何制作一个满足自己的镜像,我们使用docke ...

  10. Docker 制作镜像

    docker镜像制作的两种方法: 1,基于docker commit 制作镜像 2,基于dockerfile制作镜像,为主流镜像制作方式. [基于基础镜像定制后,使用commit制作自定义镜像] 1, ...

最新文章

  1. 一个三本程序猿的大厂逆袭之路
  2. 【C++】decltype作用探究,unsigned与signed混淆问题
  3. 图示评审技术_编制清单报价最需要施工技术课程中的哪些知识?
  4. phpstorm主题
  5. java中map可以为空吗_检查NavigableMap是否在Java中为空
  6. 我与无影的初体验:使用无影云桌面进行一个开源 Angular 项目的端到端测试
  7. Notification的学习,4.0前后的差别,和在设置声音的时候获取资源的uri方法
  8. MongoDB 表结构分析工具介绍 -- Variety
  9. 关于android的apk版本升级的一些建议
  10. 虚拟机安装Oracle服务器和本地Oracle安装教程
  11. CAXA中添加气动液压元件库方法
  12. 工具推荐——Snipaste
  13. SSR远程登陆服务器配置
  14. problem.conf配置内容
  15. IAR在写结构体时不提示_如何写好个人事迹?
  16. 织梦php调用模型,织梦dede新建模型中自定义联动类别调用
  17. 2022TGRS/云检测:用于遥感图像云检测的无监督域不变特征学习Unsupervised Domain-Invariant Feature Learning for Cloud Detection
  18. 【流媒体|从入门到出家】:流媒体协议—HTTP
  19. 未来计算机代替人脑吗,计算机不可能替代人脑写作
  20. 生僻字如何用计算机打出来,巧妙的运用Word输入生僻字

热门文章

  1. 敲黑板!《大数据产业发展规划(2016-2020年)》要点解读
  2. windows 多种 socket 模型的理解
  3. 酷狗社招面试 java_酷狗面试经验
  4. 文本处理算法_基于 Python 的 11 种经典数据降维算法
  5. tfboys的歌用计算机怎么弹,抖音TFBOYS第一次告白歌曲歌词完整版
  6. 【Shell】在windows下编辑shell脚本
  7. TC Games问题解答:连接、卡顿、控制视角解决方法,无需安卓模拟器玩手机游戏
  8. NOI / 1.6编程基础之一维数组01:与指定数字相同的数的个数
  9. html怎么设置一条边框线,css怎么设置边框?
  10. 【通信系统】移动通信系统基础知识