Dockerfile指令:
第一行注释,指令是大写字母开头,
FROM指令:
FROM<image>,后面跟镜像名,
FROM<image>:<tag>,后面跟镜像名和标签名,
必须是已经存在的镜像,后续指令都是基于这个镜像来执行的,这个镜像也叫基础镜像,必须是第一条非注释指令,FROM ubuntu:14.04通过镜像名和标签名指定。
MAINTAINER指令:作者信息
RUN:镜像中运行的命令。
RUN<command> :shell模式
/bin/sh -c command
RUN echo hello
RUN[“executable”,”param1”,”param2”]:exec模式
RUN [“bin/bash”,”-c”,”echo hello”]
EXPOSE:运行该镜像的容器的端口,容器运行时仍需要指定端口号,$docker run -p 80 -d dormancypress/df_test1 nginx -g “daemon off;”,也就是说在dockerfile中使用EXPOSE指定的端口只是告诉docker该容器内的应用程序会使用80端口,但是出于安全的考虑,docker并不会自动的打开端口,而需要在使用时在run命令中添加端口的映射指令。 前面讲过镜像分层的概念,每一个run指令都会在当前镜像的上层创建一个新的镜像来运行指定的命令

CMD指令用来提供容器运行的默认命令,与run类似都是执行一个命令,run的命令是在镜像构建过程中运行的,cmd是在容器运行时运行的。使用docker run启动一个容器时如果指定了容器运行时的命令,那么cmd指定的指令会被覆盖不会执行。
Cmd指令的两种模式:shell模式和exec模式
CMD [“executable”,”param1”,”param2”] (exec模式)
CND command param1 param2 (shell模式)
CMD[“param1”,”param2”],这种模式只是指定了一些参数,通常与entrypoint指令搭配使用,提供entrypoint指令的默认参数。 创建一个文件夹yw,在里面创建一个Dockerfile文件,写入命令。然后使用这个文件来构建一个镜像,
yw1989@ubuntu:~/dockerfile$ vim Dockerfile
yw1989@ubuntu:~/dockerfile$ ls
Dockerfile
yw1989@ubuntu:~/dockerfile$ docker build -t="yw" . ,yw是镜像的名字,
Successfully built ac295159e422
Successfully tagged yw:latest
构建完成后使用这个镜像来运行一个容器
yw1989@ubuntu:/home$ docker run -p 80 --name yw_jingxiang_contain1 -d yw (yw是刚才创建的镜像的名字,dockerfile已经指定了run指令,创建容器的时候就不用指定容器启动的指令了),
5336ddeca5c4b4636b026ca034371175df1ddbb2ed03048de608d4f15f16dca6 docker ps查看容器,docker top yw_jingxiang_contain1查看容器中运行的进程。$docker run -p 80 --name yw_jingxiang_contain2 -d yw /bin/bash:yw_jingxiang_contain2容器运行的是 /bin/bash这个在docker run命令中指定的命令,不运行dockerfile里面的命令了,将里面的指令覆盖了。 ENTRYPOINT指令:exec模式,shell模式
ENTRYPOINT [“executable”,”param1”,”param2”]:exec模式
ENTRYPOINT command param1 param2:shell模式
ENTRYPOINT指令跟cmd指令不同之处在于不会被docker run中指定的启动指令覆盖。如果需要覆盖ENTRYPOINT指令在docker run中指定entrypoint选项。
$docker run -p 80 --name yw_jingxiang_contain2 -d yw /bin/bash并没有覆盖dockerfile中entrypoint指令。
Cmd指令和entrypoint指令组合使用,用entrypoint指定命令用cmd指定命令的参数。 ADD,COPY : 指令,都是将文件或者目录复制到使用dockerfile构建的镜像中。文件或者目录的地址可以是本地地址也可以是远程的url。如果是本地地址是构建目录中的相对地址,对于远程url,docker并不推荐使用,更建议使用curl或者是wget之类的命令来获取文件。目标路径需要指定镜像中的绝对路径。

