美文网首页
docker-compose一键构建详细实践

docker-compose一键构建详细实践

作者: 铁甲依然在人间 | 来源:发表于2020-06-24 15:29 被阅读0次

    背景

    1. 使用docker启动的容器方便归方便,但是每次操作还需要手动重新构建,即使使用dockerfile还是略显麻烦。
    2. docker-compose是一个容器编排工具,就好像是每个容器都按照模板启动,每次操作由工具来管理。
      以下是docker-compose参考介绍:
      https://www.jianshu.com/p/ca1623ac7723
      https://www.jianshu.com/p/d19a64b82b78

    准备

    1. 本次我们会启动四个容器mongo、mysql、flask框架写的业务逻辑部分和nginx部分
    2. 了解uwsgi协议、uWSGI服务器,了解nginx和uWSGI如何使用即可
      https://www.jianshu.com/p/48048554f989
    3. 参考一下docker-compose.yaml的书写规则
      https://www.jianshu.com/p/83047c191a61
    4. 整体逻辑要可以参考之前写的,这里业务端容器有些不同,使用uWSGIweb服务器和nginx
      https://www.jianshu.com/p/79042689b03c

    开始

    • 安装docker-compose
    #网上的加速方法进入/etc/hosts,加上54.231.98.184 github-com.s3.amazonaws.com,亲测有效
    
    #这个地址秒完成
     curl -L https://get.daocloud.io/docker/compose/releases/download/1.24.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
    chmod +x /usr/local/bin/docker-compose
    docker-compose version # 查看版本号,测试是否安装成功
    
    • 先看一下目录结构
    #新建yaml文件
    touch docker-compose.yaml
    #新建四个为容器准备的文件夹
    mkdir flask mongo mysql nginx 
    
     - 先看一下docker-compose.yaml怎么写。
    

    选取一些使用到的参数:
    env_file:环境变量文件
    restart:容器重启策略,这里使用的是失败后总重启,always
    volumes:文件挂载路径,前面是宿主机,冒号后面是容器内
    ports:映射端口,前面是宿主机,冒号后面是容器内的端口
    networks:docker的网络服务这里可以参考https://www.jianshu.com/p/347831f72d1c
    environment:环境变量

    😘mongo部分
    容器重启策略是always,数据持久化

    services:
      mongo:
        env_file:
          - .env
        image: mongo:latest
        container_name: mongo
        restart: always
        environment:
          MONGO_INITDB_ROOT_USERNAME: ${mongo_user}
          MONGO_INITDB_ROOT_PASSWORD: ${mongo_password}
        volumes:
          - ${mongo_dir}:/data/db
        ports:
          - ${mongo_port}:27017
        networks:
          - default-network
    
    

    😘mysql部分
    容器重启策略是always,数据持久化

     mysql-db:
        env_file:
          - .env
        container_name: mysql-docker
        restart: always
        image: mysql:latest
        ports:
          - "3307:3306"
        environment:
          MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
          MYSQL_ROOT_HOST: ${MYSQL_ROOT_HOST}
        volumes:
          - ${MYSQL_DIR}:/var/lib/mysql
        networks:
          - default-network
    
    

    😘flask部分

    cd flask
    #uwsgi配置
    vim uwsgi.ini
    #复制以下
    [uwsgi]
    #加载指定的python WSGI模块
    module = py_flask:app
    master = true
    processes = 4
    #代码的路径
    chdir = /app
    socket = :8002
    chmod-socket = 666
    #log日志
    logto = /app/app.log
    vacuum = true
    #添加需要装的扩展                  
    vim requirement.txt
    #其他请参考本系列前篇
    #编写容器的dockerfile
    vim Dockerfile
    
    FROM python:3.6.5
    ADD ./ /app
    WORKDIR  /app
    COPY . /app
    RUN pip install -i https://pypi.doubanio.com/simple/  --trusted-host pypi.doubanio.com -r requirement.txt
    CMD ["uwsgi", "--ini", "/app/uwsgi.ini"]
    
    
    
    
    

    把代码放在flask文件夹中,请参考本篇系列

     flask:
        build: ./flask
        container_name: flask
        restart: always
        volumes:
          - $PWD/flask:/app
        networks:
          - default-network
    
    

    tips:
    1.关于uwsgi配置项的socket怎么写我还是不特别明白,但是看一下这一篇会有一点理解
    2.uwsgi配置去掉注释,可能会报错
    https://zhuanlan.zhihu.com/p/72743798

    😘nginx部分

    
    cd nginx 
    vim flask.conf
    
    server {
          listen 80; 
          server_name 0.0.0.0;
        
          location / {
               include uwsgi_params;
               #这里写uWSGI配置项中的socket
               uwsgi_pass flask:8002;
        }
     }
    
    
      nginx:
        env_file:
          - .env
        container_name: docker-nginx
        restart: always
        image: nginx:latest
        ports: 
          - "8102:80" 
        volumes:
          - ${nginx_conf}/flask.conf:/etc/nginx/conf.d/default.conf
        depends_on:
          - flask 
        networks:
          - default-network
    
    

    参考以下.env 文件格式

    image.png
    tip:
    1.注释会被当空行过滤掉。

    😘补上docker-compose.yaml文件的另外部分

    version: "3"
    networks:
      default-network:
    
    

    tips
    1.version指定版本:
    2.不写networks会默认生成network,可以使用docker network ls查看。
    对应版本参考以下下
    https://www.jianshu.com/p/83047c191a61

    😘最后启动,o( ̄▽ ̄)o 🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹

    #在docker-compose.yaml同级目录
    docker-compose up -d
    
    #关闭
    docker-compose down 
    

    相关文章

      网友评论

          本文标题:docker-compose一键构建详细实践

          本文链接:https://www.haomeiwen.com/subject/cotbxktx.html