zoukankan      html  css  js  c++  java
  • [Docker] 制作并运行 Nginx 镜像

    环境

    • 操作系统(cat /etc/redhat-release):CentOS Linux release 7.6.1810 (Core)
    • Docker:18.09.6

    文件

    • Dockerfile
    FROM nginx:1.14-alpine
    LABEL maintainer="chenjo <yoyo@chenjo.com>"
    
    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"]
    #以下写法在实验中均不行,容器一旦运行就立马退出
    #ENTRYPOINT ["/bin/sh", "-c", "/bin/entrypoint.sh"]
    #ENTRYPOINT ["/bin/sh", "-c", "/bin/sh"]
    
    • entrypoint.sh
    [root@appsvr img3]# cat 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 "$@"
    
    • index.html
    <h1>New Doc for Nginx</h1>
    
    

    相关命令

    # 生成镜像
    docker build -t myweb3:v0.3-1 ./
    # 运行容器
    docker run --name myweb --rm -P myweb3:v0.3-1
    # 访问 Nginx 的默认主页
    curl 10.0.0.2
    # 通过另一个终端访问该容器
    docker exec -it myweb /bin/sh
    # 查看主机名
    cat /etc/nginx/conf.d/www.conf
    # 通过主机名访问自定义的主页
    wget -O - -q 6a04e5550bce
    

    要点说明

    CMD 是作为参数传给 ENTRYPOINT,对于这个案例而已,就相当于 /bin/entrypoint.sh /usr/sbin/nginx -g 'daemon off;'
    在 entrypoint.sh 中,exec "$@",$@ 表示传入的参数的全体,exec 表示让子进程获得父进程的 PID 并取而代之,父进程退出。在这里,父进程是 shell。

  • 相关阅读:
    Golden Tiger Claw (KM算法)
    Xor Sum题解>----(思维+递归)
    Mister B and PR Shifts(思维)
    Traffic Real Time Query System-(点双缩点+LCA)
    最大的位或----(极简代码)
    萌萌哒题解_倍增并查集
    连续攻击游戏(递增1)题解------(并查集)
    道路与航线 (连通块Dijkstra+拓扑序||spfa+slf优化)
    美团校招-表达式求值
    天猫前端电话面试
  • 原文地址:https://www.cnblogs.com/chenjo/p/10935965.html
Copyright © 2011-2022 走看看