1.Docker项目案例
需求说明: 编写Dockerfile文件构建镜像,来实现镜像创建容器时使用uwsgi启动美多商城项目
流程分析:
① docker环境部署: 使用docker镜像启动一个容器即可,由于我们需要在外部看到容器内效果,所以需要暴露端口信息
② 项目环境部署: 项目依赖模块环境:包括uwsgi+django等模块
③ 项目部署: uwsgi配置:主要是uwsgi.ini
④ 测试: 宿主机测试
2. 项目手动部署步骤
方案实施:
① docker环境配置
# 1.1 查看docker镜像 docker images python3:v0.1 # 1.2 宿主机准备文件 mkdir -p /data/docker/image && cd /data/docker/image cp -a /data/meiduo/meiduo_mall . # 1.3 启动docker容器:容器名称叫meiduo docker run -it --network=host --name=meiduo -v /data/meiduo/meiduo_mall/:/data/meiduo/meiduo_mall/ python3:v0.1
② 项目环境部署
# 2.1 容器中安装美多商城项目的依赖模块 docker exec -it meiduo apt-get update apt-get install libmysqlclient-dev -y cd /data/meiduo/meiduo_mall/ pip3 install -r requirements.txt cd scripts pip3 install fdfs_client-py-master.zip cd .. rm -rf ~/.cache/pip/
③django项目部署
a. uwsgi配置文件编辑(uwsgi.ini)
[uwsgi] # uwsgi配合nginx服务器使用,使用server指定服务器ip:port socket=0.0.0.0:8001 # 项目目录 chdir=/data/meiduo/meiduo_mall/ # 项目中wsgi.py文件的路径,相对于项目目录 wsgi-file=meiduo_mall/wsgi.py # 工作进程数 processes=4 # 工作进程中的线程数 threads=2 # uwsgi服务器的角色 master=True # 存放主进程编号的文件 pidfile=uwsgi.pid # 日志文件,因为uwsgi可以脱离终端在后台运行,日志看不见,以前的runserver是依赖终端的 daemonize=uwsgi.log # 指定项目依赖的虚拟环境 # virtualenv=/Users/smart/.virtualenvs/meiduo 该行注释掉原因如下
将美多商城项目下的uwsgi.ini文件进行如下修改:
1. 将virtualenv配置项注释:容器系统中直接安装的python3环境,没有使用到虚拟环境。
b. uwsgi 启动项目:
uwsgi --ini uwsgi.ini
④ 修改nginx配置文件meiduo.conf: (nginx配置文件位置在/etc/nginx/conf.d文件夹下)
# vi /etc/nginx/conf.d/meiduo.conf server { listen 80; server_name www.meiduo.site; location =/ { root /data/meiduo/front_page/; index index.html; try_files $uri $uri/ =404; } location ~ .html$ { root /data/meiduo/front_page/; } location /static { alias /data/meiduo/front_page/; } location / { include uwsgi_params; uwsgi_pass 192.168.19.130:8001; } }
⑤ 访问www.meiduo.site, 进行登录测试
3. Dockerfile构建镜像 实现项目部署
① 环境分析
1. 增加项目文件,使用ADD或者COPY指令 后端项目代码 2. 安装软件,使用RUN指令 安装模块 3. 项目端口,使用EXPOSE指令 需要暴露8001和8002端口即可 4. 容器运行,使用ENTRYPOINT
② 方案实践
a. 进入宿主机目录:
cd /data/docker/image
b. Dockerfile内容: 创建文件 touch Dockerfile D一定要大写
# ① 基础镜像 FROM python3:v0.1 # ② 作者信息 LABEL maintainer=smartli.smartli_it@163.com # ③ 执行操作 RUN apt-get update RUN apt-get install libmysqlclient-dev -y ADD ./meiduo_mall/ /data/meiduo/meiduo_mall/ WORKDIR /data/meiduo/meiduo_mall/ RUN pip3 install -r requirements.txt WORKDIR scripts/ RUN pip3 install fdfs_client-py-master.zip WORKDIR ../ RUN rm -rf ~/.cache/pip/ EXPOSE 8001 8002 # ④ 入口指令 ENTRYPOINT uwsgi --ini uwsgi.ini
编写Dockerfile时,需要对uwsgi.ini的配置文件再进行修改:
1. 将daemonize配置项注释:容器运行后必须有一个程序在前台运行,否则容器运行后马上会退出。
c 构建指定镜像
注释: docker build -t [镜像名]:[版本号] [Dockerfile所在目录]
docker build -t meiduo:v0.1 .
运行镜像:
docker run --network=host --name=web-01 -d meiduo:v0.1
查看8001端口
netstat -tnulp | grep 8001
③ 效果检查
访问www.meiduo.site
,进行登录测试