Django+MySQL環境の展開
7944 ワード
Django環境をDocer-composeで展開する:
@System-Centos 7.0
@Django-1.5.5
@Python-3.6.0
第2行のENVは環境変数(PYTHONU NUFFEREDはここを参照)
第3行のRUN命令は、ミラー内に新規/コードディレクトリを作成することを示します。
4行目は、RUN、CMD、ENTRY POINTコマンドのワークディレクトリを指定します。
5行目は./myssite/requirements.txtファイルを先ほど作成したコードディレクトリに追加します。
6行目はpipのインストールに必要なソフトウェアを実行します。
前のDocerfileはアプリケーションを定義しましたが、composeを使って、一つのファイルの中で、多容器のアプリケーションを定義できます。このYAML設定言語は、多容器の分散アプリケーションを記述し、組み立てするために使用されます。プロジェクトのルートディレクトリにdocker-componese.ymlファイルを作成します。その内容は以下の通りです。
イメージはmysqlイメージを使用しています。
exposeは暴露ポート3306を表しているが、シンクホストには公開されない。
volumeは宿泊ホストのパスをロールとして表しています。左は宿主経路で、右はミラー内経路です。
environmentは環境変数です。各容器には自分で定義した環境変数があります。具体的にはミラーマニュアルのmysqlを調べます。
ウェブタグ:
buildはDocerfileルートの確立を指定します。
commandはデフォルトのコマンドを上書きします。
ポータブルはホストオープンのポートを指定します。
linksは他の容器の中のサービスを指します。
サブディレクトリmysteでrequirements.txtファイルの内容は以下の通りです。
そしてMySQLフォルダのOBServerデータベースをmysqlコンテナに移します。
mysteディレクトリに入り、コンテナを起動します。
@エラーなくCrtl+Cはアプリケーションを終了し、バックグラウンドに移動して実行します。
バックグラウンドの実行:
@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は容器を削除するので注意してください。