docker化Nginx负载均衡+python后端+管理页面Portainer

docker化+nginx负载均衡+python后端+管理页面Portainer


服务器为阿里云服务器


python后端需要自己编写,docker后端容器化操作可以看一下本博客docker部署后端这篇文章。


首先,我们需要nginx的镜像

# 使用阿里源加速(centos7)
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# 如果不成功的话,执行这条
tee /etc/docker/daemon.json <<- 'EOF'
{
"registry-mirrors": ["https://5xcgs6ii.mirror.aliyuncs.com"]
}
EOF

获取nginx镜像

# nginx镜像
docker pull nginx

# nginx国内镜像
docker pull daocloud.io/nginx

两者没有区别,但如果你没有加速,还请使用nginx国内镜像进行拉取


这里需要我们来部署一下docker的管理页面,因为这样可以帮我们节约几条命令。
# 执行docker官网的命令
curl -sSL https://get.docker.com | sh

如果出现如下情况,说明完成了

Client:
 Version:      17.10.0-ce
 API version:  1.33
 Go version:   go1.8.3
 Git commit:   f4ffd25
 Built:        Tue Oct 17 19:11:55 2017
 OS/Arch:      linux/arm

Server:
 Version:      17.10.0-ce
 API version:  1.33 (minimum version 1.12)
 Go version:   go1.8.3
 Git commit:   f4ffd25
 Built:        Tue Oct 17 19:05:34 2017
 OS/Arch:      linux/arm
 Experimental: false

版本号请忽略,部署环境会根据服务器端的docker版本进行改变的。

docker volume create portainer_data

docker挂载卷一下


然后启动portainer

docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer

这条命令会出现如下输出

Unable to find image 'portainer/portainer:latest' locally
latest: Pulling from portainer/portainer
0dbfeadd603d: Pull complete 
755e547a9983: Pull complete 
Digest: sha256:8736c3e0fd899229786c8f2198cd3f63fe2815df249b12758f28ef669028057b
Status: Downloaded newer image for portainer/portainer:latest
1f6e55b33638efb4f5005a690b0dcd78601b59c6ea7d006e144f9013b06a26d8

不必对照,原本我们是没有这个portainer/portainer镜像,docker会自动拉取。当然,这里就需要我们之前的加速了。


访问:http://192.168.1.100:9000就可以了!改IP地址!


在页面左侧导航栏中有个Containers导航,点击就会发现我们服务器上所部署的docker容器。

在这里面可以看到每台所运行的容器的信息,还有docker0网卡所分配的172.17.0.0网段的IP


在这里,我们需要将nginx镜像进行实例化。(nginx名字根据自己获取的而定)

docker run -itd -p 8080:80 nginx /bin/bash

docker run -itd -p 8080:80 daocloud.io/nginx /bin/bash

然后进入创建好的容器,以ID进入。

docker exec -it [nginx的ID] /bin/bash

想要查看nginxIP地址,可以在portainer上面查看。


更新一下apt,因为需要用到vim

apt update

apt install vim

然后进入到nginx的配置文件路径下

cd /etc/nginx/ 

vim nginx.conf

可以重写,也可以对照修改一下。

user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    upstream 172.17.0.3 {
	server 172.17.0.4:80 weight=10;
}
    server{
	listen 80;
	server_name 172.17.0.3;
	location / {
		proxy_pass		http://172.17.0.3;
		proxy_set_header	Host		$host;
		proxy_set_header	X-Real-IP	$remote_addr;
		proxy_set_header	X-Forwarded-For $proxy_add_x_forwarded_for;
	}
}
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;
}

172.17.0.3代表当前nginxIP地址,因为是berdge网络(桥接网络)分配的,所以使用的宿主虚拟网卡是docker0


然后在nginx中进行nginx服务重启

service nginx restart

退出当前容器,因为进来的时候,使用exec方式所以不用担心连接终端问题。

exit

不需管nginx实例是否在运行之中,直接启动

docker start [nginxID]

不出意料的话,访问服务器的http://localhost:8080是可以看到nginx欢迎的页面

在这里,说一下后端。

docker run -itd test_tornado python3 NewMain.py

不需要端口映射,因为在nginx.conf文件中,我们已经将所有请求nginx的请求转发到172.17.0.4:80上了。这么一想,容器化是提高了服务可用性。


希望本篇文章帮助到各位小伙伴!如有不对,还请指出!谢谢!

你可能感兴趣的:(docker,后端,Python学习分享之路)