VOLUME[“/data”] : 像基于镜像创建的容器添加卷,一个卷可以存在一个或者多个容器的特定目录,这个目录可以绕过联合文件系统并提供如共享数据或者对数据持久化的功能。

WORKDIR指令 :在容器内部设置工作目录,CMD和ENTRYPOINT指定的命令都会在这个目录执行,在构建中为后续的指令指定工作目录。通常使用绝对路径,如果使用相对路径会一直传递下去。如下图:

ENV指令 : 用来设置环境变量,环境变量可以作用于构建和运行过程。

USER daemon:镜像以什么用户去运行。USER nginx:基于该镜像启动的容器会以nginx的身份运行,不使用USER指定用户,默认是root用户。

ONBUILD [INSTRUCTION] : 为镜像添加触发器,当一个镜像被用作其他镜像的基础镜像时,这个触发器会被执行。子镜像在构建时会插入触发器中的指令(时机)。

Dockerfile的构建过程:
1.从基础镜像运行一个容器:FROM指令指定的镜像名。
2.执行一条指令,对容器做出修改。
3.对修改后的容器执行类是connit的操作,提交一个新的镜像层。
4.根据这个新的镜像层运行一个容器。
5.继续执行dockerfile中的下一条指令,直至所有指令执行完毕。 #first dickerfile FROM ubuntu
MAINTAINER yw "yw@qq.com"
ENV date 2018
RUN apt-get update
RUN apt-get install -y nginx
EXPOSE 80 Running in 2c193a7b6028 :running in 后面的id是运行命令的容器id,返回的结果是提交后新的镜像层的id。Build最后返回建立的id。也就是前面的中间层镜像id。得到中间层镜像id后删除中间层建立的容器不删除中间层建立的镜像,也就是说可以使用docker run命令通过中间层镜像运行一个容器:Docker run -it 中间层镜像容器id /bin/bash。在这个镜像中安装nginx,可以通过whereis nginx来查看这个镜像中有没有安装nginx。中间层镜像可以查找dockerfile构建过程中的错误。 Docker会将每一步的构建的镜像当成缓存,
root@ubuntu:/yw# docker build -t="yw" .
Sending build context to Docker daemon 2.048 kB
Step 1/6 : FROM ubuntu
---> 0458a4468cbc
Step 2/6 : MAINTAINER yw "yw@qq.com"
---> Using cache
---> 359e4919da8e
Step 3/6 : ENV date 2018
---> Using cache
---> 4c23bef107fb
Step 4/6 : RUN apt-get update
---> Using cache //使用了缓存
---> 39a7fec08909
Step 5/6 : RUN apt-get install -y nginx
---> Using cache
---> 66046f80f875
Step 6/6 : EXPOSE 80
---> Using cache
---> 3037df54c783
Successfully built 3037df54c783 有些时候不想使用构建缓存,比如构建命令中包含apt-get update的时候,希望每次都去刷新apt包的缓存,每次都是最新的版本。docker build -t="yw" --no-cache . 。 查看镜像的构建过程:
$docker history [image],

