Composeは、マルチコンテナDockerアプリケーションを定義して実行するためのツールです。 Composeでは、作成ファイルを使用してアプリケーションのサービスを構成します。次に、単一のコマンドを使用して、構成からすべてのサービスを作成して開始します。 Composeのすべての機能の詳細については、機能のリストを参照してください。
Composeの使用は基本的に3段階のプロセスです。
Dockerfile
使用してアプリの環境を定義し、どこでも再現できるようにします。 docker-compose.yml
であなたのアプリケーションを構成するサービスを定義し、孤立した環境で一緒に実行できるようにします。 docker-compose up
実行docker-compose up
と、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.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などのソリューションを参照してください。
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
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
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
レールアプリを備えた新しいコンテナが作成され、起動されます。
docker-compose run service-name command
たとえば、 web
サービスでrake db:create
を実行する場合は、次のコマンドを使用します。
docker-compose run web rake db:create