简介
* 1、两年前接触docker是因为要部署selenium_gird,后来呢发现zalenium可以录制ui自动化视频的工具,都是直接pull镜像,启动容器。所以一直以来就只用到了pull、 run、 rm等简单的命令。开发一直是把代码部署到docker里的,这对于我来说一直是个疑问。上周趁着项目不紧张 ,就来解惑以下,首先就把我二次开发的接口平台来部署下把(/topics/25144),忙碌了一周也终于部署到外网了,也在这里将简单好理解的部署方法分享给大家。
准备工作
* 1、首先 要有一台linux系统 ,笔者在这里选择了腾讯云的95一年的服务器,用来学习还不错(/act/anniversary/product)
* 2、登录到linux系统后,下载docker 并启动(这步骤教给你们了,百度很多例子)
* 3、项目准备,我这里用到了后端django,前端vue
4、WinSCP用来将代码上传到linux(有很多途径可以上传,我这里选择了简单的方法)
5、/jiefu/p/12204555.html docker部署 mysql请参考这个链接一步步配置就可以了,很简单哦(django要链接数据库)
部署django,文件目录如图
* 1、uWSGI是一种web服务器,是实现了uwsgi和WSGI两种协议的Web服务器,类似Apache和Ngin'x(/gymaisyl/article/details/85038932有详细的介绍)
2、Dockerfile用来创建镜像
3、我们之前启动django都是用python manage.py runserver 来启动的,这次我们uwsgi启动来部署到外网
4、我这边根目录是DockerProject,下面两个文件夹api_automation_test(代码),compose(docker-compose.yml,用来编排dockerfile的)
#### 每个文件的内容
* 1、Dockerfile内容,只需要替换api_automation_test项目目录名字即可
# 建立 python3.7 环境
FROM python:3.6
# 设置 python 环境变量
#ENV PYTHONUNBUFFERED 1
# 在容器内/var/www/html/下创建 mysite1文件夹
RUN mkdir -p /var/www/html/api_automation_test
# 设置容器内工作目录
WORKDIR /var/www/html/api_automation_test
# 将当前目录文件加入到容器工作目录中(. 表示当前宿主机目录)
ADD . /var/www/html/api_automation_test
#下载第三方包
RUN pip install /darklow/django-suit/tarball/v2
RUN pip install -i /simple uwsgi
RUN pip install -i /simple/ -r requirements.txt
# Windows环境下编写的start.sh每行命令结尾有多余的\r字符,需移除。
RUN sed -i 's/\r//' ./start.sh
# 设置start.sh文件可执行权限
RUN chmod +x ./start.sh
* 2、uwsgi_.ini内容,此处是对启动uwsgi做出的配置,更多配置参数可以去百度看下
[uwsgi]
#api_automation_test是我代码的路径
project = api_automation_test
uid = root
gid = root
base = /var/www/html
chdir = %(base)/%(project)
module = %(project).wsgi:application
master = True
processes = 2
http = 0.0.0.0:8020 #这里直接使用uwsgi做web服务器,使用http。如果使用nginx,需要使用socket沟通。
buffer-size = 65536
pidfile = /tmp/%(project)-master.pid
vacuum = True
max-requests = 5000
daemonize = uwsgi.log
# 解决APSchedler任务不能执行
threads=4
enable-threads = true
preload = true
lazy-apps = true
#设置一个请求的超时时间(秒),如果一个请求超过了这个时间,则请求被丢弃
harakiri = 60
#当一个请求被harakiri杀掉会,会输出一条日志
harakiri-verbose = true
* 3、start.sh内容
#!/bin/bash
# 从第一行到最后一行分别表示:
# 1. 生成数据库迁移文件
# 2. 根据数据库迁移文件来修改数据库
# 3. 用 uwsgi启动 django 服务, 不再使用python manage.py runserver
#python manage.py collectstatic --noinput&&
python manage.py makemigrations&&
python manage.py migrate&&
uwsgi --enable-threads /var/www/html/api_automation_test/uwsgi.ini
开始部署docker
* 1、首先将我们的代码用WinSCP放到linux上,cd 到我们的 api_automation_test目录
执行如下命令创建镜像,注意最后面有个点.
docker build -t django_web .
* 2、创建镜像中
* 3、创建完成
* 4、docker images查看我们刚才创建的镜像
* 5、 启动容器
docker run -it --name MyDjango -p 8020:8020 -d django_web
* 6、 查看创建成功的容器
docker ps
* 7、进入容器内部执行shart.sh
docker exec -it MyDjango /bin/bash
sh start.sh
7、这个时候我们后端项目已启动成功,接下来访问下接口
部署vue,项目结构如图所示
1、Dockerfile内容,直接copy不用改内容
# nginx镜像
FROM nginx:latest
# 删除原有配置文件,创建静态资源文件夹和ssl证书保存文件夹
RUN rm /etc/nginx/conf.d/default.conf \
&& mkdir -p /usr/share/nginx/html/static \
&& mkdir -p /usr/share/nginx/html/media \
&& mkdir -p /usr/share/nginx/ssl
COPY dist/ /usr/share/nginx/html/
# 添加配置文件
COPY nginx.conf /etc/nginx/nginx.conf
# 构建镜像时执行的命令
RUN echo 'echo init ok!'
2、cd到frontend文件夹下,创建镜像
docker build -t vue_web .
3、启动容器
docker run -it -p 80:80 --name vue_web_c \
-d vue_web
4、至此前后端都已启动成功
注:
1、后续会再讲下如何用compose一键创建多个镜像、启动多个镜像,这样我们部署就会更方便
2、有疑问可以加我微信咨询哦liuxiaolu4986