Docker (IV): Docker 三銃士の Docker Compose

Docker (IV): Docker 三銃士の Docker Compose

前回の 2 つの記事では、Dockerfile の使用方法を紹介しました。 Dockerfile テンプレート ファイルを使用して単一のアプリケーション コンテナーを定義できることはわかっています。複数のコンテナを定義する必要がある場合は、サービス オーケストレーションが必要です。サービス オーケストレーションには多くの技術的ソリューションが存在します。今日は Docker の公式製品である Docker Compose を紹介します。

Dockerfile を使用すると、ユーザーは単一のアプリケーション コンテナーを管理できます。 Compose を使用すると、Web サービス コンテナーとバックエンド データベース サービス コンテナーなど、関連するアプリケーション コンテナーのグループ (プロジェクトと呼ばれる) をテンプレート (YAML 形式) で定義できます。

[[228210]]

Docker Compose の紹介

Docker-Compose は Docker 用のオーケストレーション サービスです。これは、Docker 上で複雑なアプリケーションを定義および実行するためのツールであり、ユーザーはクラスターに分散アプリケーションをデプロイできます。

Docker-Compose を使用すると、ユーザーは構成ファイルを使用してマルチコンテナ アプリケーションを簡単に定義し、1 つの命令を使用してアプリケーションのすべての依存関係をインストールしてビルドを完了できます。 Docker-Compose は、コンテナ間のオーケストレーションを管理する方法の問題を解決します。

Docker Compose の動作原理図

Compose には 2 つの重要な概念があります。

  • サービス: アプリケーションのコンテナ。実際には、同じイメージを実行する複数のコンテナ インスタンスを含めることができます。
  • プロジェクト: docker-compose.yml ファイルで定義された、関連するアプリケーション コンテナーのセットで構成される完全なビジネス ユニット。

プロジェクトは複数のサービス (コンテナ) で構成できます。 Compose はプロジェクトを管理し、サブコマンドを使用してプロジェクト内のコンテナ グループのライフサイクルを便利に管理します。

Compose プロジェクトは Python で記述されており、コンテナを管理するために Docker サービスによって提供される API を呼び出します。したがって、オペレーティング プラットフォームが Docker API をサポートしている限り、Compose をオーケストレーション管理に使用できます。

Docker Compose のインストール

Docker Compose は Docker の独立した製品であるため、Docker をインストールしてから Docker Compose を別途インストールする必要があります。

方法1:

  1. curl -L https://github.com/docker/compose/releases/download/1.19.0/docker-compose-`uname -s`-`uname -m` -o /usr/ local /bin/docker-compose
  2. chmod +x /usr/ローカル/bin/docker-compose
  3. #バージョンを確認する
  4. docker-compose バージョン

方法2:

  1. #pipをインストールする
  2. yum -y epel-release をインストールします
  3. yum -y python-pip をインストールします
  4. #バージョンを確認
  5. pip --version  
  6. # pip を更新
  7. pip インストール--upgrade pip  
  8. #docker-composeをインストールする
  9. pip で docker-compose をインストールします
  10. #バージョンを確認する
  11. docker-compose バージョン

インストールには方法 1 を使用することをお勧めします。インストールが成功したら、次のように docker-compose version と入力して、docker-compose のバージョン情報を返します。

  1. [root@localhost ~]# docker-compose バージョン
  2. docker-compose バージョン 1.19.0、ビルド 9e633ef
  3. docker-py バージョン: 2.7.0
  4. CPython バージョン: 2.7.13
  5. OpenSSL バージョン: OpenSSL 1.0.1t 2016 年 5 月 3 日

上記の情報が表示され、docker-composeが正常にインストールされたことが示されます。

補完ツールをインストールする(オプション)

コマンド入力を容易にするために、コマンドを素早く入力できる Docker の補完ツールをインストールすることもできます。

  1. #インストール
  2. yum インストール bash 補完
  3. #docker-composeスクリプトをダウンロードする
  4. curl -L https://raw.githubusercontent.com/docker/compose/$(docker-compose version --short)/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose  

すぐに始めましょう

小さな例を使って練習するよりも良い学習方法はありません。公式サイトの簡単な例を使って、docker compose の使い方を見てみましょう。

Python を使用して Web サービスを開始し、hello() メソッドを出力し、Redis キャッシュ内の各訪問をカウントし、統計結果をページに出力するシナリオを設計します。

ステップ1: Pythonサービスを作成する

プロジェクト パスの作成:

  1. mkdir コンポーズテスト
  2. cd コンポテスト

