1、dockerfiel是什么

1、是什么

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

2、构建三步骤

编写Dockerfile文件
docker build
docker run

3、文件什么样???

centos 199MB

它的dockerfile如何描写的

以我们熟悉的CentOS为例 
https://hub.docker.com/_/centos/

https://github.com/CentOS/sig-cloud-instance-images/blob/f32666d2af356ed6835942ed753a4970e18bca94/docker/Dockerfile

# scratch 基础镜像类
# maintainer 作者+邮箱
# ADD 添加并解压,压缩包
# label 说明
# 默认cmd shell: bin/bash docker run -it centos
docker run -it centos /bin/bashc

警醒:

90后拼的是执行力与自我驱动力

不会怎么办,立刻现在马上去学

不懂怎么办,立刻现在马上去做

做着做着感觉就来了

2、DockerFile构建过程解析

类的加载顺序

1、Dockerfile内容基础知识

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

2:指令按照从上到下,顺序执行
3:#表示注释
4:每条指令都会创建一个新的镜像层,并对镜像进行提交

字指令 FROM等

2、Docker执行Dockerfile的大致流程

(1)docker从基础镜像运行一个容器
(2)执行一条指令并对容器作出修改
(3)执行类似docker commit的操作提交一个新的镜像层
(4)docker再基于刚提交的镜像运行一个新容器
(5)执行dockerfile中的下一条指令直到所有指令都执行完成

FROM scratch
MAINTAINER The CentOS Project <cloud-ops@centos.org>
ADD c68-docker.tar.xz /
LABEL name="CentOS Base Image" \
vendor="CentOS" \
license="GPLv2" \
build-date="2016-06-02" # Default command
CMD ["/bin/bash"]

3、小总结

从应用软件的角度来看,Dockerfile、Docker镜像与Docker容器分别代表软件的三个不同阶段,
* Dockerfile是软件的原材料
* Docker镜像是软件的交付品
* Docker容器则可以认为是软件的运行态。
Dockerfile面向开发,Docker镜像成为交付标准,Docker容器则涉及部署与运维,三者缺一不可,合力充当Docker体系的基石。

(1) Dockerfile,需要定义一个Dockerfile,Dockerfile定义了进程需要的一切东西。

Dockerfile涉及的内容包括执行代码或者是文件、环境变量、依赖包、运行时环境、动态链接库、操作系统的发行版、服务进程和内核进程(当应用进程需要和系统服务和内核进程打交道,这时需要考虑如何设计namespace的权限控制)等等;
 
(2)Docker镜像,在用Dockerfile定义一个文件之后,docker build时会产生一个Docker镜像,当运行 Docker镜像时,会真正开始提供服务;
 
(3)Docker容器,容器是直接提供服务的。

3、DockerFile体系结构(保留字指令)

1、保留字指令

RUN
  容器构建时需要运行的命令
ENV
  用来在构建镜像过程中设置环境变量
WORKDIR
  指定在创建容器后,终端默认登陆的进来工作目录,一个落脚点
MAINTAINER
  镜像维护者的姓名和邮箱地址
FROM
  基础镜像,当前新镜像是基于哪个镜像的
EXPOSE
  当前容器对外暴露出的端口
ADD
  将宿主机目录下的文件拷贝进镜像且ADD命令会自动处理URL和解压tar压缩包
RUN
  容器构建时需要运行的命令
ENTRYPOINT
  指定一个容器启动时要运行的命令
  ENTRYPOINT 的目的和 CMD 一样,都是在指定容器启动程序及参数
VOLUME
  容器数据卷,用于数据保存和持久化工作
COPY
  类似ADD,拷贝文件和目录到镜像中。 将从构建上下文目录中 <源路径> 的文件/目录复制到新的一层的镜像内的 <目标路径> 位置
  COPY src dest
  COPY ["src", "dest"]
ENV
  用来在构建镜像过程中设置环境变量
WORKDIR
  指定在创建容器后,终端默认登陆的进来工作目录,一个落脚点
MAINTAINER
  镜像维护者的姓名和邮箱地址
ONBUILD
  当构建一个被继承的Dockerfile时运行命令,父镜像在被子继承后父镜像的onbuild被触发
FROM
  基础镜像,当前新镜像是基于哪个镜像的
CMD
  指定一个容器启动时要运行的命令
  Dockerfile 中可以有多个 CMD 指令,但只有最后一个生效,CMD 会被 docker run 之后的参数替换
ENTRYPOINT
  指定一个容器启动时要运行的命令
  ENTRYPOINT 的目的和 CMD 一样,都是在指定容器启动程序及参数
ONBUILD
  当构建一个被继承的Dockerfile时运行命令,父镜像在被子继承后父镜像的onbuild被触发

2、解析

RUN
  执行的linux的命令

echo ‘success............’

EXPOSE

WORKDIR

没有指定,默认为 /

ENV

ENV MY_PATH /usr/mytest
这个环境变量可以在后续的任何RUN指令中使用,这就如同在命令前面指定了环境变量前缀一样;
也可以在其它指令中直接使用这些环境变量,
 
比如:WORKDIR $MY_PATH

VOLUME

CMD

ONBUILD

子镜像运行中,如果父镜像想干点收尾的工作,可以填写这个

4、ADD和COPY

ADD比copy强大,add是复制并解压,压缩包

5、CMD和ENTRYPOINT

CMD只有最后一个生效,相当于 替换 echo 1 > test.txt

自己定义的dockerFile会把docker内部的dockerfile中的cmd命令替换

CMD 会被 docker run 之后的参数替换???等会讲

