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 は終わりました。ソフトウェアの次は何でしょう?

推薦する

遂寧の人々が探求した6つのビジネス戦略と9つの信条

1. 勇敢に前進する――市場で足場を築く方法市場は企業が足がかりを築き、奮闘する戦場です。中小企業が...

Bigrock は .pw ドメイン名を年間 5.49 ドルで提供しています

BigRock は、優れた資格を持つ ICANN 認定のドメイン名登録機関です。Directi (h...

Commvault が、完全かつスケーラブルなバックアップとリカバリ、最新のデータ管理を実現する 4 つの新しいポートフォリオを発表

[[237051]]エンタープライズ データのバックアップ、リカバリ、アーカイブ、クラウド サービス...

ウェブマスター実践:QQスペースダイアリーの新バージョンのプロモーション

実践:QQ日記プロモーションオンラインマーケティングの発展に伴い、オンラインプロモーションの方法はま...

申請手続き中、国内IPは「不可解」、海外IPは正常にアクセス可能

2000年から、このブログは米国のVPSで運営されています。当時、東京は暑くなかったので、環境はより...

企業向けのクラウドネイティブ属性の構築に役立つ 13 のツール

[[353361]] [51CTO.com クイック翻訳] 過去 10 年間で、クラウド コンピュー...

ufovps: すべての VPS (香港/日本/米国) が 15% オフ、最大 1500 元追加、長期割引も追加可能

現在から4月30日まで、ufovpsはサイト全体の特別プロモーションを開催しています。すべてのVPS...

キックオフ通知、WeChat赤い封筒1288元、50 1GメモリVPS、20香港VPS、20本物のRuisuなど。

ここにいる皆さんは、この活動が 2 年前に始まり、それがキックオフ活動であることをご存知でしょう。私...

努力は欠点を補う。新しい企業ウェブサイトに外部リンクを構築するためのヒント

外部リンクの構築に関しては、A5には外部リンクを構築するための何百もの方法があります。ただし、すべて...

SEO テクノロジーを使用してホットなニュースワードをランク​​付けし、トラフィックを誘導します (毎日 20,000 以上の IP 増加)

月収10万元の起業の夢を実現するミニプログラム起業支援プラン例えば、上記は、編集者 Jiuwen.c...

分散システムに関する20,000語の詳細な入門書

WeTest の紹介 QQ、WeChat、Taobao など、特定のインターネット アプリケーション...

JDアリアンツ保険はデジタル変革をリードし、30分で保険金請求を解決して利益を得ています

2020年2月、JDアリアンツ保険は、保険契約者である孫さん(仮名)から報告を受け、彼女が残念ながら...

規制介入により、「ネットセレブライブストリーミング」業界は苦境に陥るのだろうか?

今日、多くの人が「Fengqun Media 交通詐欺」事件について議論しているのを見ました。広告主...

従来のマーケティング会社はどのようにしてオンラインプロモーションを効果的に行うのでしょうか?

オンライン マーケティング モデルの人気が高まり、オンライン プロモーションには従来のマーケティング...

Xovv:日本電信データセンターに新登場、日本独立サーバー特別価格450元、e3-1225/16gメモリ/1Tハードディスク/20M帯域幅/3IP

xovv は最近、日本の通信データセンターを追加し、そのために品川区東品川 2-1-7 データセンタ...