zoukankan      html  css  js  c++  java
  • 使用docker-compose编排django、mysql实战

    背景:

    本萌最近在部署自己开发的项目的时候发现同一套代码上传到服务器上后,部分功能莫名其妙的有点问题,服务器的各项配置都没有做过变动,所以想把项目转战到docker。

    奈何刚接触docker,很多地方都不懂,在这个坑里面折腾了一两天。决定对本次实践做个过程总结希望少点人走弯路。

    系统环境:Centos7

    一、docker安装

    1、以root用户登录(使用sudo命令也行,本人懒,不想敲那么多字符),删除旧版本的docker;

    yum remove docker 
                      docker-client 
                      docker-client-latest 
                      docker-common 
                      docker-latest 
                      docker-latest-logrotate 
                      docker-logrotate 
                      docker-selinux 
                      docker-engine-selinux 
                      docker-engine

    2、如果以前安装过docker的,需要先删除以前的docker文件;

    rm -rfv /var/lib/docker/

    3、安装docker-ce(最新的系统可以不需要执行,本人为了保险起见执行了 ^0^);

    yum install -y yum-utils 
      device-mapper-persistent-data 
      lvm2

    4、下载docker-ce的yum源配置文件;

    yum-config-manager 
        --add-repo 
        https://download.docker.com/linux/centos/docker-ce.repo

    5、安装docker-ce;

    yum install docker-ce

    6、设置docker-ce随系统启动;

    systemctl enable docker

    7、启动docker;

    systemctl start docker

    8、验证docker是否安装成功;

    docker -v

    检查结果如下:

     

     9、安装docker-compose

    curl -L https://github.com/docker/compose/releases/download/1.20.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
    chmod +x /usr/local/bin/docker-compose

    二、编写项目dockerfile文件

    在动手写之前,先看下项目结构:

     

    编写好的Dockerfile文件如下:

    FROM python:3.6.4
    ENV PYTHONUMBUFFERED 1
    RUN mkdir /leartd
    RUN mkdir /leartd/dockermysql
    WORKDIR /leartd
    ADD requirements.txt /leartd/
    RUN pip install -r requirements.txt
    ADD . /leartd/

    三、编写docker-compose.yml文件

    version: '3'
    services:
            db:
                    image: mysql
                    restart: always
                    command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --init-connect='SET NAMES utf8mb4;' --innodb-flush-log-at-trx-commit=0
                    expose:
                            - "3306"
                    volumes:
                            - ./dockermysql:/var/lib/mysql:rw
                    environment:
                            - MYSQL_DATABASE=demodb
                            - MYSQL_ROOT_PASSWORD=123456
            web:
                    build: .
                    command: python manage.py runserver 0.0.0.0:9000 --insecure
                    volumes:
                            - .:/leartd
                    ports:
                            - "8080:9000"
                    depends_on:
                            - db
    command:执行的命令内容是为了给mysql指定字符编码,不指定时,默认使用的是lanti1编码,在使用中文字符的时候会乱码

    四、修改项目settings.py文件配置

    修改地方有两个,

    1、

    ALLOWED_HOSTS = ['*', ]

    2、

    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'NAME': 'demodb',
            'USER': 'root',
            'PASSWORD': '123456',
         'HOST': 'db', } }

    这里的NAME就是docker-compose.yml文件中的MYSQL_DATABASE,PASSWORD为docker-compose.yml文件中的MYSQL_ROOT_PASSWORD,HOST为docker-compose.yml文件第三行的内容

    五、编译项目

    docker-compose build

    六、启动项目

    docker-compose up
    或
    docker-compose up -d(后台运行)

    在浏览器中输入localhost:8080就可以成功访问项目了 

    七、附录

    1、查看当前docker容器中已有的image

    docker image ls

    2、查看所有的容器

    docker ps -a

    3、批量停止在运行中的容器

    docker ps -a | grep 'Up' | awk '{print $1}'| xargs docker container stop

    4、批量删除Exited状态的容器

    docker ps -a | grep 'Exited' | awk '{print $1}'| xargs docker container rm

    5、批量删除name为none的image

    docker image ls | grep none | awk '{print $3}' | xargs docker image rm

    八、未完全解决的问题:

    通过docker-compose up运行项目后,首次需要去web容器里面手动执行makemigrations、migrate、createsuperuser命令。

    暂时不知道怎么处理,如有大神路过还望指点一二 

    九、需要后续处理的问题:

    搭建私有registry,把镜像提交到私有的registry。

  • 相关阅读:
    java数组去重
    XMLBeans简记
    【转】JAVA中的多线程问题(高级面试中经常遇到)
    【转】马士兵_JAVA自学之路
    【摘】加载页面:您的网站如何导致访问者感染恶意软件
    iBatisNet学习笔记三:QuickStart
    知识点滴:持久层,DAO,API,DAL,BLL,DLL,csproj,sln
    新知识了解笔记:关于Ibatis,ORM等
    iBatisNet学习笔记一:配置
    Google Map API
  • 原文地址:https://www.cnblogs.com/ianduin/p/8747746.html
Copyright © 2011-2022 走看看