ディレクトリにapp.pyファイルを作成する

  1. インポート時間 
  2. Redisをインポートする
  3. FlaskからFlaskをインポート
  4. アプリ = Flask(__name__)
  5. キャッシュ = redis.Redis(ホスト = 'redis' 、ポート = 6379)
  6. get_hit_count() を定義します:
  7. 再試行 = 5
  8. 真の場合:
  9. 試す:
  10. cache.incr( 'hits' )を返す
  11. redis.exceptions.ConnectionErrorを除きexcとして:
  12. 再試行 == 0 の場合:
  13. 昇給
  14. 再試行 -= 1
  15. 時間.sleep(0.5)
  16. @app.route( '/' )
  17. デフハロー():
  18. カウント= get_hit_count()
  19. 戻る  'こんにちは世界!私は {} 回見られました。\n' .format( count )
  20. __name__ == "__main__"の場合:
  21. app.run(ホスト = "0.0.0.0" 、デバッグ = True )

この例では、redis はコンテナ ネットワークのデフォルト ポート 6379 を使用します。この Python プログラムの内容は、Redis に接続して起動後に hello() メソッドを出力し、その都度訪問回数を累積して結果をページに戻すというものです。

同じディレクトリに requirements.txt ファイルを作成し、プロジェクトが依存する Python パッケージを追加します。

  1. フラスコ
  2. レディス

Flask は Python のマイクロ Web 開発フレームワークです。

ステップ2: Dockerfileを作成する

Python の依存パッケージと Python 環境を含む Docker イメージを定義する Dockerfile を作成しましょう。

このディレクトリに、Dockerfile ファイルも作成します。

  1. python:3.4-alpineより
  2.  
  3. ./コードを追加
  4.  
  5. WORKDIR /コード
  6.  
  7. pip install -r requirements.txt を実行します。
  8.  
  9. コマンド [ "python" "app.py" ]

このコードの意味は次のとおりです。

  • ベースイメージPython 3.4を使用する
  • 現在のディレクトリをイメージ/コードディレクトリにマップする
  • 作業ディレクトリを/codeに設定する
  • Pythonの依存関係をインストールする
  • app.pyプログラムを起動する

ステップ3: Composeファイルを使用してサービスを定義する

現在のディレクトリに、次の内容の docker-compose.yml ファイルを作成します。

  1. バージョン: '2'  
  2. サービス:
  3. ウェブ:
  4. 建てる: 。
  5. ポート:
  6. - 「5000:5000」  
  7. レディス:
  8. 画像: "redis:alpine"  

この Compose ファイルは、Python Web サービスと Redis サービスの 2 つのサービスを定義します。

  • Python Web サービス: 現在のイメージは Dockerfile を使用して構築されています。 Web コンテナ内のポート 5000 をホストのポート 5000 にマップします。 Web コンテナを Redis コンテナに接続します。
  • Redis サービス: このコンテナーは、公式の Redis イメージから直接作成されます。

ステップ4: Composeを使用してアプリケーションをコンパイルして起動する

コマンドdocker-compose upで開始します。

  1. バージョン: '2'  
  2. サービス:
  3. ウェブ:
  4. 建てる: 。
  5. コマンド: python app.py
  6. ポート:
  7. - 「5000:5000」  
  8. ボリューム:
  9. - .:/コード
  10. レディス:
  11. 画像: "redis:alpine"  

起動が成功したら、ブラウザで http://ipaddress:5000/ にアクセスすると、次の結果が返されます。

  1. 「こんにちは世界」 1回見られました。

リフレッシュして再度アクセスしてください

  1. 「こんにちは世界」 2回見られました。

更新を続けると、その数は増え続けます。

Docker Compose の共通コマンド

docker-compose up -dを使用してバックグラウンドでサービスを開始します。

  1. [root@localhost composetest]# docker-compose up -d
  2. composetest_web_1 を開始しています...
  3. composetest_web_1 を開始しています...完了しました

開始されたサービスを表示するには、docker-compose psコマンドを使用します。

  1. [root@localhost composetest]# docker-compose ps
  2. 名前コマンド 状態 ポート
  3. ------------------------------------------------------------------------------------------------  
  4. composetest_redis_1 docker-entrypoint.sh redis ... 6379/tcp を起動
  5. composetest_web_1 python app.py アップ 0.0.0.0:5000->5000/tcp

docker-compose stop を使用してサービスを停止します。

  1. [root@localhost composetest]# docker-compose を停止します
  2. composetest_web_1 を停止しています...完了
  3. composetest_redis_1 を停止しています...完了

