docker-composeドッカーの作成を開始する


備考

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

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

  1. Dockerfile使用してアプリの環境を定義し、どこでも再現できるようにします。
  2. docker-compose.ymlであなたのアプリケーションを構成するサービスを定義し、孤立した環境で一緒に実行できるようにします。
  3. 最後に、 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 は、ネットワーク・セクション・ラベルを、サービス・セクションでブリッジとしてアクセス可能に設定します。

ドッカーの作成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などのソリューションを参照してください。

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

  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

インストール

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
 

詳細は、 ドキュメントページを参照してください。

ドッカーが作成された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
 

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

docker-composeサービスでコマンドを実行する

docker-compose run service-name command

たとえば、 web サービスでrake db:create を実行する場合は、次のコマンドを使用します。

docker-compose run web rake db:create