在实际场景中,当客户端同时发送几百甚至几千个请求到服务端端时,会使服务端产生很大负载,从而影响处理效率。为了减轻服务端压力,采用nginx作为一个代理服务器,可以有效地减轻单个服务器压力,即服务器集群化管理。
Docker安装教程
请参考另一篇博客,链接[link]
环境准备
下载相关文件 nginx-1.16.1.tar.gz,pcre-8.43.tar.gz,zlib-1.2.11.tar.gz
下载链接[nginx-zph](https://pan.baidu.com/s/1f799OOeiz-xetb1fgjK27A),提取码:xslj
nginx-zph文件夹目录
-- nginx-zph
- Dockerfile
- nginx-1.16.1.tar.gz
- pcre-8.43.tar.gz
- zlib-1.2.11.tar.gz
- nginx.conf
Docker创建镜像两种方式
(1) docker commit 容器id 镜像名:版本
(2) 通过编写dockerfile文件,
$: docker build -t 镜像名:版本 -f Dockerfile . #注意有一点,表示在当前文件夹下
编写Dockerfile生成负载均衡nginx镜像
1.dockerfile(文件见文件夹nginx文件夹)
FROM ubuntu:16.04
MAINTAINER soulzph
ENV DEBIAN_FRONTEND noninteractive
ENV LANG C.UTF-8
WORKDIR /usr/local/nginx/
RUN apt-get update && apt-get install -y --no-install-recommends \
apt-get install gcc \
apt-get install g++ \
apt-get install make \
apt-get install -y --no-install-recommends \
apt-get install openssl \
apt-get install openssl libssl-dev
ADD nginx-1.16.1.tar.gz /usr/local/
ADD pcre-8.43.tar.gz /usr/local/
ADD zlib-1.2.11.tar.gz /usr/local/
RUN ./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-pcre=/usr/local/pcre-8.43 --with-zlib=/usr/local/zlib-1.2.11 --with-http_v2_module && make && make install
RUN rm -f /usr/local/pcre-8.43.tar.gz && rm -f /usr/local/zlib-1.2.11.tar.gz \
rm -f /usr/local/nginx-1.16.1/gcc \
rm -f /usr/local/nginx-1.16.1/g++ \
rm -f /usr/local/nginx-1.16.1/openssl \
rm -f /usr/local/nginx-1.16.1.tar.gz \
rm -f /usr/local/nginx/conf/nginx.conf
COPY nginx.conf /usr/local/nginx/conf/
EXPOSE 8080
CMD ["/usr/local/nginx/sbin/nginx","-g","daemon off;"]
Dockerfile命令解释:
FROM 镜像名:版本 #拉取基础镜像
FROM 镜像名:版本 as build #如果有多个FROM时,该镜像为基础镜像
MAINTAINER 修改人 #设置编写人信息或联系方式
ENV #设置变量,只在创建镜像时用到
WORKDIR #设置镜像工作时的路径
RUN #创建镜像时需要安装的一些以来或者文件下载
ADD #将文件上传到镜像的指定路径
COPY # 同ADD一样,注意上传文件夹时,上传到镜像指定路径下的同名文件夹下
# eg: COPY APP /usr/local/APP
EXPOSE #设置镜像对外开放端口号
CMD #镜像启动时的执行命令,注意,若有新的命令,该命令会被覆盖;多个CMD命令时,只执行最后一个命令
ENTRYPOINT #镜像启动时的执行命令,但该命令不会被覆盖(建议不要与CMD命令共存)
2.配置文件nginx.conf
#user nobody;
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
keepalive_timeout 65;
client_max_body_size 100M; #配置请求文件大小
client_body_buffer_size 500k;
fastcgi_intercept_errors on;
#配置动态服务器组
upstream grpcservers {
server localhost:8500;
server localhost:8501;
}
#使用http服务器监听gRPC的请求
server {
listen 8080 http2; #gRPC必须使用HTTP/2传输数据
server_name localhost;
location / {
grpc_pass grpc://grpcservers;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
upstream模块默认的负载均衡策略是轮询,目前Nginx服务器的upstream模块支持6种方式的分配,分别为轮询(默认方式)、weight、ip_hash、least_conn、fair(第三方)、url_hash(第三方)等,具体使用方式请参照link
3.开始创建
进入到文件存放路径,即nginx-zph文件夹下
$: cd path/to/nginx-zph
$: docker build -t nginx-zph:1.0.4 -f Dockerfile .
4.启动nginx镜像,生成容器
$: docker run -p 8080:8080 -td nginx-zph:1.0.4
5.查看是否启动成功:
$: docker ps
更多docker的应用,请参考另一篇博客link 至此,Dockerfile生成负载均衡nginx镜像顺利完成!
参考文档
.htmlhttps://www.jianshu.com/p/7797b200e1f4