Docker Composeでコンテナ管理の問題を解決する

Docker Composeでコンテナ管理の問題を解決する

Docker の設計では、コンテナは 1 つのアプリケーションのみを実行します。しかし、現在のアプリケーション システムのほとんどは、1 つのアプリケーションだけで構成することはできません。コンテナ間の接続とデータ交換の方法についてはすでに説明しましたが、これらの方法は、完全なアプリケーション システムのコンテナ グループを構築するためにも使用できます。ただし、多くのコマンドを実行する必要があり、多くのアプリケーションとコンテナの関係を考慮する必要があります。Docker Compose は、これらの複雑な操作を解決するように設計されています。

コンテナ管理問題の解決

最も単純な例を挙げると、アプリケーション コンテナ用に MySQL コンテナと Redis コンテナを準備する場合、起動のたびに、まず MySQL コンテナと Redis コンテナを起動し、次にアプリケーション コンテナを実行する必要があります。アプリケーション コンテナを作成するときは、アプリケーションが接続してデータを交換できるように、コンテナ ネットワークを MySQL コンテナと Redis コンテナに接続することを忘れないでください。

これだけじゃ十分ではありません。コンテナをさまざまな方法で構成した場合は、コンテナの作成と構成のコマンドを保存して、次回直接使用できるようにしたほうがよいでしょう。

このシステムを docker run や docker rm のようにシームレスに切り替えたい場合は、さらに面倒になります。コマンドのスレッドボールに閉じ込められないようにするために、いくつかのスクリプトを作成する必要があるかもしれません。

実際、コアにはコンテナの組み合わせを管理するためのものがまだ欠けています。

Docker の作成

Docker Compose: 複数のコンテナでソフトウェアを定義して実行します。 Docker Compose では、アプリケーション システムに関連するすべてのアプリケーションと対応するコンテナーが構成ファイルに従って構成され、Docker Compose が提供するコマンドに従って起動されるため、前述の複数のコンテナー間の複雑な問題を解決できます。 Docker Compose は、イメージに対する Dockerfile の役割と同様に、複数のコンテナの動作モードと構成を固定化するものとして理解できます。

Docker Composeをインストールする

#ダウンロード curl -L "https://github.com/docker/compose/releases/download/1.22.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

#権限を設定する chmod +x /usr/local/bin/docker-compose

#インストール情報を表示する docker-compose バージョン

Docker Composeの基本的な使い方

Docker Compose の中核となるのは、YAML 形式に基づいた構成ファイルです。 Dockerfile がイメージビルド定義のデフォルトのファイル名として Dockerfile という名前を使用するのと同様に、Docker Compose 構成ファイルにもデフォルトのファイル名docker-compose.ymlがあります。
シンプルな構成内容

バージョン: '3'
サービス:
	ウェブアプリ:
		ビルド: ./image/webapp
		ポート:
			- 「5000:5000」
		ボリューム:
			- ./コード:/コード
			-ログボリューム:/var/log
		リンク:
			-MySQLについて
			- レディス
	レディス:
		イメージ: redis:3.2
	マイスク:
		イメージ:mysql:5.7
		環境:
			-MYSQL_ROOT_PASSWORD=私の秘密のパスワード
ボリューム:
	ログボリューム: {}

Docker Compose 構成ファイルには、各コンテナの詳細な制御からネットワークやデータ ボリュームの定義まで、さまざまなコンテンツを含めることができます。

versionは Docker Compose のバージョン番号で、最新は 3 です。 services構成の中核であり、コンテナの詳細を定義します。各サービスは、アプリケーション クラスターの構成を表します。

開始と停止

起動する
docker-compose up設定ファイルに従って構成されたすべてのコンテナ、ネットワーク、データ ボリュームなどを作成し、起動します。 docker runコマンドと同様に、どちらもフォアグラウンドで起動されます。デーモンとして起動する場合は、 -dも追加する必要があります。

docker-compose を起動 -d

docker-compose upデフォルトで現在のコンソールが配置されているディレクトリにあるdocker-compose.ymlファイルを認識します。ディレクトリを指定する場合は-fコマンド、プロジェクト名を指定する場合は-tコマンドを使用できます。

docker-compose -f ./compose/docker-compose.yml -p myapp を起動 -d

