zoukankan      html  css  js  c++  java
  • Docker Flie

    七、Docker File

    • .dockeringore:打包忽略的文件列表,每行写一个文件的路径,可使用通配符
    • FROM指令:指定基础镜像
    FROM <repository>[:<tag>]  or FROM <repository>@<digest>
    
    ~]# mkdir img_work  #创建工作目录
    ~]# cd img_work/
    img_work]# vim Dockerfile  #注意D大写
    # Description: my image  #描述信息
    FROM centos:centos7.5.1804  #基础镜像
    LABEL maintainer="Dongfei <Dongfei@localhost.com>"  #元数据
    
    • COPY指令:
    COPY ["<src>",..."<dest>"]
    	1.<src>必须是build上下午中的路径,不能是父目录中的文件
    	2.如果<src>是目录,则其内部文件或子目录会被递归复制,但<src>目录本身不会被复制
    	3.如果指定多个<src>,或在<src>中使用了通配符,则<dest>必须是一个目录,且必须以/结尾
    	4.如果<dest>事先不存在,它将会被自动创建,这包括其父目录
    
    # 复制网页文件
    img_work]# vim Dockerfile
    COPY ["index.html","/var/www/html/"]
    img_work]# vim index.html
    <h1>My Docker website.</h1>
    img_work]# docker build -t tinyhttpd:v0.1 ./
    img_work]# docker run --name h1 --rm tinyhttpd:v0.1 cat /var/www/html/index.html
    <h1>My Docker website.</h1>
    # 复制yum源
    img_work]# cp -r /etc/yum.repos.d/ ./
    img_work]# vim Dockerfile
    COPY ["yum.repos.d/","/etc/yum.repos.d/"]
    img_work]# docker build -t tinyhttpd:v0.2 ./  
    img_work]# docker run --name h2 --rm tinyhttpd:v0.2 ls /etc/yum.repos.d/
    
    • ADD指令:将宿主机的文件打包到docker镜像,支持URL和tar文件
    ADD ["<src>",..."<dest>"]
    	1.<src>如果是本地的tar文件,则会自动展开至镜像中
    	2.<src>如果是URL的tar文件,则不会自动展开
    
    img_work]# wget http://nginx.org/download/nginx-1.16.0.tar.gz
    img_work]# vim Dockerfile
    ADD ["http://nginx.org/download/nginx-1.16.0.tar.gz","/usr/local/src/"]
    ADD ["nginx-1.16.0.tar.gz","/usr/local/src/"]
    img_work]# docker build -t tinyhttpd:v0.3 ./
    img_work]# docker run --name h3 --rm tinyhttpd:v0.3 ls /usr/local/src/
    
    • WORKDIR:指定工作目录,逆序往上找到第一个就是工作路径
    WORKDIR /usr/local/src/
    ADD http://nginx.org/download/nginx-1.16.0.tar.gz ./
    ADD ["nginx-1.16.0.tar.gz","./"]
    
    • VOLUME:只能挂载Docker-managed volume
    VOLUME /data/mysql/
    
    • EXPOSE:用于为容器打开指定要监听的端口实现以外部通信,只能绑定暴露容器中的端口,动态绑定在宿主机的随机端口
    EXPOSE <port>[/<protocol>][<port>[/<protocol>]...] #protocol 协议
    
    EXPOSE 80/tcp 22/tcp
    
    • ENV:定义环境变量,可注入容器,可以被ADD,COPY等指令所调用
    ENV <key>=<value> ...
    
    ENV DOC_ROOT="/var/www/html/"
    COPY ["index.html","$DOC_ROOT"]
    
    # docker run --name h5 -e HTTP_PORT=8888 --rm tinyhttpd:v0.5 printenv #启动容器时注入环境变量
    
    • RUN:在docker build时执行命令
    RUN cd /usr/local/src/ && 
        tar -xf nginx-1.16.0.tar.gz
    
    • CMD:在docker run时执行的默认命令,可以写多个,但只有最后一个生效
    1.CMD <command>  #使用bash解析命令执行
    2.CMD ["<executable>","<param1>","<param2>"]
    3.CMD ["/bin/bash","-c","<executable>","<param1>"]
    4.CMD ["<param1>","<param2>"]  #CMD的参数传递给ENTRYPOINT
    
    image_work2]# vim Dockerfile
    FROM busybox
    LABEL Author="Dongfei"
    ENV WEB_DOC_ROOT="/data/web/html"
    RUN mkdir -p ${WEB_DOC_ROOT} && 
        echo '<h1>Busybox httpd server.</h1>' > ${WEB_DOC_ROOT}/index.html
    CMD /bin/httpd -f -h ${WEB_DOC_ROOT}
    image_work2]# docker build -t tinyhttpd:v0.7 ./
    image_work2]# docker image inspect tinyhttpd:v0.7 |grep "CMD"                      "CMD ["/bin/sh" "-c" "/bin/httpd -f -h ${WEB_DOC_ROOT}"]"
    # docker run --name tinyweb7 -it --rm -P tinyhttpd:v0.7
    # docker exec -it tinyweb7 /bin/sh
    
    CMD ["/bin/httpd","-f","-h","/data/web/html"]
    image_work2]# docker image inspect tinyhttpd:v0.8 |grep "CMD"       
                    "CMD ["/bin/httpd" "-f" "-h ${WEB_DOC_ROOT}"]"
    
    • ENTRYPOINT:类似CMD指令的功能,用于为容器指定默认运行程序,从而使得容器像是一个单独的可执行程序;与CMD不同的是,由ENTRYPOINT启动的程序不会被docker run命令行指定的参数所覆盖,而且这些命令行参数会被当作参数传递给ENTRYPOINT指定的程序
    1.ENTRYPOINT <command>  #使用bash解析命令执行
    2.ENTRYPOINT ["<executable>","<param1>","<param2>"]
    3.ENTRYPOINT ["/bin/bash","-c","<executable>","<param1>"]
    
    # vim Dockerfile
    FROM busybox
    LABEL Author="Dongfei"
    ENV WEB_DOC_ROOT="/data/web/html"
    RUN mkdir -p ${WEB_DOC_ROOT} && 
        echo '<h1>Busybox httpd server.</h1>' > ${WEB_DOC_ROOT}/index.html
    ENTRYPOINT /bin/httpd -f -h ${WEB_DOC_ROOT}
    # docker build -t tinyhttpd:v0.10 ./
    # docker run --name tinyweb2 -it --rm -P tinyhttpd:v0.10
    
    img3]# vim entrypoint.sh
    #!/bin/sh
    cat > /etc/nginx/conf.d/www.conf << EOF
    server  {
            server_name $HOSTNAME;
            listen ${IP:-0.0.0.0}:${PORT:-80};
            root ${NGX_DOC_ROOT:-/usr/share/nginx/html/};
            }
    EOF
    exec "$@"  #执行所有传入的参数
    
    img3]# vim Dockerfile
    FROM nginx:1.14-alpine
    LABEL maintainer="Dongfei"
    ENV NGX_DOC_ROOT="/data/web/html/"
    ADD index.html ${NGX_DOC_ROOT}
    ADD entrypoint.sh /bin/
    CMD ["/usr/sbin/nginx","-g","daemon off;"]
    ENTRYPOINT ["/bin/entrypoint.sh"]
    
    img3]# vim index.html
    <h1>dongfei index</h1>
    
    img3]# docker build -t myweb:v0.1 ./
    # docker run --name myweb1 --rm -P myweb:v0.1
    
    [root@docker ~]# docker exec -it b41252ebbaa8 sh
    / # wget -O - -q b41252ebbaa8
    <h1>dongfei index</h1>
    

    注意:json数组中,注意要使用双引号

    • USER:指定用户
    USER <UID>|<UserName>
    
    • HEALTHCHECK:容器健康监测
    --interval=DURATION  :每隔多次时间检测一次,默认30s
    --timeout=DURATION :每次检测超时时长,默认30s
    --start-period=DURATION :等待主进程启动的时间,默认0s
    --retries=N :检测几次失败任务为false,默认3次
    
    0: success  :命令返回值
    1:unhealthy
    2:reserved
    
    HEALTHCHECK --interval=5m --timeout=3s CMD curl -f http://localhost/ || exit 1
    
    EXPOSE 80/tcp
    HEALTHCHECK --start-period=3s CMD wget -O - -q http://${IP:-0.0.0.0}:${PORT:-80}/
    
    • SHELL:设置使用的shell,默认使用/bin/sh
    • STOPSIGNAL signal :设置使用docker stop命令停止容器时向主进程发的信号
    • ARG:定义Dockerfile变量,在docker build 传值
    ARG author="Dongfei"
    LABEL maintainer="${author}"
    
    • ONBUILD:用于在Dockerfile中定义一个触发器,当其他Dockerfile将自己的镜像当做基础镜像时执行;不能自我嵌套,不能执行MAINTAINER指令
    ONBUILD ADD http://xxxx.bat
    
  • 相关阅读:
    深入理解CSS中的margin负值
    深入理解CSS浮动
    深入理解CSS绝对定位
    深入理解display属性
    JAVA-初步认识-第四章-内存空间的划分&栈内存&堆内存
    JAVA-初步认识-第四章-数组-概述和定义
    JAVA-初步认识-第四章-重载练习
    JAVA-初步认识-第四章-重载
    JAVA-初步认识-第四章-函数-内存加载过程
    JAVA-初步认识-第一章-整体的认识
  • 原文地址:https://www.cnblogs.com/L-dongf/p/11028728.html
Copyright © 2011-2022 走看看