【Application】Docker DockerFile解析(五)

DockerFile介绍

  DockerFile是用来构建Docker镜像文件,是由一系列命令和参数构成的脚步

  在docker hub 上搜索并查看centos的DockerFile如下:

    

  DockerFile基础知识

  1、每条保留字指令都必须为大写字幕且后面要跟随至少一个参数  

  2、指令按照从上到下,顺序执行

  3、#表示注释

  4、每条指令都会创建一个新的镜像层,并对镜像进行提交

  DockerFile构建过程

  1、docker从基础镜像运行一个容器

  2、执行一条指令并对容器作出修改

  3、执行类似docker commit的操作提交一个新的镜像层

  4、docker再基于刚提交的镜像运行一个新容器

  5、执行dockerfile中的下一条指令直到所有指令都执行完成

  案例:

    可以参考【Application】Docker 容器数据卷(四)中,添加容器数据卷的方式二:使用DockerFile添加,此过程对比DockerFIle的构建过程

DockerFile保留字

  1、FROM

    基础镜像,当前新镜像是基于那个镜像的

  2、MAINTAINER

    镜像维护者的姓名和邮箱地址

  3、RUN

    容器构建时需要运行的命令

  4、EXPOSE

    当前容器对外暴露一个端口

  5、WORKDIR

    指定再创建容器后,终端默认登录进来的工作目录

  6、ENV

    用来在构建镜像过程中设置环境变量

  7、ADD

    将宿主机目录下的文件拷贝进镜像且ADD命令会自动处理URL和解压tar压缩包

  8、COPY

    类似ADD,拷贝文件的目录到镜像中,将从构建上下文目录中<源路径>的文件/目录复制到新的一层的镜像内的<目标路径>位置

    用法一:COPY src dest

    用法二:COPY ["src", "dest"]

  9、VOLUME

    容器数据卷,用于数据保存和持久化工作

  10、CMD

    指定一个容器启动时要运行的命令

    Dockerfile中可以有多个CMD指令,但只有最后一个生效,CMD会被docker run之后的参数替换

  11、ENTRYPOINT

    指定一个容器启动时要运行的命令

    ENTRYPOINT的目的和CMD一样,都是在指定容器启动程序及参数

  12、ONBUILD

    当构建一个被继承的Dockerfile时运行命令,父镜像在被子继承后父镜像的onbuild被触发

  A案例-Base镜像(scratch)

    Docker Hub中99%的镜像都是通过在base镜像中安装和配置需要的软件构建出来的

1 FROM scratch

  B案例-自定义镜像mycentos

    1、编写DockerFile文件

 1 # 基础镜像 centos镜像
 2 FROM centos
 3
 4 # 镜像维护者的姓名和邮箱地址
 5 MAINTAINER H__D<H__D@163.com>
 6
 7 # 环境变量
 8 ENV MYPATH /usr/local
 9
10 # 工作目录
11 WORKDIR $MYPATH
12
13 # 构建时运行安装vim命令
14 RUN yum -y install vim
15
16 # 构建时运行安装net-tools
17 RUN yum -y install net-tools
18
19 # 当前容器对外暴露一个端口
20 EXPOSE 80
21
22 # 启动时运行命令
23 CMD echo $MYPATH
24
25 CMD echo "build success .............."
26
27 CMD /bin/bash 

    2、构建

      命令格式:docker build -t 新镜像名字:TAG .

      命令:docker build -f dockerfile2 -t test/mycentos:1.2 .

      

      

    3、运行

      命令格式:docker run -it 新镜像名字:TAG

      命令:docker run -it test/mycentos:1.2

      

    4、列出镜像的变更历史

      命令格式:docker history 镜像名:TAG

      命令:docker history test/mycentos:1.2

      

  C案例-CMD/ENTRYPOINT镜像案例

    都是指定一个容器启动时要运行的命令

    1、CMD:Dockerfile中可以有多个CMD指令,但只有最后一个生效,CMD会被docker run之后的参数替换

      1)新建一个dockerfile4,内容如下:

1 # 基础镜像 centos镜像
2 FROM centos
3
4 # 启动时运行命令
5 CMD ["/bin/echo", "Hello"]

      2)通过dockerfile4,构建test/mycmd镜像

        命令:docker build -f dockerfile4 -t test/mycmd .

      3)测试

        命令:docker run -it test/mycmd

        命令:docker run -it test/mycmd /bin/echo "ABC"

        

    2、ENTRYPOINT:可以追加参数

      1)新建一个dockerfile3,内容如下:

 1 # 基础镜像 centos镜像
 2 FROM centos
 3
 4 # 启动时运行命令
 5 ENTRYPOINT ["/bin/echo", "Hello"]
 6
 7 # docker run -it [image] 运行后输出
 8 # hello world
 9 # docker run -it [image] "命令行" 运行后输出
10 # hello 命令行

      2)通过dockerfile3,构建test/myentrypoint镜像

        命令:docker build -f dockerfile3 -t test/myentrypoint .

      3)测试

        命令:docker run -it test/myentrypoint

        命令:docker run -it test/myentrypoint "ABC"

        

  D案例-ONBUILD

    ONBUILD:当构建一个被继承的Dockerfile时运行命令,父镜像在被子继承后父镜像的onbuild被触发

    1、新建一个dockerfile5文件,内容如下:

1 # 基础镜像 centos镜像
2 FROM centos
3
4 # 被子镜像触发
5 ONBUILD RUN echo "now, build action is ok .............."
6
7 # 启动时运行命令
8 CMD ["/bin/bash"]

    2、通过dockerfile5构建test/mycentos:1.5镜像

      命令:docker build -f dockerfile5 -t test/mycentos:1.5 .

    3、新建一个dockerfile6文件,基础镜像是test/mycentos:1.5,内容如下:

