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. HDU 2874 Connections between cities(LCA)

    题目链接 Connections between cities LCA的模板题啦. #include <bits/stdc++.h> using namespace std; #defin ...

  2. 标题:如何使用ShareSDK实现Cocos2d-x的Android/iOS分享与授权

    Cocos2DX 简介 Cocos2d-x是一套成熟的开源跨平台游戏开发框架.其引擎提供了图形渲染.GUI.音频.网络.物理.用户输入等丰富的功能,被广泛应用于游戏开发及交互式应用的构建.引擎的核心采 ...

  3. ES6之Array.includes()函数

    一.定义 includes() 方法用来判断一个数组是否包含一个指定的值,如果是返回 true,否则false. 二.语法 arr.includes(searchElement) arr.includ ...

  4. Codeforces 235 E Number Challenge

    Discription Let's denote d(n) as the number of divisors of a positive integer n. You are given three ...

  5. PageHelper分页工具

    <a>共${page.total}件商品</a>    <a>共${page.pages}页</a>    <a>当前第${page.pag ...

  6. Laravel composer自定义命令空间,方便引用第三方库

    第一步:自定义目录 在app文件夹下新建Library目录,做为第三方库的目录 第二步: 修改composer.json文件 autoload节点下的psr-4自定义命名空间 规则: key: 命名空 ...

  7. ios 6.0模拟器页面调出pop窗口消失后无法使用键盘

    ios 6模拟器上,点击事件调用出pop窗口,这个窗口新创建了window,在pop窗口消失的函数中使用了makeKeyWindow,这个是将要显示的window放到最前端.发现 屏蔽这个方法后可以了 ...

  8. Go -- LRU算法(缓存淘汰算法)(转)

    1. LRU1.1. 原理 LRU(Least recently used,最近最少使用)算法根据数据的历史访问记录来进行淘汰数据,其核心思想是“如果数据最近被访问过,那么将来被访问的几率也更高”. ...

  9. WM_SETFOCUS和WM_KILLFOCUS、WM_GETDLGCODE

      procedure WMSetFocus (var Message: TWMSetFocus); message WM_SETFOCUS; //获得焦点 procedure WMKillFocus ...

  10. odoo小数精确度

    python round() 函数     Python用于四舍五入的内建函数round() ,它的定义为 意思是, 将 小数部分保留到 ndigits 指定的 小数位,也就是 精度保持到 ndigi ...