自定义镜像-------通过dockerfile创建镜像
创建镜像的方式:
1.dockerfile最基本的方式 最常用的方式
2.docker pull 拉取的是最基础的镜像,只能做基础功能,没有定制化的功能
3.基于基础镜像,创建好了容器之后在容器内部进行定制化的操作,然后导出镜像,下一次继续使用
基于dockerfile创建:
联合文件系统:UionFS
这个是DOKER镜像的基础,镜像通过分层来进行集成.继续基础可以制作各种具体的应用镜像。特性:一次性同时的加载多个文件系统,但是从外看至能看一个文件系统.文件系统叠加。
镜像加载的原理:
--层一层的文件系统自称的
rootfs:根文件系统,包含了一个完整的文件系统(操作系统),包括了所有的文件和目录。以及相关的权限和用户等信息,
运行容器时,整个的根文件系统就会整个被使用,作为应用的运行的环境。
bootfs:引导文件系统启动根系统时需要加载的核心文件。
dockfile定制化镜像:定制每一层需要添加的配置和文件。把每一层的修改,安装,构建和操作都写入到一个脚本。
用脚本来进行创建镜像。
这个脚本就是dockerfile
dockfile分为四个部分:
1、基础镜像信息 底层
2、维护者信息(可有可无)
3、镜像的操作指令和相关配置
4、容器启动时执行的命令
可以支持#开头作为注释
dockerfile的命令:
FROM: 永远是整个脚本第一个语法,指定定制镜像的基础操作系统。
MAINTAINER: 维护者信息,可以不写 新版本用LABEL来代替了
RUN: 在基础镜像上执行的命令,然后把运行结果整合到新镜像当中。RUN就是一个镜像的分层 run越多,分层就越多,镜像越大。为了控制镜像的大小,多个RUN尽可能的写在一个RUN里面
ENTRYPOINT:指定容器在启动时执行的命令或者参数
CMD:指定容器在启动时执行的命令或者参数
EXPOSE:指定容器对外暴露的端口号
ENV: 用来设置基础操作系统的环境变量,以便RU命令使用或者新镜像使用,就是给系统添加环境变量。
ADD:支持URL从网络下载文件,也可以对压缩文件进行解压
COPY: 只能复制本地文件(宿主机文件)到镜像的目标为止
VOLUME: 创建一个容器内的挂载点,不是和宿主机进行挂载。
USER: 设置运行镜像时用户
WORKDIR: 执行容器的工作目录,相当于切换到这个目录,在这个目录下做指定的操作。
ONBUILD: 指定一个镜像作为另一个镜像构建的基础时需要运行的命令。
ARG: ARG用来传参数,用户传递的参数,ENV是容器内部的变量
ENTRYPOINT和CMD的区别
1、 cmd可以把参数传递给ENTRYPOINT
2、 多个ENTRYPOINT和多个CMD只会运行最后一个(一个dockerfile当中只会有一个ENTRYPOINT和一个CMD)
3、 ENTRYPOINT的指令不会被覆盖,CMD的指令如果在docker run后面加上输出,会被覆盖。
4、 ENTRYPOINT和CMD的指令在容器启动时执行,都会成为容器的主进程。主进程负责接收信号,处理容器的声明周期,容器退出,容器也将终止运行。
COPY和ADD的区别
COPY和ADD都可以把本地文件复制到镜像中,但是官方推荐如果是复制使用COPY
区别:
ADD可以解压。如果是一个压缩文件,ADD在复制之后会自动解压(tar.gz tar.gz2)支持URL路径下载源文件。支持下载,但是不能解压了。通过URL拷贝的文件无法自动解压。
COPY只能复制,不能解压,而且只能是本地文件,不支持URL路径
RUN命令的优化
主要是减少镜像的层数,把多个RUN命令写在一块。
1、 &&符号:
RUN yum -y install nginx && make -j 4 && make install
前一个命令执行成功才会执行下一个命令
2、 ;符号:了解即可
RUN yum -y install nginx ; make -j 4 ; make install
执行失败也会执行下一个
3、 ||符号:逻辑或。了解即可
RUN yum -y install nginx || make -j 4 || make install
4、 \符号:可以理解为换行
RUN yum -y install nginx \
make -j 4 \
make install
提高可读性
Dockerfile创建镜像
所有的Dockerfile都叫Dockerfile
FROM centos:7
MAINTAINER "this is my docker <zyg>"
ENTRYPOINT ["echo","hello"]
CMD ["world"]
docker build -t centos7:test .
#.:使用当前dockerfile文件