dockerfile构建镜像

Dockerfile是由一系列命令和参数构成的脚本,这些命令应用于基础镜像并最终建立一个新的镜像。它们简化了从头至尾的流程并极大的简化了部署工做。Dockerfile从FROM命令开始,紧接着跟随者各类方法,命令和参数。其产出为一个新的能够用于建立容器的镜像。nginx

1、Dockerfile 语法

使用如下的语法能够实现各类各样的镜像git

  • FROM:指定父镜像,能够经过添加多个FROM,在同一个Dockerfile中建立多个镜像
  • MAINTAINER:维护者信息,可选
  • RUN:用来修改镜像的命令,能够用来安装程序,当一条RUN完成后,会在当前的镜像上建立一个新的镜像层,接下来的指令会在新的镜像层上执行。有2种形式。
    • RUN [“apt-get”, “update”],调用exec
    • RUN apt-get update,调用的/bin/sh
  • EXPOSE:用来指明容器内进程对外开放的端口。在docker run的时候能够加-p(能够将EXPOSE中没列出的端口设置为对外开放)和-P(EXPOSE里所指定的端口映射到主机上另外的随机端口???)来设置端口。
  • ADD:向新容器中添加文件,文件能够是
    • 主机文件:必须是相对Dockerfile所在目录的相对路径(若是是压缩文件,docker会解压缩)
    • 网络文件:URL文件,在建立容器时会下载下来添加到镜像中。(若是是压缩文件,docker不会解压缩)
    • 目录:必须是相对Dockerfile所在目录的相对路径(若是是压缩文件,docker会解压缩)
  • COPY: 与ADD的区别是COPY的<src>只能是本地文件,其余用法一致
  • VOLUME:会在镜像里建立一个指定路径的挂载点。这个路径能够来自主机,也能够来自其余容器,多个容器经过同一个挂载点来共享数据,即使有个容器已经中止,其他容器仍是能够访问挂载点,只有当挂载点全部的容器引用消失,挂载点才会自动删除。
  • WORKDIR:为接下来的指令指定一个新的工做目录。当启动一个容器后,最后一条WORKDIR指令所指向的目录为容器当前运行的工做目录。
  • ENV:设置环境变量,在docker run 时能够用-e来设置环境变量docker run -e WEBAPP_PORT=8000 -e WEBAPP_HOST=www.example.com
  • CMD:设置容器运行时默认运行的命令,CMD参数格式与RUN相似。CMD ls -l -a 或CMD ["ls", "-l", "-a"]
  • ENTRYPOIN:与CMD相似,指定容器运行时默认命令。ENTRYPOINT和CMD的区别,在于运行容器时,镜像后的命令参数,ENTRYPOINT是拼接,CMD是覆盖
  • USER:为容器的运行和RUN CMD ENTRYPOINT等指令的运行 指定用户或者UID
  • ONBUILD:触发器指令,父镜像中不会执行,只有在子镜像中才会执行。 给一个例子

 

2、DockerFile构建

        以https://dev.aliyun.com中的项目来讲github

        一、通常做者都会存放这个image对应的Dockerfiledocker

    二、咱们也能够直接使用Dockerfile来生成本身的nginx镜像bash

    能够参考https://github.com/qq4311949/dockerfile-demo,有啥不对的,欢迎指正网络

#This is my first Dockerfile
#Version 1.0
#Author: Maybe@qq.com

#Base images
FROM alpine

#MAINTAINER
MAINTAINER Maybe@qq.com

#ADD
ADD ./pkg/nginx-1.14.0.tar.gz /usr/local/src

#WORKDIR
WORKDIR /usr/local/src/nginx-1.14.0

#RUN
RUN apk add --no-cache gcc g++ make zlib-dev pcre-dev openssl-dev --repository http://mirrors.aliyun.com/alpine/v3.8/main/ \
    && addgroup www \
    && adduser -s /sbin/nologin -D -G www -H www \
    && ./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_v2_module --with-http_gzip_static_module --with-http_sub_module --with-stream --with-stream_ssl_module \
    && make \
    && make install \
    && apk del gcc g++ make \
    && rm -rf /usr/local/src/* 
    
COPY ./conf/nginx.conf /usr/local/nginx/conf/nginx.conf

EXPOSE 80 443

CMD ["/usr/local/nginx/sbin/nginx", "-g", "daemon off;"]
相关文章
相关标签/搜索