zoukankan      html  css  js  c++  java
  • python测试开发django180.dockercompose部署django+mysql环境 上海

    前言

    部署django项目需用到mysql数据库,还需要自己写一个Dockerfile文件部署django的容器。
    多个容器部署的时候可以用到docker-compose 进行容器编排。

    docker-compose环境准备

    使用 python3 的 pip3 安装 docker-compose 命令行工具

    pip3 install docker-compose
    

    安装的版本Version: 1.29.2

    # pip3 show docker-compose
    Name: docker-compose
    Version: 1.29.2
    Summary: Multi-container orchestration for Docker
    Home-page: https://www.docker.com/
    Author: Docker, Inc.
    Author-email: None
    License: Apache License 2.0
    Location: /root/python36/lib/python3.6/site-packages
    

    安装完成后,找到docker-compose目录所在的bin目录地址

    find /root -name docker-compose
    

    添加软链接

    ln -s /your/path/bin/docker-compose /usr/bin/docker-compose
    

    docker-compose 文件编写

    1.先编写启动 django 的 Dockerfile 文件

    FROM python:3.6.8
    MAINTAINER yoyo <283340479@qq.com>
    RUN sed -i s@/deb.debian.org/@/mirrors.aliyun.com/@g /etc/apt/sources.list
    RUN apt-get update
    RUN apt-get -y install vim
    RUN apt-get -y install lrzsz
    RUN pip install --upgrade pip --index-url https://pypi.douban.com/simple
    WORKDIR /code
    ADD . /code
    RUN pip install -r requirements.txt --index-url https://pypi.douban.com/simple
    
    # 开放端口
    EXPOSE 8000
    

    CMD执行命令先不写到dockerfile文件,因为数据库还没启动,配置cmd启动django服务会报错

    2.修改 setttings.py 文件中数据库配置

    DATABASES = {
            'default': {
                'ENGINE': 'django.db.backends.mysql',
                'NAME': 'hrun',  # 新建数据库名
                'USER': 'root',  # 数据库登录名
                'PASSWORD': '123456',  # 数据库登录密码
                'HOST': 'db',  # 数据库所在服务器地址(docker-compose文件links地址关联db)
                'PORT': 3306,  # 监听端口 默认3306即可
            }
        }
    

    3.docker-compose.yml

    version是指定 docker-compose.yml 文件的写法格式版本3.0
    services 是需要启动的服务,多个服务键值对

    version: '3.0'
    services:
      db:
        restart: always
        image: mysql:5.7
        container_name: yy_mysql
        volumes:
          - ./db:/var/lib/mysql
        environment:
          MYSQL_ROOT_PASSWORD: "123456"
          MYSQL_DATABASE: "hrun"
          TZ: "Asia/Shanghai"
        ports:
          - 3306:3306
      web:
        restart: always
        build: .
        container_name: yy_web
        command: python manage.py runserver 0.0.0.0:8000
        ports:
          - 8000:8000
        links:
          - db
        depends_on:
          - db
    

    services配置启动服务的参数

    • image:指定服务所使用的镜像
    • container_name:定义启动容器的名称
    • expose:定义容器用到的端口(一般用来标识镜像使用的端口,方便用ports映射)
    • ports:定义宿主机端口和容器端口的映射,可使用宿主机IP+宿主机端口进行访问 宿主机端口:容器端口
    • volumes:卷挂载路径,定义宿主机的目录/文件和容器的目录/文件的映射 宿主机路径:容器路径
    • depend_on: 规定service加载顺序,例如数据库服务需要在后台服务前运行
    • restart: always :配置重启,docker每次启动时会启动该服务
    • links:将指定容器连接到当前连接,可以设置别名,已废弃,推荐使用networks
    • environment: 启动容器环境变量
    • command:启动容器执行的cmd命令

    docker-compose运行

    docker-compose中web服务是本地镜像,可以先使用 build 构建镜像(不先build也可以,直接 up也会先build本地镜像)

    docker-compose build
    

    构建过程

    [root@iZ2]# docker-compose build
    Building web
    Sending build context to Docker daemon  289.2MB
    Step 1/17 : FROM python:3.6.8
     ---> 48c06762acf0
    Step 2/17 : MAINTAINER yoyo <283340479@qq.com>
     ---> Using cache
     ---> 128b4ae83de3
    Step 3/17 : RUN sed -i s@/deb.debian.org/@/mirrors.aliyun.com/@g /etc/apt/sources.list
     ---> Using cache
     ---> f974c67bcf87
    Step 4/17 : RUN apt-get update
     ---> Using cache
     ---> d3ac17c4760f
    Step 5/17 : RUN apt-get -y install vim
     ---> Using cache
     ---> 6d5c2962aa1d
    Step 6/17 : RUN apt-get -y install lrzsz
     ---> Using cache
     ---> 16c6a337d525
    Step 7/17 : RUN pip install --upgrade pip --index-url https://pypi.douban.com/simple
     ---> Using cache
     ---> 8e9efdca8ab0
    Step 8/17 : WORKDIR /code
     ---> Using cache
     ---> 37d16b8cb963
    Step 9/17 : ADD . /code
    

    启动服务

    docker-compose up
    

    启动过程

    Starting yy_mysql ... done
    Starting yy_web   ... done
    Attaching to yy_mysql, yy_web
    yy_mysql | 2021-12-28 21:25:22+08:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 5.7.36-1debian10 started.
    yy_mysql | 2021-12-28 21:25:22+08:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'
    yy_mysql | 2021-12-28 21:25:22+08:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 5.7.36-1debian10 started.
    

    加-d参数,挂后台启动

    docker-compose up -d
    

    停掉服务

    docker-compose stop
    

    docker ps 可以查看到启动了yy_mysql 和 yy_web两个容器

    [root@iZ2]# docker ps
    CONTAINER ID   IMAGE                           COMMAND                  CREATED          STATUS          PORTS                                                                                        NAMES
    10495551676c   h2_web   "python manage.py ru…"   12 minutes ago   Up 15 seconds   0.0.0.0:8000->8000/tcp                                                                       yy_web
    76ade7a55ab4   mysql:5.7                       "docker-entrypoint.s…"   12 minutes ago   Up 15 seconds   0.0.0.0:3306->3306/tcp, 33060/tcp  
    

    需注意的是,这样部署后,同步数据库的指令,需进yy_web容器执行

    python manage.py makemigrations
    python manage.py migrate
    
  • 相关阅读:
    JavaScript正则表达式(四)
    JavaScript三元运算符以及运算符顺序
    JavaScript进制转换
    JavaScript赋值运算符和关系运算符
    JavaScript输出
    hadoop1.2.1的安装
    SSH免费登录
    使用java poi解析表格
    【深入理解JVM】:Java类继承关系中的初始化顺序
    解决yum安装mysql时Requires: libc.so.6(GLIBC_2.17)(64bit)
  • 原文地址:https://www.cnblogs.com/yoyoketang/p/15739235.html
Copyright © 2011-2022 走看看