目次[-]- ローカル設定
- Dockerマシン
- Dockerコンポーズ
- 展開する
Dockerはオープンソースのアプリケーションコンテナエンジンであり、開発者はアプリケーションと依存関係をポータブルなコンテナにパッケージ化できます。このコンテナは、一般的なLinuxマシンにデプロイすることで仮想化を実現します。2013年のリリース以来、GitHub上で活発に利用されているコードベース、Red HatのRHEL 6.5へのDockerサポートの統合、そしてGoogleのCompute EngineがDockerをサポートしていることからも、その人気は明らかです。 [[140734]] この記事では、Docker Machine (システム構成) と Docker Compose (マルチコンテナ アプリケーションのアセンブリ) を使用して、Postgres、Redis、および Django を組み合わせたプロジェクトを開発するためのスタックを提供する方法について詳しく説明します。 *** では、このスタックは次のサービスごとに個別のコンテナーで構成されます。 - Web/Djangoコンテナ
- Nginxコンテナ
- Postgresコンテナ
- Redisコンテナ
- データコンテナ
ローカル設定Dockerバージョン1.6.1を使用し、Docker Compose 1.2.0を使用してマルチコンテナアプリケーションのオーケストレーションを行い、Docker Machine 0.2.0を使用してローカルおよびクラウドのDockerホストを作成します。以下の手順に従ってDocker ComposeとDocker Machineをそれぞれインストールし、インストール結果をテストします。 - $ docker-machine
- docker-machine バージョン 0.2.0 (8b9eaf2)
- $ docker-compose
- docker-compose 1.2.0
次に、 realpython/dockerizing-djangoからプロジェクトを複製するか、次のプロジェクト構造に基づいて独自のプロジェクトを作成します。 - ├── docker-compose.yml
- ├── nginx
- │ ├── Dockerfile
- │ └── サイト対応
- │ └── django_project
- ├── production.yml
- └── ウェブ
- │ ├── Dockerfile
- │ ├── docker_django
- │ │ ├── __init__.py
- │ │ ├── アプリ
- │ │ │ ├── __init__.py
- │ │ │ └── とどう
- │ │ │ ├── __init__.py
- │ │ │ ├── admin.py
- │ │ │ ├── models.py
- │ │ │ ├── テンプレート
- │ │ │ │ ├── _base.html
- │ │ │ │ └── ホーム.html
- │ │ │ ├── テスト.py
- │ │ │ ├── urls.py
- │ │ │ └── views.py
- │ │ ├── 設定.py
- │ │ ├── urls.py
- │ └── wsgi.py
- │ ├── manage.py
- │ ├── 要件.txt
- │ └──静的
- │ │ └── main.css</code>
これでコンテナを実行する準備が整いました... #p# DockerマシンDocker Machine を起動するには、次のコマンドを実行します。 - 仮想マシンをホストするdocker machineを作成します。
- INFO[0000] CAを作成しています: /Users/michael/.docker/machine/certs/ca.pem
- INFO[0000] クライアント証明書を作成しています: /Users/michael/.docker/machine/certs/cert.pem
- INFO[0001] boot2docker.iso を/Users/michael/.docker/machine/cache/boot2docker.isoにダウンロードしています...
- INFO[0035] SSHキーを作成しています...
- INFO[0035] VirtualBox VMを作成しています...
- INFO[0043] VirtualBox VMを起動しています...
- INFO[0044] VMの起動を待機しています...
- INFO[0094] 「dev」が作成され、 現在はアクティブなマシンです。
- INFO[0094] Dockerクライアントをこれに接続するには、シェルで次のコマンドを実行します: eval "$(docker-machine env dev)"
`create` コマンドは、新しい Machine の「開発環境」を構築します。基本的には、Boot2Docker をダウンロードし、VM の実行を開始します。開発環境では、Docker を指定するだけです。 - $ eval "$(docker-machine env dev)"
現在実行中のマシンを表示するには、次のコマンドを実行します。 - $ docker-machine ls
- 名前アクティブドライバー 状態 URL
- dev * virtualbox 実行中 tcp://192.168.99.100:2376
次に、Django、Postgres、Redis のコンテナを起動して実行します。 Dockerコンポーズdocker-compose.yml ファイルを見てみましょう。 - ウェブ:
- 再起動: 常に
- ビルド: ./web
- さらす:
- - 「8000」
- リンク:
- - postgres:postgres
- - レディス:レディス
- ボリューム:
- - /usr/src/app/静的
- 環境ファイル: .env
- コマンド: /usr/ local /bin/gunicorn docker_django.wsgi:application -w 2 -b :8000
-
- nginx:
- 再起動: 常に
- ビルド: ./nginx/
- ポート:
- - 「80:80」
- ボリューム:
- - /www/静的
- ボリューム数:
- - ウェブ
- リンク:
- - ウェブ:ウェブ
-
- ポストグルス:
- 再起動: 常に
- 画像: postgres:latest
- ボリューム数:
- - データ
- ポート:
- - 「5432:5432」
-
- レディス:
- 再起動: 常に
- 画像: redis:latest
- ポート:
- - 「6379:6379」
-
- データ:
- 再起動: 常に
- 画像: postgres:latest
- ボリューム:
- - /var/lib/postgresql
- コマンド: true
ここでは、Web、Nginx、Postgres、Redis、Data の 5 つのサービスを定義します。 - このウェブサービスは、「Web」ディレクトリ内のDockerfileを使用して構築され、Python環境もセットアップされます。Djangoアプリケーションはデフォルトでポート8000を使用します。このポートはホスト環境(例えばDocker Machine)のポート80に転送されます。また、このウェブサービスはコンテナのRestore.envファイルに環境変数を追加します。
- Nginx サービスは、Django または静的ファイル ディレクトリで動作するリバース プロキシとして使用されます。
- Postgresサービスは、Docker Hub上の公式PostgreSQLイメージからインストールされます。インストール後、Postgresはデフォルトサーバーのポート5432で実行されます。
- Redisは公式Redisイメージを使用してインストールされます。デフォルトでは、Redisサービスはポート6379で実行されます。
- データベースデータを格納するための別のコンテナ「Data」があることに注意してください。これにより、Postgresコンテナが完全に破壊された場合でも、データが保持されます。
次に、コンテナを実行し、イメージをビルドして、サービスを開始します。 - $ docker-compose ビルド
- $ docker-compose up -d
最初に実行するには多少時間がかかるため、コーヒーを飲んだり散歩に出かけたりする時間ができます。その後、Docker キャッシュからより高速なバージョンをビルドできます。 サービスが起動したら、データベースの移行を作成する必要があります。 - $ docker-compose 実行 web /usr/ local /bin/python manage.py 移行
`--docker-machine ip--` コマンドを使用して Docker Machine の IP アドレスを取得し、その IP アドレスをブラウザに入力します。 上記の画像が表示されたら、ページを更新すると更新されているはずです。基本的には、RedisのINCRを使って処理済みのリクエストごとにインクリメントします。詳しくは、 web/docker_django/apps/todo/views.pyコードをご覧ください。 #p# 同様に、これにより 5 つのサービスが作成され、すべて異なるコンテナーで実行されます。 - $ docker-compose ps
- 名前コマンド 状態 ポート
-
- dockerizingdjango_data_1 /docker-entrypoint.sh true 5432/tcp を起動
- dockerizingdjango_nginx_1 /usr/sbin/nginx 0.0.0.0:80->80/tcp を起動
- dockerizingdjango_postgres_1 /docker-entrypoint.sh postgres 0.0.0.0:5432->5432/tcp を起動
- dockerizingdjango_redis_1 /entrypoint.sh redis-server 0.0.0.0:6379->6379/tcp を起動します
- dockerizingdjango_web_1 /usr/ local /bin/gunicorn do ... 8000/tcp へアクセス
Web サービスで使用できる環境変数を確認するには、次のコマンドを実行します。 - $ docker-compose ウェブ環境を実行
ログを表示するには、次のコマンドを実行します。 - $ docker-compose ログ
Postgres Shell にアクセスすることもできます。これは、ユーザー/ロールとポート転送をホスト環境に追加して、docker-compose.yml ファイル経由でデータベースをすでに構成しているためです。 - $ psql -h 192.168.99.100 -p 5432 -U postgres
デプロイする準備はできましたか? まず、 docker-compose stopの実行を停止し、アプリケーションをクラウドで実行します。 展開するアプリケーションをローカルで実行するのと同じように、全く同じDocker Machine環境を提供するクラウドホスティングサービスプロバイダーにプッシュできるようになりました。それでは、Digital Oceanにデプロイしてみましょう。 Digital Ocean に登録後、個人アクセストークンを生成します。その後、以下のコマンドを実行してください。 - $ docker-machine作成\
- -d デジタルオーシャン \
-
- 生産
ドロップレットをデプロイし、新しい Docker Machine の本番環境をセットアップするには数分かかります。 - INFO[0000] SSHキーを作成しています...
- INFO[0001] デジタルオーシャンドロップレットを作成しています...
- INFO[0133] 「production」が作成され、 現在はアクティブなマシンです。
- INFO[0133] Dockerクライアントをこれに接続するには、シェルで次のコマンドを実行します: eval "$(docker-machine env production)"
現在、ローカルに 1 台、Digital Ocean 上に 1 台の 2 台のマシンが稼働しています。 - $ docker-machine ls
- 名前アクティブドライバー 状態 URL
- dev * virtualbox 実行中 tcp://192.168.99.100:2376
- 本番環境 digitalocean 実行中 tcp://104.131.107.8:2376
マシンをアクティブ化し、Docker 環境をシェルにロードするように production を構成します。 - $ docker-machine アクティブプロダクション
- $ eval "$(docker-machine env production)"
Djangoアプリケーションをクラウドで再構築してみましょう。今回は、コンテナ内にインストールする必要のない、少し異なるDocker Composeファイルを使用します。なぜでしょうか?コンテナはローカル開発に最適であり、「Web」ディレクトリ内のローカルコードを更新すれば、その変更がすぐにコンテナに反映されるからです。本番環境では、これは明らかに不要です。 - $ docker-compose ビルド
- $ docker-compose up -d -f production.yml
- $ docker-compose 実行 web /usr/ local /bin/python manage.py 移行
Digital Oceanアカウントに関連付けられたIPアドレスを取得し、ブラウザで確認してください。すべてがうまくいけば、アプリケーションが実行されるはずです。 |