その他の一般的なコマンド

  1. #ヘルプを表示
  2. ドッカーの作成 -h
  3. # -f は使用する Compose テンプレート ファイルを指定します。デフォルトは docker-compose.yml で、複数回指定できます。
  4. docker-compose -f docker-compose.yml アップ -d
  5. #すべてのコンテナを起動します。-d はすべてのコンテナをバックグラウンドで起動して実行します。
  6. docker-compose を起動 -d
  7. #コンテナとネットワーク関連をすべて無効化して削除
  8. docker-compose ダウン
  9. #サービスコンテナの出力を表示する
  10. docker-compose ログ
  11. #現在プロジェクト内にあるすべてのコンテナを一覧表示します
  12. docker-compose ps
  13. #プロジェクト内のサービス コンテナーをビルド (再構築) します。サービス コンテナーが構築されると、タグ名が付けられます。たとえば、Web プロジェクト内の db コンテナーの場合は、web_db になります。いつでもプロジェクトディレクトリでdocker-compose buildを実行してサービスを再構築できます。
  14. docker-compose ビルド
  15. #サービスが依存するイメージをプルする
  16. docker-compose プル
  17. #プロジェクト内のサービスを再起動する
  18. docker-compose の再起動
  19. #すべての(停止された)サービス コンテナーを削除します。最初に docker-compose stop コマンドを実行してコンテナを停止することをお勧めします。
  20. docker-compose rm
  21. #指定されたサービスに対してコマンドを実行します。
  22. docker-compose を実行して ubuntu に ping を実行します docker.com
  23. #指定されたサービスを実行するコンテナの数を設定します。 service=numパラメータで数値を設定する
  24. docker-compose スケール web=3 db=2
  25. #既存のサービス コンテナーを起動します。
  26. docker-compose の開始
  27. #実行中のコンテナを削除せずに停止します。これらのコンテナは、docker-compose start を介して再度起動できます。
  28. docker-compose を停止する

<<:  Feiyuxing分散型インテリジェントネットワークソリューションが発売され、メッシュ技術が企業に導入される

>>:  SaaS は終わりました。ソフトウェアの次は何でしょう?

推薦する

onetechcloud: 香港 VPS、1Gbps 帯域幅、20% 割引、最低 52 元、1G メモリ/1 コア/20GSSD/600G トラフィック

onetechcloudは、デフォルトの帯域幅が1Gbpsの香港vpsシリーズを追加し、NTT/CM...

インターネットへの道は困難に満ちている。個人のウェブサイトは突破できるのか?

2013年、インターネットは誕生して何年も経ちました。2010年にウェブサイトの構築を始めたものの、...

5 月の世界 Web サーバー市場シェア: Microsoft のみが市場シェアを 33.41% に増加

IDC Review Network (idcps.com) は 5 月 13 日に次のように報告し...

単一のマーケティングモデルを持つウェブサイト所有者は、キャリアを変えるという課題に直面しなければならない

外部リンクツールの拒否から外部リンク判定の議論まで、また外部リンク判定の議論からザクロアルゴリズムま...

DEDE Dreamweaver ウェブサイト ホームページ 模造 実操作

2018年最もホットなプロジェクト:テレマーケティングロボットがあなたの参加を待っていますDEDE ...

エッジコンピューティングがクラウドコンピューティングに取って代わる可能性は低い

エッジ コンピューティングとは、クラウド コンピューティングの処理とストレージの一部を、データを生成...

Google+がPinterestにコレクションチャレンジを開始

Google は、ユーザーが食べ物、映画、宇宙など特定のトピックに関連する写真、記事、その他のコンテ...

Spring Security 実践ヒント: 分散オブジェクト SharedObject

[[378938]] 1. はじめに前回の記事では、AuthenticationManager の初...

Weibo の賞品授与活動は宣伝のためだけの無駄遣いではないでしょうか?

Weibo マーケティングについて話すとき、ほとんどの企業は Weibo の活動を最もよく知っていま...

【更新】比較的コストパフォーマンスの高いオランダのおすすめクラウドサーバー(オランダVPS)

オランダはヨーロッパのデータセンターのハブ拠点に相当し、帯域幅が大きく、デジタル著作権に関する独自の...

Webmaster Network レポート: Baidu の PC 検索結果が今日異常。Google は中国から完全撤退するのか?

1. 中国の共同購入は完全に終焉を迎えた:関係者の運命共同購入の発展はサイクルのようなもので、大きな...

「スマートコーン」が北京でデビュー、Amapのブラックテクノロジーが公共交通の安全性を高める

道路工事は最も労働集約的で危険な職業の一つです。毎年、交通工事や道路清掃、事故処理などにより交通事故...

機密情報ステーションのプロモーションに関する雑感:効率的なプロモーションは意思決定から生まれる

私は長年、電子商取引サイトや地域ポータルサイトのオンラインプロモーション業務に携わってきました。その...

ウェブサイトのコンバージョン率を効果的に向上させる5つの要素

簡単に言えば、従来の中小企業がオンラインマーケティングを行う目的は、インターネットを通じて自社の露出...