Docker启动nginx并读取环境变量

Docker启动nginx并读取环境变量

  • 一、 简介
  • 二、 准备nginx镜像
    • 1. 编写基础nginx的Dockerfile
    • 2. 构建基础nginx镜像
  • 三、 准备html文件
  • 四、 准备nginx.conf.template文件
  • 五、 准备入口脚本docker-entrypoint.sh
  • 六、 准备dockerfile文件
  • 七、 构建镜像
  • 八、 启动nginx服务
  • 九、 访问浏览器验证
  • 十、 备注

一、 简介

Nginx代理后台接口地址,是将后台接口配置在配置文件nginx.conf文件中,但是nginx.conf文件无法直接使用“$”读取linux的环境变量,本次使用docker启动nginx方式,并配置nginx读取docker的环境变量。本次使用的方法是envsubst方式,并将envsubst命令写入一个入口脚本中,简化启动nginx服务命令

二、 准备nginx镜像

1. 编写基础nginx的Dockerfile

Nginx-1.1.16为nginx-1.1.16.tar.gz源码解压后的文件,可在nginx官网下载

	# 镜像名称:nginx-test-env
	#基础镜像,可自己拉取centos7镜像
	FROM docker.io/openshift/base-centos7
	#设置对应环境变量,方便自己知道版本是多少
	ENV NGINX_VERSION=1.16.1
	#维护者信息
	LABEL maintainer="tianguohui "
	#将nginx源码包复制到容器中,并运行命令安装nginx1.1.16
	RUN mkdir -p /root/nginx/nginx-1.1.16
	COPY ./nginx-1.1.16 /root/nginx/nginx-1.1.16
	RUN cd /root/nginx/nginx-1.1.16 && \
	    ./configure --prefix=/usr/local/nginx --with-	http_stub_status_module --with-http_ssl_module && \
	    make && make install && \
	    /usr/local/nginx/sbin/nginx -V
	#映射端口
	EXPOSE 8080

2. 构建基础nginx镜像

构建基础nginx镜像

docker build -t nginx-test-env ./

三、 准备html文件

将自己前端代码编译打包,并将打包后的dist文件重命名为html,放入Dockerfile同级目录下

四、 准备nginx.conf.template文件

将以下内容放入server模块中

   server {
        listen       8080;
        server_name  localhost;
        location / {
            root   /opt/app-root/src/html;
            index  index.html index.htm;
	    try_files $uri $uri/ /index.html;
        }

     location ^~/api/ {
            proxy_pass http://${JAVA_API_LOGIN_IP}:${JAVA_API_LOGIN_PORT}/;
        }

     location ^~/sms/ {
            proxy_pass http://${JAVA_SMS_IP}:${JAVA_SMS_PORT}/;
        }
     location ^~/ngecc/ {
            proxy_pass http://${HASURA_NGECC_IP}:${HASURA_NGECC_PORT}/;
        }   
     location ^~/xunjian/ {
            proxy_pass http://${HASURA_XUNJIAN_IP}:${HASURA_XUNJIAN_PORT}/;
        }   
     location ^~/cache/ {
            proxy_pass http://${HASURA_CACHE_IP}:${HASURA_CACHE_PORT}/;
        }   
     location ^~/main/ {
            proxy_pass http://${HASURA_MAIN_IP}:${HASURA_MAIN_PORT}/;
        }   
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }

五、 准备入口脚本docker-entrypoint.sh

使用${XXX}读取docker环境变量,在nginx.conf.template文件中使用环境变量,使用envsubst将nginx.conf.template中的内容覆盖nginx.conf文件内容,实现读取环境变量

vim docker-entrypoint.sh
#!/usr/bin/env sh
set -eu
envsubst '${JAVA_API_LOGIN_IP} ${JAVA_API_LOGIN_PORT} ${JAVA_SMS_IP} ${JAVA_SMS_PORT} ${HASURA_NGECC_IP} ${HASURA_NGECC_PORT} ${HASURA_XUNJIAN_IP} ${HASURA_XUNJIAN_PORT} ${HASURA_CACHE_IP} ${HASURA_CACHE_PORT} ${HASURA_MAIN_IP} ${HASURA_MAIN_PORT}' < /usr/local/nginx/nginx.conf.template > /usr/local/nginx/conf/nginx.conf
exec "$@"

六、 准备dockerfile文件

环境变量设置为自己需要的ip地址和port端口

# docker-nginx
#基础镜像
FROM nginx-test-env
#设置对应环境变量,方便自己知道版本是多少
ENV NGINX_VERSION=1.16.1 \
    JAVA_API_LOGIN_IP=127.0.0.1 \
    JAVA_API_LOGIN_PORT=8080 \
    JAVA_SMS_IP=127.0.0.1 \
    JAVA_SMS_PORT=8080 \
    HASURA_NGECC_IP=127.0.0.1 \
    HASURA_NGECC_PORT=8080 \
    HASURA_XUNJIAN_IP=127.0.0.1 \
    HASURA_XUNJIAN_PORT=8080 \
    HASURA_CACHE_IP=127.0.0.1 \
    HASURA_CACHE_PORT=8080 \
    HASURA_MAIN_IP=127.0.0.1 \
    HASURA_MAIN_PORT=8080 
#维护者信息
LABEL maintainer="tianguohui "
COPY nginx.conf.template /usr/local/nginx/nginx.conf.template
COPY docker-entrypoint.sh /
RUN  mkdir -p /opt/app-root/src && \
     chmod 777 /docker-entrypoint.sh
COPY html /opt/app-root/src/html
ENTRYPOINT ["/docker-entrypoint.sh"]
#映射端口
EXPOSE 8080
CMD ["/usr/local/nginx/sbin/nginx","-g","daemon off;"]

七、 构建镜像

docker build -t docker-nginx ./

八、 启动nginx服务

docker run --name nginx -itd -p 28080:8080 docker-nginx

九、 访问浏览器验证

浏览器访问http://xx.xx.xx.xx:28080,可以登录系统,查看数据

十、 备注

验证是否读取的环境变量,可修改第6步中的dockerfile文件中的环境变量,后台登录接口的IP或者端口故意写错,再次构建镜像运行,使用浏览器验证时,无法登录系统,接口调用失败

你可能感兴趣的:(运维,docker,nginx,centos,linux)