序幕
书接上回,上回说到,在Win10系统下利用Docker部署Gunicorn+Flask打造独立镜像,今天我们来讲一讲利用DockerHub在Centos7.6环境下部署Nginx反向代理Gunicorn+Flask独立架构
准备
首先你需要有自己的云服务。我推荐白嫖
阿里云白嫖服务器
其次你需要将本地项目
push
到DockerHub(仓库)首先激活账号,创建仓库
这里的创建仓库与Github类似
填写仓库信息具体为仓库名称、描述以及是否公开或者私有。
创建成功之后,它就会出现在镜像列表中
此时我们需要对本地的镜像重命名,这里重命名为herosir/flask_back。因为要与dockerhub上的仓库对应。如果名称不对应是无法将本地镜像push到线上仓库中。
1
docker tag myflask herosir/flask_back
结果
之后在命令行输入命令
1
docker login
用DockerHub的账号和密码登录
登录成功之后,用命令把本地镜像push到DockerHub中
1
docker push herosir/flask_back
注意这里的镜像名称必须和hub中的仓库名称一致,否则将会抛出错误。
上传成功后,就可以在DockerHub中看到它了,此时就能随意pull操作了
部署
前置操作已经完毕,此时,登录你的云服务器,这里以阿里云的Centos7.6为例子,进入服务器后安装Docker服务
1
2
3
4
5
6
7
8
9
10
11
12
13
14#升级yum
sudo yum update
#卸载旧版本docker
sudo yum remove docker docker-common docker-selinux docker-engine
#安装依赖
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
#设置源
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sudo yum makecache fast
#安装docker
sudo yum install docker-ce
#启动服务
sudo systemctl start docker安装完成后输入 docker -v
返回Docker版本号说明没有问题
拉取我们之前打包并且上传到hub的Flask镜像
1
docker pull herosir/flask_back
下载成功后,会展示在镜像库里
运行项目,这里我们可以采用后台守护进程的模式起服务
1
sudo docker run -d -p 5000:5000 --name testflask herosir/flask_back
使用docker ps命令可以看到是否运行成功。
使用服务器的ip访问一下Flask服务,这里有个小坑,不论是腾讯云、阿里云还是百度云亦或是各种乱七八糟的云,都需要在安全组策略中开放你需要访问的端口,比如这里我用的阿里云。
解决安群组策略
找到服务器的
配置规则
手动添加
下图信息
设置完成之后通过服务器
公网IP
进行访问OK,访问没有问题
接下来,我们同样利用Docker来安装Nginx服务
1
docker pull nginx
随后启动Nginx测试一下
1
docker run -d -p 80:80 nginx
这里也需要设置安群组
操作同上,内容如下
直接访问
公网IP
现在,我们将运行Nginx容器里的配置文件copy到宿主机里面
1
docker cp 容器id:/etc/nginx/conf.d/default.conf /root/default.conf
前面是容器的路径 后面是宿主机的路径
容器id可以通过docker ps命令查看
复制出来之后,输入命令修改这个nginx配置
1
vim /root/default.conf
将Gunicorn配置加到里面(更改)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50server {
listen 80;
listen [::]:80;
server_name localhost;
#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;
location / {
proxy_pass http://你的服务器公网IP:5000; # 这里是指向 gunicorn host 的服务地址
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}修改完配置文件之后,关掉运行的nginx服务容器,并且删掉它
1
2docker stop 容器id
docker rm $(docker ps -a -q)随后再次启动Nginx容器,不过这次和上次不同之处就是需要用到 -v 进行挂载了,挂载简单理解就是将宿主机的文件替换Docker容器内部的文件,达到修改的效果。
1
docker run --name mynginx -d -p 80:80 -v /root/default.conf:/etc/nginx/conf.d/default.conf nginx
这里-v参数也遵循冒号左侧为宿主机右侧为容器的原则。
新启动成功后,访问服务器ip
OK,部署完成
结语
部署完成,轻松且愉快
最后Dockerhub地址:https://hub.docker.com/r/herosir/flask_back