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. AC日记——货车运输 codevs

    3287 货车运输 2013年NOIP全国联赛提高组  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond 题解  查看运行结果     题目描述 Descri ...

  2. Spring Tool Suite(STS)安装

    Spring Tool Suite是一个基于Eclipse的开发环境,可以自定义用于开发Spring应用程序.它提供了一个随时可用的环境来实现,调试,运行和部署Spring应用程序,包括Pivotal ...

  3. HDU 5794 A Simple Chess(杨辉三角+容斥原理+Lucas定理)

    题目链接 A Simple Chess 打表发现这其实是一个杨辉三角…… 然后发现很多格子上方案数都是0 对于那写可能可以到达的点(先不考虑障碍点),我们先叫做有效的点 对于那些障碍,如果不在有效点上 ...

  4. 一次完整的http请求过程以及网络I/O模型select、epoll

    a.一次完整的http请求过程 1.域名解析,得到域名对应的IP; 2.三次握手,客户端与服务器通过socket建立TCP/IP连接; 3.浏览器向服务器发送http请求,如:GET/index.ht ...

  5. kafka技术分享02--------kafka入门

    kafka技术分享02--------kafka入门 1. 消息系统 ​ 所谓的Messaging System就是一组规范,企业利用这组规范在不同的系统之间传递语义准确对的消息,实现松耦合的异步数据 ...

  6. arcgis andriod开发程序实例,有图有真相

    本程序使用Google公司最新开发工具andriod studio开发,实现了地图的加载,放大,缩小,GPS定位,画点.线,面工具,本程序有偿提供源代码 主界面,加载tpk切片 放大: 加载geoda ...

  7. Unity -- Collider(碰撞器与触发器)

    (2d与3d的Collider可以相互存在,但是无法相互协作,如2d是无法检测3d的,反之,一样) 在目前掌握的情况分析,在Unity中参与碰撞的物体分2大块:1.发起碰撞的物体.2.接收碰撞的物体. ...

  8. 深入理解Activity启动流程(一)–Activity启动的概要流程

    概述 Android中启动某个Activity,将先启动Activity所在的应用.应用启动时会启动一个以应用包名为进程名的进程,该进程有一个主线程,叫ActivityThread,也叫做UI线程. ...

  9. jmeter的master、slave模型启动方法

    机器A为master:机器B为slave:可以一个master挂多个slave,方法就是-R参数后面跟一个逗号分割的IP列表 slave启动命令:./jmeter-server -Djava.rmi. ...

  10. vdWebControl.js去水印

    vdWebControl.js可以在浏览器中展示cad图形(须要使用其自家的转换工具把cad转换为vds格式.工具免费,但转换完成后的文件带水印信息),支持编辑图形. vdWebControl.js试 ...