Dockerfile制做镜像
[toc]python
dockerfile 能够是制做本身镜像的脚本文件,按照这个脚本文件执行,就能制做出镜像了docker
一句话什么是dockerfile
Dockerfile : automate the steps of creating a Docker imageshell
dockerfile脚本指令
- FROM base-image 指定基础镜像,做为构建新镜像的底层
- MAINTAINER zhangjiaqi77777@outlook.com 指定镜像的构建者
- RUN 命令 后面的命令就像相似shell脚本的命令同样。每个RUN就是一层镜像。
- CMD 指令 用于指定启动容器默认的主进程命令。由于容器其实就是进程,它不像虚拟机那样启动后不运行任何东西也能静默运行。容器须要有一个主进程一直持续,而后就会退出。能够想象,容器就是一个包着一个主进程在那里跑,主进程就是容器的灵魂,灵魂没了,容器也会消失。注意命令:若是是shell 格式 sh -c "执行行命令" 那么这是经过shell做为主程序运行,当shell执行完子进程,shell就执行完成,主进程也就退出,那么容器也就退出了。因此咱们尽可能使用直接二进制文件执行的方式,不用shell -c 执行。而是CMD ["", "", ""] 将命令空格拆分到列表中。这样只要主进程一致运行,那么容器也就不会退出。
- ENTRYPOINT 后面跟上 ["", "", ""] 命令 An ENTRYPOINT allows you to configure a container that will run as an executable 这样容器在启动时,如docker run ,容器像是一个可执行程序同样,执行ENTRYPOINT 指定的可执行程序,并将CMD 主进程的命令列表,做为参数传递给ENTRYPOINT。 有什么做用,能够做为启动容器主进程前的预处理程序。如检查设置相关。。。(dockerfile只能有一个)
- COPY 指令 从外界(URL)复制文件到容器的文件系统中
- ADD 指令 相似COPY,除了URL外还支持一个归档文件,并在copy到目的路径后解包。
- ENV 设置容器中的环境变量
- ARG 定义build时的上下文变量,这里的变量定义能够设置默认值,若是在docker build --build-arg 传入了对应名字的变量时,这个变量值将使用传入的值。相似于python脚本的经过argv接受参数功能。ARG定义的变量取值方式和EVN同样,前面加$,关于ARG与ENV名称冲突,已ENV优先。
- LABEL 设置一些元信息,LABEL设定的在镜像间时可继承的。
- WORKDIR /home/test 指定工做路径,像RUN,CMD, ENTRYPOINT, COPY, ADD 的工做目录。能够多个WORKDIR 指定,来切换路径,而且能够相对路径。
- VOLUME指令 因为容器运行时产生的数据须要持久化,那么就须要给容器建立挂载点,挂载点就是VOLUME指令指定的,这样就容器就能够将宿主机或者其它容器的卷挂在到这个点上。
- ONBUILD 是在做为基础镜像时,在下游使用本镜像时,出发这个操做在下游build上下文环境中。
- USER 为运行之命令进程的用户或用户组。
- EXPOSE 和VOLUME相似,若是容器要提供网络服务,那么传输层的端口能够经过EXPOSE先指定。可是不必定立刻就要使用。
小结
- 区分CMD ENTRYPOINT的功能
- 理解VOLUME EXPOSE 这两个对外接口
- ARG 与 ENV 冲突的话,优先级
- USER 指定进程用户用户组相关
- RUN 是基础镜像中执行的命令