1 # 基础镜像 centos镜像
2 FROM test/mycentos:1.5
3
4 # 启动时运行命令
5 CMD ["/bin/bash"] 

    4、通过dockerfile6构建test/mycentos:1.6镜像

      命令:docker build -f dockerfile6 -t test/mycentos:1.6 .

    

    通过观察,可以看到ONBUILD命令的作用

  E案例-自定义镜像Tomcat9

    

    

原文地址:https://www.cnblogs.com/h--d/p/12571827.html

时间: 2024-07-31 09:40:24

【Application】Docker DockerFile解析(五)的相关文章

8天入门docker系列 —— 第五天 使用aspnetcore小案例熟悉容器互联和docker-compose一键部署

原文:8天入门docker系列 -- 第五天 使用aspnetcore小案例熟悉容器互联和docker-compose一键部署 这一篇继续完善webnotebook,如果你读过上一篇的内容,你应该知道怎么去挂载webnotebook日志和容器的远程访问,但是这些还远不够,webnotebook 总要和一些数据库打交道吧,比如说mysql,mongodb,redis,通常情况下这些存储设备要么是以容器的方式承载,要么是由DBA在非容器环境下统一管理. 一:webnotebook连接容器redis

Spring 源码解析之DispatcherServlet源码解析(五)

Spring 源码解析之DispatcherServlet源码解析(五) 前言 本文需要有前四篇文章的基础,才能够清晰易懂,有兴趣可以先看看详细的流程,这篇文章可以说是第一篇文章,也可以说是前四篇文章的的汇总,Spring的整个请求流程都是围绕着DispatcherServlet进行的 类结构图 根据类的结构来说DispatcherServlet本身也是继承了HttpServlet的,所有的请求都是根据这一个Servlet来进行转发的,同时解释了为什么需要在web.xml进行如下配置,因为Spr

一篇不一样的docker原理解析

转自:https://zhuanlan.zhihu.com/p/22382728 https://zhuanlan.zhihu.com/p/22403015 在学习docker的过程中,我发现目前docker学习最大的障碍,不是网上的资源太少,而是网上的资源太多,资源太多带来的噪声让学习效率降低不少.而在讲解docker原理上,所有的讲解都是关于cgroups,namespace,aufs以及deviceMapper,这对于一个初学者来说,就是用一堆名词替换另一堆名词,所以我打算写一篇不涉及太多

Docker实战(五)编写Dockerfile

一.创建Dockerfile文件 首先,需要创建一个目录来存放 Dockerfile 文件,目录名称可以任意,在目录里创建Dockerfile文件: 二.Dockerfile 基本框架 Dockerfile一般包含下面几个部分: 基础镜像:以哪个镜像作为基础进行制作,用法是FROM 基础镜像名称 维护者信息:需要写下该Dockerfile编写人的姓名或邮箱,用法是MANITAINER 名字/邮箱 镜像操作命令:对基础镜像要进行的改造命令,比如安装新的软件,进行哪些特殊配置等,常见的是RUN 命令

Docker系列-第六篇DockerFile解析

1.手动编写一个dockerfile文件,当然必须要符合file的规则 2.有了这个文件,直接docker build命令执行,获得一个自定义的镜像 3.run 1.是什么 Dockerfle 是一个文本格式的配置文件, 用户可以使用 Dockerfle 来快速创建自定义的镜像. Dockerfile是用来构建Docker镜像的构建文件,是由一系列命令和参数构成的脚本. 1.1三步骤 编写Dockerfile文件 docker build docker run 2.DockerFile构建过程解

Docker 使用指南 (五)—— Dockerfile 详解

版权声明:本文由田飞雨原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/97 来源:腾云阁 https://www.qcloud.com/community 制作Docker image 有两种方式:一是使用 Docker container,直接构建容器,再导出成 image 使用:二是使用 Dockerfile,将所有动作卸载文件中,再 build 成 image.Dockerfile 的方式非常灵活,推荐使用. 本次

docker: Dockerfile命令介绍

pre.ctl { font-family: "Liberation Mono", monospace } p { margin-bottom: 0.25cm; line-height: 120% } a:link { } 前一章介绍了Dockerfile创建镜像的方法,Dockerfile文件都是一些指令,因此要掌握Dockerfile就必须了解这些指令.这一章就介绍下Dockerfile的指令. From: 功能为指定基础镜像,并且必须是第一条指令. 如果不以任何镜像为基础,那么写

Docker Dockerfile 指令

Dockerfile 指令 CMD CMD指令用于指定一个容器启动时要运行的命令.这有点儿类似于RUN指令,只是RUN指令是指定镜像被构建时要运行的命令,而CMD是指定容器被启动时要运行的命令.这和使用docker run命令启动容器时指定要运行的命令非常类似 $ sudo docker run -i -t jamtur01/static_web /bin/true 可以认为上述命令和在Dockerfile中使用如下的CMD 指令是等效的. CMD ["/bin/true"] 选项和命

Docker Dockerfile详解

dockerfike快速创建自定义的Docker镜像 一.目录 1.docker典型结构 2.指令介绍 3.创建docker镜像 二.结构 DockerFile分为四部分组成:基础镜像信.维护者信息.镜像操作指令和容器启动时执行指令.例如: #第一行必须指令基于的基础镜像 From ubutu #维护者信息 MAINTAINER docker_user [email protected] #镜像的操作指令 apt/sourcelist.list RUN apt-get update &&