dockerfile:创建镜像的方式,船舰自定义的镜像

dockerfile:创建镜像的方式,船舰自定义的镜像

包括配置文件,挂载点,对外暴露的端口,设置环境变量

docker创建镜像的方式

1、基于已有镜像进行创建。

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

2、基于模板进行创建

3、dockerfile

联合文件系统(UnionFS),docker镜像的基础

镜像通过分层进行继承,特性:一次同时可以加载多个文件系统,但是从外面来看,就是一个文件系统。

docker镜像实际上就是由一层一层的文件系统组成,这种层级的文件系统就是UnionFS

每一层都是layers,每一层都包含文件系统的一部分,这些层次叠加在一起,最终形成的就是rootfs

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

rootfs:即使容器的操作系统,载dockerfile中,我们可以自己指定

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

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

dockerfile:创建镜像的方式,船舰自定义的镜像_第1张图片

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

镜像层会被缓存和复层

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

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

1、touch 123

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

dockerfile的结构:

1、基础镜像信息

2、维护者信息

3、镜像的操作指令

4、容器启动时,执行的命令

nginx定义好了容器执行的命令 /bin/bash,覆盖了容器内的标准输出

dockerfile的语法

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

MAINTAINER:指定维护者信息(可有可无)

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

ENRYPOINT:设置容器运行时的默认命令(理解为容器内部运行的主程序)

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

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

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

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的指令在容器启动时执行,都会成为容器的主进程,主进程负责接收信号,处理容器的声明周期,主进程退出,容器也讲终止运行

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 \

&& maker -j 4 \

&& make install

可读性更高

copy和add之间区别

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

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

copy只能复制,而且只能是本地文件,不支持URL路径

centos7构建一个apache的dockerfile(编译安装):

dockerfile:创建镜像的方式,船舰自定义的镜像_第2张图片

dockerfile:创建镜像的方式,船舰自定义的镜像_第3张图片

docker build -t nginx:wqb5 . dockerfile:创建镜像的方式,船舰自定义的镜像_第4张图片

docker run -itd --name nginx8 -p 1212:80 nginx:wqb5 dockerfile:创建镜像的方式,船舰自定义的镜像_第5张图片

FROM centos:7 AS first
MAINTAINER "this is my apache "
RUN yum -y install gcc gcc-gcc+ make pcre pcre-devel expat-devel perl
ADD apr-1.6.2.tar.gz /opt
ADD apr-util-1.6.0.tar.gz /opt
ADD httpd-2.4.29.tar.bz2 /opt
RUN mv /opt/apr-1.6.2 /opt/httpd-2.4.29/srclib/apr && mv /opt/apr-util-1.6.0 /opt/httpd-2.4.29/srclib/apr-util &&\
cd /opt/httpd-2.4.29 &&\ ./configure --prefix=/usr/local/httpd --enable-so --enable-rewrite --enable-charset-lite --enable-cgi &&\
make -j 4 && make install

#二层构建:

FROM centos:7

COPY --from=first /usr/local/httpd /usr/local/httpd

RUN yum -y install pcre pcre-devel expat-devel perl

EXPOSE 80
CMD ["/usr/local/httpd/bin/apachectl","-D","FOREGROUND"]

你可能感兴趣的:(linux,运维,服务器)