>  기사  >  운영 및 유지보수  >  nginx가 도커 컨테이너에서 구성 파일을 자동으로 생성하는 방법

nginx가 도커 컨테이너에서 구성 파일을 자동으로 생성하는 방법

PHPz
PHPz앞으로
2023-05-18 22:37:041085검색

구현 아이디어

실행할 마지막 명령은 아마도 다음과 같습니다.

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제