구현 아이디어
실행할 마지막 명령은 아마도 다음과 같습니다.
docker run -d -p 80:80 -e xxx=xx 镜像名称 镜像中脚本路径
여기의 스크립트는 dockerfile의 cmd 명령을 대체하므로 nginx를 자동으로 생성하고 시작하는 쉘 스크립트를 작성해야 합니다.
#!/bin/bash #从环境变量里面获取lt开头,为了与其他环境变量区别开,例如lt_analysis=172.17.0.1:8083 result="" for a in $(env | grep ^lt) do old_ifs="$ifs" ifs="_" arr=($a) b=${arr[1]} ifs="=" arr=($b) ifs="$old_ifs" result="${result} location /${arr[0]}/ { proxy_pass http://${arr[1]}/${arr[0]}/; proxy_connect_timeout 90; proxy_send_timeout 90; proxy_read_timeout 90; }" done #将nginx配置文件中nginx_conf中置换成变量result sed -i "s|nginx_conf|$(echo ${result})|g" /etc/nginx/nginx.conf cd /usr/sbin ./nginx
한 가지 설명해야 할 점은 비즈니스에서 전체 구성 파일을 생성할 필요가 없다는 점입니다. 위치를 생성하고 원래 구성 파일에 표시된 위치를 바꾸면 됩니다. 원래 구성 파일에 있습니다.
http { ... server { ... location / { root html; index index.html index.htm; } nginx_conf #error_page 404 /404.html; ...
이 쉘 스크립트와 기본 구성 파일을 nginx dockerfile 이미지에 넣었더니 성공한 줄 알았는데... 위 명령어 실행 후 컨테이너 로그를 확인해 보니 컨테이너가 시작되지 않네요. 나온 정보는** *syntax error: “(” 예기치 않은***이었습니다. 내 쉘 스크립트는 centos에서 테스트되었으며 실행될 수 있는데 왜 이 오류가 보고됩니까? 조사 결과 기본 이미지가 dockerfile에서 사용하는 것은 공식 nginx이며 우분투를 사용하는 공식 이미지는 더 이상 bash를 사용하지 않고 대시를 사용하여 쉘 스크립트를 실행합니다. 이는 실제로 dockerfile을 수정하는 것 외에는 선택의 여지가 없습니다. : docker 컨테이너는 백그라운드 실행을 지원하지 않습니다. 명령이 실행되면 컨테이너도 자연스럽게 종료됩니다. 여기서는 nginx 구성 파일
from centos env nginx_version 1.10.3 env openssl_version 1.0.2k env pcre_version 8.40 env zlib_version 1.2.11 env build_root /usr/local/xx/nginx # 为了减小最终生成的镜像占用的空间,这里没有执行yum update命令,可能不是好的实践 # 为了加快构建速度,这里使用了163的安装源 #run yum -y update \ run yum -y install curl \ && mv /etc/yum.repos.d/centos-base.repo /etc/yum.repos.d/centos-base.repo.backup \ && curl http://mirrors.163.com/.help/centos7-base-163.repo -o /etc/yum.repos.d/centos7-base-163.repo \ && yum -y install gcc gcc-c++ make perl zip unzip \ && mkdir -p $build_root \ && cd $build_root \ && curl https://ftp.pcre.org/pub/pcre/pcre-$pcre_version.zip -o $build_root/pcre-$pcre_version.zip \ && curl https://www.openssl.org/source/openssl-$openssl_version.tar.gz -o $build_root/openssl-$openssl_version.tar.gz \ && curl http://www.zlib.net/zlib-$zlib_version.tar.gz -o $build_root/zlib-$zlib_version.tar.gz \ && curl https://nginx.org/download/nginx-$nginx_version.tar.gz -o $build_root/nginx-$nginx_version.tar.gz \ && tar vxzf nginx-$nginx_version.tar.gz \ && unzip pcre-$pcre_version.zip \ && tar vxfz zlib-$zlib_version.tar.gz \ && tar vxfz openssl-$openssl_version.tar.gz \ && cd nginx-$nginx_version \ && build_config="\ --prefix=/etc/nginx \ --sbin-path=/usr/sbin/nginx \ --conf-path=/etc/nginx/nginx.conf \ --error-log-path=/var/log/nginx/error.log \ --http-log-path=/var/log/nginx/access.log \ --pid-path=/var/run/nginx.pid \ --lock-path=/var/run/nginx.lock \ --http-client-body-temp-path=/var/cache/nginx/client_temp \ --http-proxy-temp-path=/var/cache/nginx/proxy_temp \ --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp \ --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp \ --http-scgi-temp-path=/var/cache/nginx/scgi_temp \ --with-openssl=$build_root/openssl-$openssl_version \ --with-pcre=$build_root/pcre-$pcre_version \ --with-zlib=$build_root/zlib-$zlib_version \ --with-http_ssl_module \ --with-http_v2_module \ --with-threads \ " \ && mkdir -p /var/cache/nginx \ && ./configure $build_config \ && make && make install \ && rm -rf $build_root \ && yum -y remove gcc gcc-c++ make perl zip unzip \ && yum clean all #替换nginx默认文件 copy nginx.conf /etc/nginx/ #添加自动生成配置文件的shell脚本 copy 脚本名称 /root/ #暴露端口 expose 80 443 cmd ["nginx", "-g", "daemon off;"]
위 내용은 nginx가 도커 컨테이너에서 구성 파일을 자동으로 생성하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!