停止
docker-compose downコマンドは、すべてのコンテナを停止して削除するとともに、ネットワークなどの構成も削除するために使用されます。これは、この Docker Compose プロジェクトのほぼすべての効果が Docker から削除されることを意味します。

コンテナコマンド

これらのコマンドは、Docker Engine で単一のコンテナを操作するために使用されるコマンドに似ています。一般的なコマンドをいくつか見てみましょう。
Docker Engine では、コンテナ内のメインプロセスの出力を表示する場合、 docker logsコマンドを使用できます。 Docker Compose で実行されているサービスは Docker Compose によって自動的に名前が付けられるため、 docker logs直接使用する場合は、最初にコンテナの名前を見つける必要があり、これは明らかに少し面倒です。このタスクを完了するには、 docker-compose logsコマンドを直接使用できます。

docker-compose ログ nginx

同様に、Docker Compose には、1 つ以上のサービスを個別に制御できる同様のコマンドがいくつかあります。
docker-compose createdocker-compose startdocker-compose stopを使用すると、操作の対象が Docker Engine のコンテナーから Docker Compose のサービスに変更されることを除いて、 docker createdocker startdocker stopと同様の効果が得られます。

これで、Docker Compose を使用したコンテナ管理に関するこの記事は終了です。Docker Compose を使用したコンテナ管理の詳細については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Docker の NFS-Ganesha イメージを使用して NFS サーバーを構築する詳細なプロセス
  • DockerでGPUを使用するプロセスの詳細な説明

<<:  CSS と JavaScript を使用して管理ダッシュボードのレイアウトを構築するためのサンプル コード

>>:  Vue の高度な使用方法チュートリアル 動的コンポーネント

推薦する

MySQLフィールド定義でnullを使用しない理由の分析

NULL が頻繁に使用されるのはなぜですか? (1)Javaのnull Java の NullPoi...

アニメーションの再生と一時停止を制御するための CSS のヒント (非常に実用的)

今日は、CSS を使用してアニメーションの再生と一時停止を制御する非常に簡単なトリックを紹介します。...

CocosCreatorを使ってシューティングゲームを作る方法

製造手順を分析します。 1. リソースを準備してシーンを構築するオンラインでリソースを探すか、私のリ...

初心者向け入門チュートリアル: ドメイン名の解決とバインディング

では、ドメイン名を登録して仮想ホストを購入した後、IE でドメイン名を入力して Web サイトを開く...

Mapper SQL ステートメント フィールドとエンティティ クラス属性名の関係は何ですか?

背景: 1. データベースに通知テーブルがある あなたは見ることができますgmt_create、通知...

一般的なイベントを処理するための JavaScript の使用に関する詳細な説明

目次1. フォームイベント2. マウスイベント3. キーボードイベント4. 共通イベントメソッド(ウ...

uniappがインターフェースドメイン名を動的に取得する方法を分析する

背景インターフェイス ドメイン名はハードコードされておらず、動的に取得されます。具体的な実装は、静的...

WeChatアプレットがスネークゲームを実装

この記事では、参考までに、スネークゲームを実装するためのWeChatアプレットの具体的なコードを紹介...

フロントエンドのパフォーマンス最適化を学ぶ準備として、HTMLページのレンダリングプロセスを理解する

現在、フロントエンドのパフォーマンス最適化について学んでいます。適切な解決策を見つけ、パフォーマンス...

Mysqlはストアドプロシージャを通じて文字列を配列に分割します

文字列を配列に分割するには、次の 3 つの MySQL 関数を使用する必要があります。 REVERS...

ホームページのデザインはウェブデザイナーのレベルを最もよく反映する

私がこれまで携わってきた多くのプロジェクトでは、基本的に避けられない悪循環がありました。それは、ホー...

表には表示したい境界コードが表示されます

テーブルの共通プロパティ基本的な属性は、width (幅)、height (高さ)、border (...

Web デザインのための 5 つのシンプルな XHTML Web フォーム

Web デザイン 5 におけるシンプルな XHTML Web フォーム。 テクニック 1: ラベル ...

JavaScriptスコープについての簡単な説明

目次1. 範囲1. グローバルな範囲2. ローカルスコープ2. 変数のスコープ1. グローバル変数2...

Docker で複数のアプリケーション サイトをプロキシするために Nginx を使用する方法

序文エージェントの役割は何ですか? - 複数のドメイン名が同じサーバーに解決される- 1つのサーバー...