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
想要查看
nginx
的IP
地址,可以在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
代表当前nginx
的IP
地址,因为是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
上了。这么一想,容器化是提高了服务可用性。
希望本篇文章帮助到各位小伙伴!如有不对,还请指出!谢谢!