• DockerFile案例


    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,进行登录测试

  • 相关阅读:
    验证信息json返回,前台接收显示无刷新。笔记
    ThinkPHP5 查询数据并处理结果
    PHP 数组和字符串互相转换实现方法
    php+jquery+ajax+json的一个最简单实例
    is_numeric 检测变量是否为数字或数字字符串
    PHP中使用cURL实现Get和Post请求的方法
    mb_substr实例
    推荐:多目标 mmoe
    多目标模型--DBMTL
    正负例优化
  • 原文地址:https://www.cnblogs.com/yqyn-study/p/13358585.html
Copyright © 2020-2023  润新知