docker-compose チュートリアル
ドッカーの作成を開始する
サーチ…
備考
Composeは、マルチコンテナDockerアプリケーションを定義して実行するためのツールです。 Composeでは、作成ファイルを使用してアプリケーションのサービスを構成します。次に、単一のコマンドを使用して、構成からすべてのサービスを作成して開始します。 Composeのすべての機能の詳細については、機能のリストを参照してください。
Composeの使用は基本的に3段階のプロセスです。
-
Dockerfile使用してアプリの環境を定義し、どこでも再現できるようにします。 -
docker-compose.ymlであなたのアプリケーションを構成するサービスを定義し、孤立した環境で一緒に実行できるようにします。 - 最後に、
docker-compose up実行docker-compose upと、Composeがアプリ全体を起動して実行します。
インストール
OS XまたはWindowsでDockerを実行している場合は、 Docker for WindowsまたはDocker ToolboxインストールにDocker-composeを含める必要があります。
Linuxでは、GitHubリリースページから最新のバイナリを直接入手できます: https : //github.com/docker/compose/releases
特定のリリースは、次のコマンドでインストールできます。
curl -L https://github.com/docker/compose/releases/download/1.7.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
単純なアプリケーションを作成する
この例は公式文書からのものです。 redisをバックエンドとして使用しているPythonアプリケーションがあるとします。 Dockerfileを作成した後、次のようにDockerfile docker-compose.ymlファイルを作成します。
version: '2'
services:
web:
build: .
ports:
- "5000:5000"
volumes:
- .:/code
depends_on:
- redis
redis:
image: redis
次に、docker docker-compose up実行docker-compose upと、アプリケーション全体にpython appとredisが含まれます。
-
version: '2'はドッカー作成ファイル構文のバージョンです -
services:実行するサービスを記述するセクションです。 -
web:とredis:開始するサービスの名前です。 その内容はドッカーがそれらのサービスのコンテナをどのように開始するべきかを記述します -
depends_onはwebとredisの依存関係を意味し、そのためdocker-composeは最初にredisコンテナを起動し、次にwebコンテナを起動します。それにもかかわらず、docker-composeは、webコンテナを始める前にredisコンテナが準備完了するまで待たないでください。これを実現するには、アプリケーションサーバーの起動を遅らせるスクリプトを使用するか、またはredisコンテナが要求を実行できるようになるまでスクリプトを使用する必要があります。
ボリュームとネットワークセクションも追加できます。ボリュームセクションを使用すると、ドッキング用の作成サービスセクションとは独立して生きることができる切断されたボリュームが可能になります。ネットワークセクションにも同様の結果があります。
サービスの赤字部分は次のように調整する必要があります:
redis:
image: redis
volumes:
- redis-data:/code
networks:
-back-tier
次に、以下のセクションをドッカーのバージョン2ファイルの下に追加します。
volumes:
# Named volume
redis-data:
driver: local
networks:
back-tier:
driver: bridge
redis-dataは、サービスセクションからアクセス可能なラベルを提供します。 driver:localは、ボリュームをローカルファイルシステムに設定します。
back-tierは、ネットワーク・セクション・ラベルを、サービス・セクションでブリッジとしてアクセス可能に設定します。
docker-composeサービスでコマンドを実行する
docker-compose run service-name command
たとえば、 webサービスでrake db:createを実行する場合は、次のコマンドを使用します。
docker-compose run web rake db:create
ドッカーをインストールする
Permission deniedエラーが発生した場合は、以下の2つのコマンドの前にsudo -i実行して終了してください。
- ドッカーを引く
/usr/local/bin/docker-composeます。
curl -L https://github.com/docker/compose/releases/download/1.7.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
バージョン
1.7.1を希望のバージョンに変更することができます。 https://github.com/docker/compose/releasesからバージョンを取得してみてください
- 実行可能アクセス許可をバイナリに適用します。
chmod +x /usr/local/bin/docker-compose
- インストールをテストします。
docker-compose --version
期待されるドッカーの作成バージョン1.7.1、ビルド0a9ab35
ドッカーの作成hello world
非常に基本的なdocker-compose.ymlは次のようになります:
version: '2'
services:
hello_world:
image: ubuntu
command: [/bin/echo, 'Hello world']
このファイルは、 ubuntu:latest画像から初期化され、実行時にecho 'Hello world'というhello_worldサービスが作成されるようにしています。
あなたがfolderディレクトリにいるなら(そして、このdocker-compose.ymlファイルを含んでいる)、 docker-compose upください
Creating folder_hello_world_1
Attaching to folder_hello_world_1
hello_world_1 | Hello world
folder_hello_world_1 exited with code 0
これにより、ubuntuイメージからコンテナが作成され、 docker-compose.yml指定されたコマンドが実行されました
Docker-Composeはフォルダ名をプロジェクト名として使用し、コンテナとネットワークのプレフィックスを付けます。別のプロジェクト名を設定するには、 docker-compose --project-name NAME {up|down|...}呼び出すか、 .env docker-compose.yml隣に.envというファイルを.envし、 COMPOSE_PROJECT_NAME=nameそれ。ドッカーがこの種の名前で不思議なバハベを構成するので、ハイフン( - )で長いプロジェクト名を避ける方が良い。
注意:docker-composeを使用すると、単一のホスト上で複数のドッカーコンテナを実行できます。複数のノードで複数のコンテナを実行する場合は、swarm / kubernetesなどのソリューションを参照してください。
ドッカーが作成されたRuby on Rails
docker for rails appを使用してデータベースを使用する場合は、ドッカーコンテナ内のすべてのデータが破棄されることを知る必要があります(データを保持するためにコンテナを特に設定しない限り)。アプリケーションをデータベースと一緒に古いコンテナに接続します。
レールアプリケーションの例として、私は単純なアプリを使用しました。コマンドから作成することができます:
rails new compose-app --database=postgresql
もちろん、あらかじめレール、ルビーなどをインストールする必要があります。
次に、プロジェクトにDockerfileを作成し、このデータをプロジェクトに設定します。
FROM ruby:2.3.1
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs
RUN mkdir /compose-app
WORKDIR /compose-app
ADD Gemfile /compose-app/Gemfile
ADD Gemfile.lock /compose-app/Gemfile.lock
RUN bundle install
ADD . /compose-app
次のステップ - データとともにdocker-compose.ymlを作成します:
version: '2'
services:
db:
image: postgres
web:
build: .
command: bundle exec rails s -e development -p 80 -b '0.0.0.0'
volumes:
- .:/compose-app
ports:
- "80:80"
depends_on:
- db
80ポート(-p 80)を別のポートに置き換えることができます。
database.yml configの開発セクションは次のように変更する必要があります:
development: &default
adapter: postgresql
encoding: unicode
database: postgres
pool: 5
username: postgres
password:
host: db
これでコマンドからイメージを構築できます:
docker-compose build
(これをプロジェクトディレクトリで実行する)
そしてすべてから始める:
docker-compose up
すべてが正しく行われると、コンソールからレールからログを見ることができます。
コンソールを閉じます。それは働くでしょう。
データベースなしでrailsアプリケーションでコンテナのみを削除する場合は、プロジェクトディレクトリで実行する必要があります。
docker-compose stop web
docker-compose build web
docker-compose up -d --no-deps web
レールアプリを備えた新しいコンテナが作成され、起動されます。