Dockerfile:创建镜像,创建自定义的镜像。

Docker的创建镜像的方式:
  1. 基于已有镜像进行创建。

   根据官方提供的镜像源,创建镜像,然后拉起容器。是一个白板,只能提供基础的功能,扩展性的功能还是需要自己定义(进入容器进行操作)

 基于模板进行创建:

     

 下载下来的模板导入到本地      run起来。

Dockerfile

   联合文件系统(UnionFS),docker镜像的基础,镜像通过分层来进行集成,特性:一次同时加载多个文件系统,但是从外面来看,就是一个文件系统。

   Docker镜像实际上就是一层一层的文件系统组成,这种层级的文件系统就是UnionFS。每一层都是layers,每一层都包含文件系统的一部分,这些层次叠加在一起,最终形成的就是rootfs。

Dockerfile:创建镜像,创建自定义的镜像。_第1张图片

Bootfs:宿主机提供的内核和引导程序。

Roosfs:就是容器的操作系统,在dockerfile中,我们可以自己指定。

Rootfs是多个基础镜像和应用镜像结合起来的只读层,镜像实际上就是一个只读文件。

容器基于镜像实例,运行起来之后,容器变成可读可写层。

在dockerfile 当中创建一个指定都是一个镜像层。

镜像层会被缓存和复用。

1-4将直接完成,继续运行5-6

一旦有一层镜像失败,那么所有的镜像层都会失败,镜像也不会创建。

镜像层是不可变的,你在某一层当中添加一个新的命令,但是下一层删除了指令,镜像中基于这个命令创建的文件依然存在,但是在容器中看不见。

Dockerfile的核心:用户个性化定制docker的镜像。

Dockerfile的结构:
  1. 基础镜像信息
  2. 维护者信息
  3. 镜像的操作指令
  4. 容器启动时执行的命令。
Dockerfile的语法:

FROM:指定基础镜像信息,指定容器的操作系统。

MAINTAINER:指定维护者信息(可有可无,可以不写)。

RUN:在基础的镜像上执行的命令,每个run就是一层,分层越多,镜像也大。

ENTRYPOINT:设置容器运行时是默认命令(容器内部运行的主程序)

CMD:指定容器运行时间的默认命令(docker run /bin/bash 后面加了其他的命令,cmd的指将会被覆盖。)

EXPOSE:暴漏端口(指定容器的运行端口)

ENV:设置变量环境,环境变量可以被PUA命令使用(声明容器运行需要的环境斌环境)

ADD:复制,解压。解压不支持.zip和.tar  tar.gz  tar.bz2 支持url地址解压和复制(解压)

COPY:复制文件,不能解压,而且只能复制蹦迪文件,文件要和dockerfile在一个节目(官方推荐复制利用copy)

VOLUME:创建一个容器内的挂载点,即可以为宿主机挂载,也可以提供容器挂载。

USER:设置运行镜像时使用的用户或者UID(可以不加)

WORKDIR:为后续指令设置的工作目录

ONBUILD :这个镜像可以被其他镜像引用,需要这个命令。

ARG:传参,用于创建容器时,传递参数。ENV用于容器运行时设置环境变量。

CMD和ENTRYPOINT的区别:

都是可以作为容器启动时的默认命令。

区别:

  1. cmd可以吧参数传给ENTRYPOINT
  2. 多个ENTRYPOINT和多个cmd只会运行最后一个(一个dockerfile当中只会有一个ENTRYPOINT和cmd)
  3. ENTRYPOINT的指令不会被覆盖,cmd的指令如果在docker  run 的后面加上输出,会被覆盖。
  4. ENTRYPOINT和cmd的指令在容器启动时执行,都会成为容器的主进程。主进程负责接受信号,处理容器的生命周期,主进程退出,容器也将终止运行。

Dockerfile:创建镜像,创建自定义的镜像。_第2张图片

Dockerfile:创建镜像,创建自定义的镜像。_第3张图片

Run 命令的优化:

主要是减少镜像的层数: 把多个run命令写在一块。

&&符号:

RUN yum -y install nginx && make -j 4 && make install

 注意一点前一个命令执行成功才会执行下一个。

; 符号:

RUN yum -y install nginx ; make -j 4 ;make install

 不管前一个命令是否成功,后面的命令都会执行。

|| :

RUN yum -y install nginx || make -j 4

如果前面一个命令执行失败,才会执行下一个命令。

反斜杠 \ :换行

RUM yum -y install nginx \

&& make -j 4 \

&& make install

可读性高。

Copy和add区别:

Copy和add都可以吧本地文件复制到镜像中,但是官方推荐如果是复制,使用copy

区别:

Add可以解压,如果是一个压缩文件,add在复制之后会自动解压。(tar.gz 和 tar.bz2)可以支持URL下载源文件,只能支持下载,但是不会解压。通过URL拷贝的文件无法自动解压。

Copy只能复制,不能解压。而且只能是本地文件,不支持URL路径。

基于centos7 构建一个Apache的dockerfile(编译安装):

Dockerfile:创建镜像,创建自定义的镜像。_第4张图片

Dockerfile:创建镜像,创建自定义的镜像。_第5张图片

如何基于镜像的二次构建。

Dockerfile:创建镜像,创建自定义的镜像。_第6张图片

Dockerfile:创建镜像,创建自定义的镜像。_第7张图片

你可能感兴趣的:(docker)