Django+MySQL環境の展開

7944 ワード

Django環境をDocer-composeで展開する:
@System-Centos 7.0
@Django-1.5.5
@Python-3.6.0
yum -y install docker
systemctl start docker
シシシシシシシドはダオロドの鏡像を使って加速させます。
vim /etc/docker/daemon.json

{
    "registry-mirrors": [
        "http://5c51d642.m.daocloud.io"
    ],
    "insecure-registries": []
}
docker pull mysql   #        
docker pull django:1.9.5  #        
docker pull python:3.6.0   #        
mkdir -p /mysite/{DjangoWeb,db}
Docerfileは、ミラーを作成するために必要なすべてのコマンドを含みます。プロジェクトのルートディレクトリの下でDocerfileファイルを作成します。その内容は以下の通りです。
vim /mysite/Dockerfile

FROM python:3.6.0
ENV PYTHONUNBUFFERED 1
RUN mkdir /code
RUN mkdir /code/db
WORKDIR /code
ADD ./DjangoWeb/requirements.txt /code/
RUN pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt 
ADD . /code/
1行目のFROM命令は、新しいミラーがpython:2.7のミラーに基づいて構築されることを示しています。
第2行のENVは環境変数(PYTHONU NUFFEREDはここを参照)
第3行のRUN命令は、ミラー内に新規/コードディレクトリを作成することを示します。
4行目は、RUN、CMD、ENTRY POINTコマンドのワークディレクトリを指定します。
5行目は./myssite/requirements.txtファイルを先ほど作成したコードディレクトリに追加します。
6行目はpipのインストールに必要なソフトウェアを実行します。
前のDocerfileはアプリケーションを定義しましたが、composeを使って、一つのファイルの中で、多容器のアプリケーションを定義できます。このYAML設定言語は、多容器の分散アプリケーションを記述し、組み立てするために使用されます。プロジェクトのルートディレクトリにdocker-componese.ymlファイルを作成します。その内容は以下の通りです。
vim /mysite/docker-compose.yml

db:
  image: mysql
  expose:
    - "3306"
  volumes:
    - ./db:/var/lib/mysql
  environment:
    - MYSQL_DATABASE=mysitedb
    - MYSQL_ROOT_PASSWORD=888888

web:
  build: .
  command: python ./DjangoWeb/manage.py runserver 0.0.0.0:8000
  volumes:
    - .:/code
  ports:
    - "8000:8000"
  links:
    - db
dbタグ:
イメージはmysqlイメージを使用しています。
exposeは暴露ポート3306を表しているが、シンクホストには公開されない。
volumeは宿泊ホストのパスをロールとして表しています。左は宿主経路で、右はミラー内経路です。
environmentは環境変数です。各容器には自分で定義した環境変数があります。具体的にはミラーマニュアルのmysqlを調べます。
ウェブタグ:
buildはDocerfileルートの確立を指定します。
commandはデフォルトのコマンドを上書きします。
ポータブルはホストオープンのポートを指定します。
linksは他の容器の中のサービスを指します。
サブディレクトリmysteでrequirements.txtファイルの内容は以下の通りです。
vim /mysite/DjangoWeb/requirements.txt 

django==1.9.5
mysqlclient
django-admin-bootstrapped
bootstrap3
pillow
ミラーを構築:
cd /mysite
docker-compose build
docker images

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
mysite_web          latest              43b4615f87c7        6 minutes ago       720.5 MB
docker.io/mysql     latest              b4e78b89bcf3        9 days ago          412.3 MB
docker.io/python    3.6.0               a1782fa44ef7        7 months ago        687.1 MB
docker.io/django    1.9.5               c5b6e7c5c44c        17 months ago       433.4 MB
docker-compose run web django-admin.py startproject webserver ./DjangoWeb
docker ps -a

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                     PORTS               NAMES
ad0c75e2fd3d        mysite_web          "django-admin.py star"   5 minutes ago       Exited (0) 5 minutes ago                       mysite_web_run_1
77e91e05178d        mysql               "docker-entrypoint.sh"   5 minutes ago       Up 5 minutes               3306/tcp            mysite_db_1
chmod -R 777 DjangoWeb
vim DjangoWeb/webserver/settings.py

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'mysitedb',
        'USER': 'root',
        'PASSWORD': '888888',
        'HOST': 'db',
        'PORT': 3306,
    }
}
netポートマップを追加
[root@VM_34_67_centos DjangoWeb]# docker inspect 1bf8642343e3 | grep IPAddress
            "SecondaryIPAddresses": null,
            "IPAddress": "172.17.0.3",
                    "IPAddress": "172.17.0.3",
[root@VM_34_67_centos DjangoWeb]# iptables -t nat -A  DOCKER -p tcp --dport 80 -j DNAT --to-destination 172.17.0.3:8000     
プロジェクトを新しいプロジェクトに移すことができます。
そしてMySQLフォルダのOBServerデータベースをmysqlコンテナに移します。
mysteディレクトリに入り、コンテナを起動します。
docker-compose up
いくつかのpythonモジュールはymlに記載されていません。容器に入る必要があります。
@エラーなくCrtl+Cはアプリケーションを終了し、バックグラウンドに移動して実行します。
バックグラウンドの実行:
docker-compose up -d
アプリケーションを終了:
docker-compose stop
@downは容器を削除するので注意してください。