ENTRYPOINT  相当于追加命令,都要执行    echo 2 >> test.txt

6、小总结

上面的理论知识。官网都有,官方文档翻译过来的

学了,你来给我写个,有屁用,怎么用

看看官网就会,翻翻源码

尚硅谷,案例来介绍,这些所有的字指令

重点是:

现在谁没有学习能力

重要的是怎么练,运用知识的能力

不要浮躁,认认真真

6、DockerFile解析:三步走、保留字指令的更多相关文章

  1. Python学习笔记(一)三步走安装pip

    pip是用来方便地管理Python的第三方包的,由于此前玩Python仅仅是浅尝辄止,用的是python(x,y),但是这里并不代表你想用什么包都能从里面找到的,所以我把python(x,y)卸了,然 ...

  2. git 三步走

    git三步走: git add .        (注:别忘记后面的.,此操作是把Test文件夹下面的文件都添加进来) git commit  -m  "提交信息"  (注:“提交 ...

  3. Knative 实战:三步走!基于 Knative Serverless 技术实现一个短网址服务

    短网址顾名思义就是使用比较短的网址代替很长的网址.维基百科上面的解释是这样的: 短网址又称网址缩短.缩短网址.URL 缩短等,指的是一种互联网上的技术与服务,此服务可以提供一个非常短小的 URL 以代 ...

  4. 三步走起 提升 iOS 审核通过率 上篇

    <ignore_js_op> Bugly 技术干货系列内容主要涉及移动开发方向,是由 Bugly 邀请腾讯内部各位技术大咖,通过日常工作经验的总结以及感悟撰写而成,内容均属原创,转载请标明 ...

  5. 用powershell+excel行列转置三步走

    本文重点讲解第一步,手动在excel表中输入公式,或者用powershell自动输入公式. 第二步,用powershell向excel中写入数据,略. 第三步,用powershell从excel中读取 ...

  6. 三步走起 提升 iOS 审核通过率 下篇

    根据2015年的数据统计情况,并结合<苹果应用商店审核指南>,互娱 iOS 预审组通过细分将预审工作划为3大模块:客户端资源检查.应用内容检查和提审资源检查. 在上一篇文章中,Bugly ...

  7. mongodb安装和配置三步走

    最近在重新学习node,所以和同事一起搞了个模仿新浪微博的项目,项目刚开始,所以其他的东西就暂时先不提.这里介绍下mongodb的安装.直接搜索可以看到很多介绍,但是我第一次是失败了,不过看了好几个还 ...

  8. 【php学习】图片处理三步走

    前两天要对一张图片进行处理,其实很简单,就是在图片上加上字符串,一个图片而已,但是自己如同得了短暂性失忆似的,图片操作的函数一个都想不起来.所以就抽空整理了一下图片操作函数. 1. 创建画布 从文件中 ...

  9. 轻松搞定Struts 2:三步走上手小入门

    零.Struts 2是啥? SSH.SSM.SSI如雷贯耳,Struts 2 —— 是的,就这样了... 一.Hello Struts2 1.核心包 2.struts.xml核心控制器配置 <f ...

随机推荐

  1. java中JDBC是什么?

    [学习笔记] JDBC是什么? JDBC即(java database connectivity数据连接).JDBC是Sun公司编的一堆类和方法,都封装在java.sql包中.你可以利用这堆类和方法来 ...

  2. 补码一位乘法 Booth算法 Java简易实现

    本文链接:https://www.cnblogs.com/xiaohu12138/p/11955619.html. 转载,请说明出处. 本程序为简易实现补码一位乘法,若代码中存在错误,可指出,本人会不 ...

  3. 报错Could not find resource cn/smbms/dao/provider/ProviderMapper.xml

    原因:由于idea不会编译src下的java目录下的xml文件,所以找不到xml文件 方案一:在pom.xml中添加如下内容 <build> <resources> <r ...

  4. Creating mailbox file: 文件已存在

    原来linux下添加用户后,会在系统里自动加一个邮箱(系统邮箱),路径是:/var/spool/mail/用户名.可以直接用命令#rm -rf /var/spool/mail/用户名 这样就可以再次添 ...

  5. 12.如何设置ulimit

    ulimit -a用来显示当前的各种用户进程限制 修改所有 linux 用户的环境变量文件:vi /etc/profileulimit -u 10000              #用户的最大进程数u ...

  6. Java多线程(十):BlockingQueue实现生产者消费者模型

    BlockingQueue BlockingQueue.解决了多线程中,如何高效安全"传输"数据的问题.程序员无需关心什么时候阻塞线程,什么时候唤醒线程,该唤醒哪个线程. 方法介绍 ...

  7. 搞懂String、StringBuffer、StringBuilder的区别

    String.StringBuffer.StringBuilder有什么区别呢? 1.String: 首先String是不可变的这是家喻户晓的,它的底层是用一个final修饰的char数组来保存数据的 ...

  8. 如何对Nginx日志文件进行切割保存

    日积月累下,日志文件会越来越大,日志文件太大严重影响服务器效率,须要定时对日志文件进行切割. 切割的方式有按月切割.按天切割.按小时切割,一般都是按天切割. 那么如何进行切割呢? 思路: 创建日志文件 ...

  9. Python学习记录3-函数参数详解

    参数详解 参数分类 普通参数 默认参数 关键字参数 收集参数 普通参数 定义时直接定义变量名 调用的时候直接把变量或者值放入指定位置 def 函数名 (参数1, 参数2, ....): 函数体 # 调 ...

  10. Delphi 编写线程函数