Idea pelaksanaan
Larian arahan terakhir mungkin seperti ini:
docker run -d -p 80:80 -e xxx=xx 镜像名称 镜像中脚本路径
Skrip di sini akan menggantikan arahan cmd dalam fail docker, jadi kami perlu membina Skrip shell yang secara automatik menjana dan memulakan 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
Satu perkara yang perlu dijelaskan ialah keseluruhan fail konfigurasi tidak perlu dijana dalam perniagaan Anda hanya perlu menjana lokasi dan menggantikan lokasi yang ditandakan dalam fail konfigurasi asal ialah lokasi yang ditandakan dalam fail konfigurasi asal.
http { ... server { ... location / { root html; index index.html index.htm; } nginx_conf #error_page 404 /404.html; ...
Saya fikir saya meletakkan skrip shell ini dan fail konfigurasi lalai ke dalam imej fail docker nginx, dan kemudian ia berjaya, tetapi... Selepas menjalankan arahan di atas, bekas itu tidak dimulakan log dan lihat maklumat. Tetapi ia adalah ***ralat sintaks: "(" tidak dijangka***. Skrip shell saya telah diuji pada centos dan boleh dijalankan, jadi mengapa ralat ini dilaporkan? Selepas penyiasatan, ternyata bahawa dockerfile menggunakan imej asas sebagai nginx rasmi, imej rasmi menggunakan ubuntu dan bukannya bash untuk melaksanakan skrip shell, yang benar-benar perangkap Saya tidak mempunyai pilihan selain mengubah suai dockerfile .
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;"]
Peringatan: Bekas Docker tidak menyokong latar belakang Run, apabila arahan dilaksanakan, bekas itu akan keluar secara semula jadi. Di sini kita perlu menetapkan fail konfigurasi nginx
Atas ialah kandungan terperinci Bagaimana nginx menjana fail konfigurasi secara automatik dalam bekas docker. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!