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. MongoDB管理与监控

    https://blog.csdn.net/Chen_Victor/article/details/74855050 https://www.cnblogs.com/zhangyinguang/p/5 ...

  2. (42)C#Stopwatch类(计算程序运行时间)

    引入命名空间 using System.Diagnostics; static void Main(string[] args) { Stopwatch sw = new Stopwatch(); s ...

  3. 牛客网 牛客练习赛7 D. 珂朵莉的无向图(多源BFS)

    题目链接  Problem D 比赛的时候完全想不到 直接对给定的这些点做多源$BFS$,把给定的这些点全都压到队列里,然后一个个做. 最后统计被访问的点的个数即可. #include <bit ...

  4. 精读《Function Component 入门》

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

  5. mysql 设置不了短串密码怎么办 You must reset your password using ALTER USER statement before executing this statement.

    centos7+ 安装 mysq 5.7 https://www.linuxidc.com/Linux/2016-09/135288.htm set global validate_password_ ...

  6. [转] DataSet的的几种遍历

    1. 多表多行多列的情况 foreach (DataTable dt in YourDataset.Tables) //遍历所有的datatable { foreach (DataRow dr in ...

  7. vbox在共享文件夹设置链接报错Protocol error问题

    环境: 基于VBox 的 vagrant (centos版本)开发环境. 问题: Virtualbox 虚拟机(centOS)中,在进行go程序编译的时候,需要设置一个链接符,然后得到了如下的错误: ...

  8. 了解使用Android ConstraintLayout

    说明 Google I/O 2016 上发布了 ConstraintLayout, 简直是要变革 Android 写界面方式. 于是第二天我立即找到相关文档尝试, 这是官方提供的 Codelab 项目 ...

  9. windows pipe

    管道分为 匿名管道 和 命名管道 . 1.匿名管道仅仅能在父子进程间进行通信.不能在网络间通信,并且传输数据是单向的.仅仅能一端写,还有一端读. 2.命令管道能够在随意进程间通信.通信是双向的,随意一 ...

  10. AngularJS的控制器示例

    代码下载:https://files.cnblogs.com/files/xiandedanteng/angularjsCtrl.rar 代码: <!DOCTYPE HTML PUBLIC &q ...