织梦网站手机版怎么做,新站突然网站停止收录,工业产品设计网站推荐,怎么推广网站文章目录 简介构建的三步骤Docker执行Dockerfile的大致流程DockerFile常用保留字指令创建第一个Dockerfile镜像的缓存特性 Docker file 解析 简介
Dockerfile是用来构建Docker镜像的文本文件#xff0c;是由一条条构建镜像所需的指令和参数构成的脚本#xff0c;记录了镜像构… 文章目录 简介构建的三步骤Docker执行Dockerfile的大致流程DockerFile常用保留字指令创建第一个Dockerfile镜像的缓存特性 Docker file 解析 简介
Dockerfile是用来构建Docker镜像的文本文件是由一条条构建镜像所需的指令和参数构成的脚本记录了镜像构建的所有步骤。Dockerfile中每一个指令都会创建一个镜像层上层是依赖于下层的。Docker会缓存已有镜像的镜像层构建新镜像时如果镜像层已经存在就直接使用无须重新创建。无论什么时候只要某一层发生变化其上面所有层的缓存都会失效。也就是说如果我们改变Dockerfile指令的执行顺序或者修改或添加指令都会使缓存失效。
构建的三步骤
· 编写Dockerfile文件 · Docker build命令构建镜像 · Docker run依镜像运行容器实例
Docker执行Dockerfile的大致流程
Docker按顺序运行指令。一个Dockerfile 必须 从指令开始FROM。 1docker从基础镜像运行一个容器 2执行一条指令并对容器作出修改 3执行类似docker commit的操作提交一个新的镜像层 4docker再基于刚提交的镜像运行一个新容器 5执行dockerfile中的下一条指令直到所有指令都执行完成
看法 从应用软件的角度来看Dockerfile、Docker镜像与Docker容器分别代表软件的三个不同阶段
Dockerfile是软件的原材料Docker镜像是软件的交付品Docker容器则可以认为是软件镜像的运行态也即依照镜像运行的容器实例 Dockerfile面向开发Docker镜像成为交付标准Docker容器则涉及部署与运维三者缺一不可合力充当Docker体系的基石。 DockerFile常用保留字指令
该指令不区分大小写。但是惯例是让他们 为大写以便更轻松地将它们与参数区分开来。
· FROM 基础镜像当前新镜像是基于哪个镜像的指定一个已经存在的镜像作为模板第一条必须是from
· MAINTAINER 镜像维护者的姓名和邮箱地址
· RUN RUN是在 docker build时运行
· EXPOSE 当前容器对外暴露出的端口
· WORKDIR 指定在创建容器后终端默认登陆的进来工作目录一个落脚点
· USER 指定该镜像以什么样的用户去执行如果都不指定默认是root
· ENV 用来在构建镜像过程中设置环境变量
ENV MY_PATH /usr/mytest
这个环境变量可以在后续的任何RUN指令中使用这就如同在命令前面指定了环境变量前缀一样
也可以在其它指令中直接使用这些环境变量
比如WORKDIR $MY_PATH· ADD 将宿主机目录下的文件拷贝进镜像且会自动处理URL和解压tar压缩包
· COPY 类似ADD拷贝文件和目录到镜像中。 将从构建上下文目录中 源路径 的文件/目录复制到新的一层的镜像内的 目标路径 位置
· COPY src dest COPY [src, dest] src源路径源文件或者源目录 dest目标路径容器内的指定路径该路径不用事先建好路径不存在的话会自动创建。
· VOLUME 容器数据卷用于数据保存和持久化工作
· CMD 指定容器启动后的要干的事情注意
· Dockerfile 中可以有多个 CMD 指令但只有最后一个生效CMD 会被 docker run 之后的参数替换
· 参考官网Tomcat的dockerfile演示讲解参考tomcat8的dockerfile入门 · https://github.com/docker-library/tomcat
命令格式 ENTRYPOINT可以和CMD一起用一般是变参才会使用 CMD 这里的 CMD 等于是在给 ENTRYPOINT 传参。
创建第一个Dockerfile
使用dockerfile构建ubuntu镜像(带有vim命令)
rootubuntu:#pwd 1
/mydocker
rootubuntu:# ls
Dockerfile 2
rootubuntu:# docker build -t ubuntu:1.1 . 3
Sending build context to Docker daemon 32.26 kB 4
Step 1 : FROM ubuntu 5
--- 01f29b872827
Step 2/2 : RUN apt-get update apt-get install -y vim 6
--- Running in 19c79c1861f7 7
......
Setting up vim (2:8.2.3995-1ubuntu2.11) ...
--- 964d76ff07b0 8
Removing intermediate container 19c79c1861f7 9
Successfully built 964d76ff07b0 10rootubuntu:# 1 当前目录为 /root。 2 Dockerfile准备就绪。 3 运行docker build命令-t将新镜像命名为ubuntu-with-vi-dockerfile命令末尾的指明build context为当前目录。Docker默认会从build context中查找Dockerfile文件我们也可以通过-f参数指定Dockerfile的位置。 4 从这步开始就是镜像真正的构建过程。首先Docker将build context中的所有文件发送给Docker daemon。build context为镜像构建提供所需要的文件或目录。 Dockerfile中的ADD、COPY等命令可以将build context中的文件添加到镜像。此例中build context为当前目录 /root该目录下的所有文件和子目录都会被发送给Docker daemon。 所以使用build context就得小心了不要将多余文件放到build context特别不要把 /、/usr作为build context否则构建过程会相当缓慢甚至失败。 5 Step 1执行FROM将Ubuntu作为base镜像。 Ubuntu镜像ID为01f29b872827。 6 Step 2执行RUN安装vim具体步骤为 ⑦ ⑧ ⑨。 7 启动ID为19c79c1861f7的临时容器在容器中通过apt-get安装vim。 8 安装成功后将容器保存为镜像其ID为964d76ff07b0。 这一步底层使用的是类似docker commit的命令。 9 删除临时容器19c79c1861f7。 10 镜像构建成功 通过docker images查看构建好的镜像信息如图所示。 查看镜像的分层结构 docjer history centos:1.1 注:missing表示无法获取IMAGE ID 通常从Docker Hub下载的镜像会有这个问题
镜像的缓存特性
Docker会缓存已有镜像的镜像层构建新镜像时如果镜像层已经存在就直接使用无须重新创建。
· 优点 · 在执行docker run的时候可以指定 ENTRYPOINT 运行所需的参数。 · 注意 · 如果 Dockerfile 中如果存在多个 ENTRYPOINT 指令仅最后一个生效。