Dockerfile指令:的更多相关文章

  1. docker学习笔记17:Dockerfile 指令 ONBUILD介绍

    ONBUILD指令可以为镜像添加触发器.其参数是任意一个Dockerfile 指令. 当我们在一个Dockerfile文件中加上ONBUILD指令,该指令对利用该Dockerfile构建镜像(比如为A ...

  2. docker之Dockerfile指令介绍

    Docker通过对于在Dockerfile中的一系列指令的顺序解析实现自动的image的构建 通过使用build命令,根据Dockerfiel的描述来构建镜像 通过源代码路径的方式 通过标准输入流的方 ...

  3. docker Dockerfile指令ADD和COPY的区别,添加目录方法

    docker Dockerfile指令ADD和COPY的区别,添加目录方法 ADD指令的功能是将主机构建环境(上下文)目录中的文件和目录.以及一个URL标记的文件 拷贝到镜像中.其格式是: ADD 源 ...

  4. Dockerfile指令学习 (转)

    原文地址:http://blog.csdn.net/we_shell/article/details/38445979 Dockfile是一种被Docker程序解释的脚本,Dockerfile由一条一 ...

  5. Docker学习笔记三 Dockerfile 指令 定制镜像

    本文地址:https://www.cnblogs.com/veinyin/p/10412079.html  镜像是分层存储的,每一层都是独立存在的,修改当前层并不会修改其依赖的上一层,删除某一层也只是 ...

  6. Dockerfile 指令汇总及解析

        原文地址:http://www.maoyupeng.com/dockerfile-command-introduction.html 什么是Dockerfile Dockerfile是由一系列 ...

  7. Docker基本命令与使用 —— Dockerfile指令与构建(三)

    一.Dockerfile指令上 1.指令格式 # Comment 注释, 以#开头 INSTRUCTION argument 以大写的指令+参数 #First Dockerfile 注释 FROM u ...

  8. Docker学习(三): Dockerfile指令介绍

    特别声明: 博文主要是学习过程中的知识整理,以便之后的查阅回顾.部分内容来源于网络(如有摘录未标注请指出).内容如有差错,也欢迎指正! =============系列文章============= 1 ...

  9. Dockerfile指令的使用

    关于Dockerfile Dockerfile实际上就是一系列创建Docker镜像的脚本, 虽然可以通过命令行来执行, 但是那样繁琐而且容易出错. Dockerfile指令 FROM 他的意思是在创建 ...

随机推荐

  1. Java 添加播放MIDI音乐

      Java 在多媒体处理方面的确优势不大,但是我们在程序中有些时候又需要一些音乐. 如果播放的音乐是wav等波形音频文件,又很大的话,所以背景音乐最好就是MIDI了. 网上很多播放MIDI的教程都是 ...

  2. 精读《Function Component 入门》

    1. 引言 如果你在使用 React 16,可以尝试 Function Component 风格,享受更大的灵活性.但在尝试之前,最好先阅读本文,对 Function Component 的思维模式有 ...

  3. ABP开发框架前后端开发系列---(2)框架的初步介绍

    在前面随笔<ABP开发框架前后端开发系列---(1)框架的总体介绍>大概介绍了这个ABP框架的主要特点,以及介绍了我对这框架的Web API应用优先的一些看法,本篇继续探讨ABP框架的初步 ...

  4. Network | parity bit

    奇偶校验位是一个表示给定位数的二进制数中1的个数是奇数还是偶数的二进制数.奇偶校验位是最简单的错误检测码. A parity bit, or check bit is a bit added to t ...

  5. BZOJ1009GT考试 DP + KMP + 矩陣快速冪

    @[DP, KMP, 矩陣快速冪] Description 阿申准备报名参加GT考试,准考证号为\(N\)位数\(X_1 X_2 .. X_n(0 <= X_i <= 9)\),他不希望准 ...

  6. mysql InnoDb存储引擎索引

    B+树索引:使用B+树索引查找数据时,并不能找到一个给定键值的具体行,只是找到被查找数据行所在的页,然后数据库通过把页读取到内存,再在内存中进行查找,最后得到要查找的数据. 聚集索引:按照表中主键构造 ...

  7. Android view 数据缓存

    Android中经常需要用到view数据的缓存,比如我们希望EditText 在被切到别的界面的时候,输入的数据要仍保持不变. 参考代码: /* 缓存textview */ public class ...

  8. jquery的ajax用法

    api参见:http://api.jquery.com/jquery.ajax/

  9. .Net ToString Format [转]

    源文 :http://blog.csdn.net/luyifeiniu/article/category/25663/2 stringstr1 =string.Format("{0:N1}& ...

  10. ItelliJ IDEA开发工具使用—创建一个web项目

    转   http://blog.csdn.net/wangyang1354/article/details/50452806 最近想用IDEA编辑器开发,但是平时都用MyEclipse和eclipse ...