サーチ…


備考

Composeは、マルチコンテナDockerアプリケーションを定義して実行するためのツールです。 Composeでは、作成ファイルを使用してアプリケーションのサービスを構成します。次に、単一のコマンドを使用して、構成からすべてのサービスを作成して開始します。 Composeのすべての機能の詳細については、機能のリストを参照してください。

Composeの使用は基本的に3段階のプロセスです。

  1. Dockerfile使用してアプリの環境を定義し、どこでも再現できるようにします。
  2. docker-compose.ymlであなたのアプリケーションを構成するサービスを定義し、孤立した環境で一緒に実行できるようにします。
  3. 最後に、 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

ドッカーをインストールする

  1. Docker Engineをインストールします

Permission deniedエラーが発生した場合は、以下の2つのコマンドの前にsudo -i実行して終了してください。

  1. ドッカーを引く/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からバージョンを取得してみてください

  1. 実行可能アクセス許可をバイナリに適用します。
chmod +x /usr/local/bin/docker-compose
  1. インストールをテストします。
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

レールアプリを備えた新しいコンテナが作成され、起動されます。



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow