使用docker-compose編排django、mysql實戰

背景:python

本萌最近在部署本身開發的項目的時候發現同一套代碼上傳到服務器上後,部分功能莫名其妙的有點問題,服務器的各項配置都沒有作過變更,因此想把項目轉戰到docker。mysql

奈何剛接觸docker,不少地方都不懂,在這個坑裏面折騰了一兩天。決定對本次實踐作個過程總結但願少點人走彎路。linux

 

系統環境:Centos7git

 

1、docker安裝github

一、以root用戶登陸(使用sudo命令也行,本人懶,不想敲那麼多字符),刪除舊版本的docker;web

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

二、若是之前安裝過docker的,須要先刪除之前的docker文件;sql

rm -rfv /var/lib/docker/

三、安裝docker-ce(最新的系統能夠不須要執行,本人爲了保險起見執行了 ^0^);docker

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

四、下載docker-ce的yum源配置文件;django

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

五、安裝docker-ce;centos

yum install docker-ce

六、設置docker-ce隨系統啓動;

systemctl enable docker

七、啓動docker;

systemctl start docker

八、驗證docker是否安裝成功;

docker -v

檢查結果以下:

 

 九、安裝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

 

2、編寫項目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/

 

 

3、編寫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編碼,在使用中文字符的時候會亂碼

 

4、修改項目settings.py文件配置

修改地方有兩個,

一、

ALLOWED_HOSTS = ['*', ]

二、

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文件第三行的內容

 

5、編譯項目

docker-compose build

 

6、啓動項目

docker-compose up
或
docker-compose up -d(後臺運行)

在瀏覽器中輸入localhost:8080就能夠成功訪問項目了 

 

7、附錄

一、查看當前docker容器中已有的image

docker image ls

二、查看全部的容器

docker ps -a

三、批量中止在運行中的容器

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

四、批量刪除Exited狀態的容器

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

五、批量刪除name爲none的image

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

 

8、未徹底解決的問題:

經過docker-compose up運行項目後,首次須要去web容器裏面手動執行makemigrations、migrate、createsuperuser命令。

暫時不知道怎麼處理,若有大神路過還望指點一二 

 

9、須要後續處理的問題:

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

相關文章
相關標籤/搜索