dockerfile:创建镜像,创建自定义的镜像
包括配置文件,挂载点,对外暴露的端口,设置环境变量
1、基于已有的镜像进行创建。根据官方提供的镜像源,创建镜像,然后拉起容器。是一个白板,只能提供基础的功能,扩展性的功能还是需要自定义(进入容器进行操作)
2、基于模板进行创建。
需要先导入到本地
3、dockerfile。联合文件系统(UnionFS),docker镜像的基础,镜像通过分层来进行集成,特性就是一次同时加载多个文件系统,但是从外面来看,就是一个文件系统
docker实际上就是由一层一层的文件系统组成,这种层级的文件系统就是UnionFS。每一层都是layers,每一层都包含文件系统的一部分,这些层次叠加在一起,最终形成的就是rootfs
bootfs:宿主机提供的内核和引导程序
rootfs:就是容器的操作系统,在dockerfile中,我们可以自己指定
rootfs是多个基础镜像和应用镜像结合起来的只读层,镜像实际上就是一个只读文件
容器基于镜像实例,运行起来之后,容器变成可读可写层
在dockerfile当中每创建一个指定都是一个镜像层
镜像层会被缓存和复用(例如本来在下载一到六层,在第四层这步安装失败,当你后面解决之后,再运行将直接跳过前三层,从第四层开始,这就是缓存)
一旦有一层镜像失败,那么所有的镜像层都会失败,镜像也不会创建
镜像层是不可变的,你在某一层当中添加一个新的命令,但是在下一层删除了指令,镜像中基于这个命令创建的文件,依然是存在的,但是在容器中看不见
dockerfile的核心:用户的个性化定制docker的镜像
1、基础镜像信息
2、维护者信息
3、镜像的操作指令
4、容器启动时执行的命令
dockerfile的语法(所有的语法都是大写):
FROM:指定基础镜像信息,指定容器的操作系统
MAINTAINER:指定维护者信息(也可以不写)
RUN:在基础镜像信息上执行的命令,每个RUN就是一层,run越多,分层越多,镜像越大
ENTRYPOINT:设置容器运行是默认命令(容器内部运行的主程序)
CMD:指定容器运行时的默认命令(docker run /bin/bash后面加了其他的命令,cmd的指令将会被覆盖)
EXPOSE:暴露端口(指定容器的运行端口)
ENV:设置环境变量,环境变量可以被RUN命令使用(申明容器运行需要的环境变量)
ADD :复制,解压。解压不支持.zip和.tar 只能解压tar.gz tar.ba2 还可以支持url地址解压和复制(ADD主要作用就是解压)
COPY:复制文件,不能解压,只能复制本地文件。文件要和dockerfile在一个目录(官方推荐复制文件用copy而不是ADD)
VOLUME:创建一个容器内的挂载点,既可以为宿主机挂载,也可以供容器挂载
USER:设置运行镜像时使用的用户或者UID(也可以不写)
WORKDIR:为后续指令设置的工作目录
ONBUILD:这个镜像可以被其他镜像引用,需要这个命令
ARG:传参,用于创建容器时,传递参数。ENV用于容器运行时设置环境变量
区别:
1、cmd可以把参数传给ENTRYPOINT
2、多个entrypoint和多个cmd只会运行最后一个(一个dockerfile当中只会有一个entrypoint和一个cmd)
3、entrypoint的指令不会被覆盖,CMD的指令如果在docker run的后面加上输出,会被覆盖
4、entrypoint和cmd的指令都是在容器启动时执行,都会成为容器的主进程,主进程负责接收信号,处理容器的生命周期,主进程退出,容器也将终止运行
都是可以作为容器启动时的默认命令
要先创建一个目录,然后进到目录里
主要是减少镜像的层数:把多个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
如果前面的命令执行失败,才会执行后面的操作
反斜杠\:换行
RUN yum -y install naginx \
&& make -j 4 \
&& make install
可读性更高
copy和add都可以把本地文件复制到镜像中,但是官方推荐如果是复制,使用copy
区别是add可以解压,如果是一个压缩文件,add在复制之后会自动解压。(tar.gz和tar.bz2)可以支持URL下载源文件,支持下载,但是不能解压,通过URL拷贝的文件无法自动解压
copy只能复制,不能解压,而且只能是本地文件,不支持URL路径
dockerfile要和这些文件在一个目录下
“-D”,“FOREGROUND”:指定运行的方式在前台运行
vim Dockerfile