1. WordPressの導入ここでは、WordPress のデプロイメントを例に、Docker Compose を紹介します。WordPress のデプロイメントには、WordPress と MySQL のイメージが必要です。 1. 環境を整える1. WordPressイメージを取得する [root@docker-node1 /]# docker pull wordpress 2. MySQLイメージを取得する [root@docker-node1 /]# docker pull mysql 3. ミラーリスト [root@docker-node1 /]# docker イメージ ls リポジトリ タグ イメージ ID 作成 サイズ wordpress 最新 0947f14b932b 25時間前 540MB mysql 最新 791b6e40940c 43 時間前 465MB (II) イメージを実行する1. MySQLイメージを実行する root@docker-node1 /]# docker run -d --name mysql -v mysql-data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -e MYSQL_DATABASE=wordpress mysql b6e7a57a5fcec79f436d3f65240adf833340b4a9640e3b4f9282870078fb8e57 上記のコマンドでは、-v はストレージボリュームを指定し、MYSQL_ROOT_PASSWORD はデータベースのパスワードを設定し、MYSQL_DATABASE は作成されたデータベースの名前を指定します。詳細については、https://hub.docker.com/_/mysql を参照してください。 起動したコンテナを表示します。 [root@docker-node1 /]# docker ps コンテナID イメージ コマンド 作成ステータス ポート名 b6e7a57a5fce mysql "docker-entrypoint.s…" 6 分前 6 分前にアップ 3306/tcp、33060/tcp mysql 2. WordPressイメージを起動する [root@docker-node1 /]# docker run --name wordpress -e WORDPRESS_DB_HOST=mysql:3306 --link mysql -p 8080:80 -d wordpress 6cf0c0fc2ef332728a3ea2bf2dbee65299441b26751d5c64f0a66b329f2679f6 上記コマンドで、WORDPRESS_DB_HOST は接続先のデータベースで、指定しているのは先ほど作成した MySQL コンテナです。MySQL コンテナのデフォルトのユーザー名とパスワードが使用されるため、WORDPRESS_DB_USER や WORDPRESS_DB_PASSWORD のパスワードなどの環境情報はここでは入力しません。詳細については、https://hub.docker.com/_/wordpress を参照してください。 次にコンテナ情報を表示します。 [root@docker-node1 /]# docker ps コンテナID イメージ コマンド 作成ステータス ポート名 6cf0c0fc2ef3 wordpress "docker-entrypoint.s…" 3 分前 3 分前にアップ 0.0.0.0:8080->80/tcp wordpress b6e7a57a5fce mysql "docker-entrypoint.s…" 20 分前 20 分前にアップ 3306/tcp、33060/tcp mysql これで両方のコンテナが起動し、ホストのポート 8080 にアクセスできるようになります。 Docker の作成上記の展開から、次の問題がわかります。
では、このような面倒なプロセスを必要としないバッチ処理に似た方法はあるのでしょうか?ここで Docker Compose の出番です。 1. Docker Compose の紹介1. Docker Compose とは何ですか? Docker Composeはツールです このツールは、ymlファイルを通じてマルチコンテナアプリケーションを定義できます。 1 つのコマンドで、yml ファイルの定義に従って複数のコンテナを作成および管理できます。 2. docker-compose.yml ファイル Docker Compose の非常に重要な部分は docker-compose.yml ファイルであり、このファイルには、サービス、ネットワーク、ボリュームという 3 つの非常に重要な概念が含まれています。 サービス サービスはコンテナです。このコンテナは、Dockerhub のイメージから取得することも、ローカルの Dockerfile から作成されたイメージから取得することもできます。サービスの開始は、docker run の開始に似ています。docker run を使用する場合、ネットワークとボリュームのパラメータを指定できます。同様に、サービスのネットワークとボリュームも指定できます。 例えば: サービス: デシベル: イメージ:postgres:9.4 ボリューム: -"db-data:/var/lib/postgresql/data" ネットワーク: -後段 上記の yml ファイルは、次のコマンドと同等のサービスを定義します。 docker run -d --network back-tier -v db-data:/var/lib/postgresql/data postgres:9.4 ネットワーク ネットワーク: バックティア: ドライバー:ブリッジ 上記の yml ファイルはネットワークを定義しており、これは次のコマンドと同等です。 docker ネットワーク作成 -d ブリッジ バックティア ボリューム ボリューム: dbデータ: 上記の yml ファイルはボリュームを定義しており、これは次のコマンドと同等です。 docker ボリューム作成 db-data (II) Docker Compose環境の準備Docker Cmpose はツールなのでインストールする必要があります。インストールの詳細については、https://docs.docker.com/compose/install/ を参照してください。 1. 実行ファイルをダウンロードする sudo curl -L "https://github.com/docker/compose/releases/download/1.25.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose 2. 権限を設定する sudo chmod +x /usr/local/bin/docker-compose 3. バージョンを確認する [root@docker-node1 ~]# docker-compose --version docker-compose バージョン 1.24.1、ビルド 4667896 4. docker-composeの共通コマンド [root@docker-node1 compose-wordpress]# docker-compose --help Docker を使用してマルチコンテナ アプリケーションを定義および実行します。 使用法: docker-compose [-f <arg>...] [オプション] [コマンド] [引数...] docker-compose -h|--ヘルプ オプション: -f, --file FILE 代替コンポーズファイルを指定する (デフォルト: docker-compose.yml) -p, --project-name NAME 別のプロジェクト名を指定します (デフォルト: ディレクトリ名) --verbose 詳細な出力を表示 --log-level LEVEL ログレベルを設定する (DEBUG、INFO、WARNING、ERROR、CRITICAL) --no-ansi ANSI制御文字を印刷しない -v, --version バージョンを印刷して終了する -H, --host HOST 接続するデーモンソケット --tls TLS を使用する。--tlsverify によって暗黙的に指定される。 --tlscacert CA_PATH この CA によってのみ署名された証明書を信頼します --tlscert CLIENT_CERT_PATH TLS証明書ファイルへのパス --tlskey TLS_KEY_PATH TLS キーファイルへのパス --tlsverify TLSを使用してリモートを検証する --skip-hostname-check デーモンのホスト名を クライアント証明書に指定された名前 --project-directory PATH 代替作業ディレクトリを指定する (デフォルト: Compose ファイルのパス) --compatibility が設定されている場合、Compose はキーの変換を試みます v3ファイル内のSwarm以外の同等ファイル コマンド: 構築 サービスを構築または再構築する バンドル Compose ファイルから Docker バンドルを生成する config Composeファイルを検証して表示する 作成 サービスを作成する コンテナ、ネットワーク、イメージ、ボリュームを停止して削除する イベント コンテナからリアルタイムイベントを受信する exec 実行中のコンテナでコマンドを実行する help コマンドのヘルプを取得する 画像 画像一覧 コンテナを強制終了する ログ コンテナからの出力を表示する 一時停止 サービスを一時停止する port ポートバインディングのパブリックポートを印刷する ps コンテナを一覧表示する pull プルサービスイメージ プッシュサービスイメージ サービスを再起動する rm 停止したコンテナを削除する 実行 1回限りのコマンドを実行する スケール サービスのコンテナ数を設定する 開始 サービスを開始する 停止 サービスを停止する 実行中のプロセスを表示する 一時停止を解除する サービスを一時停止解除する コンテナの作成と起動 version Docker-Composeのバージョン情報を表示します docker-compose を起動する コンテナを作成し、ymlファイルを実行するためにサービスを開始するために使用されます ドッカーの作成 -d バックグラウンド実行コンテナサービス docker-compose ps 実行中のコンテナを表示 docker-compose を停止する 実行中のコンテナサービスを停止する docker-compose ダウン コンテナ サービスを停止し、コンテナ、イメージ、ネットワーク、ボリュームを削除します。 docker-compose イメージ docker-compose upで作成したコンテナサービスのイメージリストを表示する docker-compose exec コンテナ(名前) bash コンテナに入り、コンテナ内で操作を実行する Docker Compose の動作1. ワードプレス docker-compose.ymlファイルを書き込む version: '3' #docker-compose.yml バージョン services: #複数のコンテナ サービスの定義 wordpress: #wordpress コンテナ名 image: wordpress #イメージ ソース ports: #ポート マッピング - 8080:80 environment: #環境変数 WORDPRESS_DB_HOST: mysql #接続するデータベースは、以下のmysqlコンテナの名前です WORDPRESS_DB_PASSWORD: root #データベースパスワード networks: #使用されるネットワークは、以下のネットワークで定義されているmy-bridgeです -私の橋 mysql: #mysql コンテナ名image: mysql #mysql イメージcommand: --default-authentication-plugin=mysql_native_password #データベース パスワード暗号化の問題を解決environment: #環境変数MYSQL_ROOT_PASSWORD: root MYSQL_DATABASE: ワードプレス volumes: #以下のボリュームで定義されているストレージボリュームを定義します - mysql-data:/var/lib/mysql ネットワーク: -私の橋 ボリューム: mysqlデータ: ネットワーク: 私のブリッジ: ドライバー: ブリッジ サービスでコンテナを起動する [root@docker-node1 compose-wordpress]# ls ドッカーの作成 [root@docker-node1 compose-wordpress]# docker-compose を起動します docker-compose upでコンテナを起動します。このコマンドは、デフォルトで現在のディレクトリにあるdocker-compose.ymlファイルを実行します。完全なコマンドをdocker-compose -f docker-compose.yml upと書くこともできます。 2. フラスコウェブ 3つのファイルを作成します: app.py docker-compose.yml Dockerfile [root@docker-node1 compose-flask]# ls app.py docker-compose.yml Dockerファイル app.pyファイルを書く FlaskからFlaskをインポート RedisからRedisをインポート インポートOS アプリ = Flask(__name__) redis = Redis(ホスト=os.environ.get('REDIS_HOST'),ポート=6379) @app.route('/') デフハロー(): 「Hello World」を返す __name__ == "__main__" の場合: app.run(ホスト=0.0.0.0、ポート=5000、デバッグ=True) Dockerfileの作成 Python:2.7から コピー ./app/ ワークディレクトリ /app/ pip install flask redisを実行します。 エクスポーズ5000 コマンド ["python","app.py"] docker-compose.ymlファイルを書き込む バージョン: "3" サービス: レディス: 画像: redis ウェブ: 建てる: コンテクスト: 。 dockerfile: Dockerファイル ポート: - 8080:5000 環境: REDIS_HOST: レディス コンテナサービスを開始する [root@docker-node1 compose-flask]# docker-compose を起動します アクセスサービス 4. 水平拡張と負荷分散1. スケール Flask アプリケーションのデプロイは、Docker Compose を通じて上記で完了しました。現在実行中のコンテナは次のとおりです。 [root@docker-node1 compose-flask]# docker-compose ps 名前 コマンド 状態 ポート --------------------------------------------------------------------------------------- compose-flask_redis_1 docker-entrypoint.sh redis ... 6379/tcp を起動 compose-flask_web_1 python app.py アップ 0.0.0.0:8080->5000/tcp docker-compose --help コマンドを実行すると、スケール パラメータがあることがわかります。 [root@docker-node1 compose-flask]# docker-compose --help スケール サービスのコンテナ数を設定する つまり、複数のアプリケーション コンテナーを有効にできます。 [root@docker-node1 compose-flask]# docker-compose up --scale web=3 -d しかし、これは明らかに間違っています。なぜでしょうか? 3 つのコンテナのポート マッピングは同じであるため、残りの 2 つのアプリケーション コンテナは必然的にポート占有エラーを報告します。この時点で、docker-compose.yml ファイルを変更して、Web アプリケーションのポート構成を削除する必要があります。 バージョン: "3" サービス: レディス: 画像: redis ウェブ: 建てる: コンテクスト: 。 dockerfile: Dockerファイル ポート: #この項目を削除 - 8080:5000 環境: REDIS_HOST: レディス それでおしまい。 [root@docker-node1 compose-flask]# docker-compose up --scale web=3 -d compose-flask_web_1 を再作成しています... compose-flask_web_1 を再作成しています...完了 compose-flask_web_2 を再作成しています...完了 compose-flask_web_3 を再作成しています...完了 コンテナを表示します: [root@docker-node1 compose-flask]# docker ps コンテナID イメージ コマンド 作成ステータス ポート名 d0ae3307eb9e compose-flask_web "python app.py" 51 秒前 46 秒前にアップ 5000/tcp compose-flask_web_1 67483b8decd3 compose-flask_web "python app.py" 52 秒前 47 秒前にアップ 5000/tcp compose-flask_web_2 741766d49902 compose-flask_web "python app.py" 52 秒前 47 秒前にアップ 5000/tcp compose-flask_web_3 be3800004658 redis "docker-entrypoint.s…" 5 時間前 6 分前 6379/tcp compose-flask_redis_1 しかし、ポートがマップされていないため、コンテナ内でしかアクセスできないのは明らかです。では、次に何をすればよいのでしょうか? 次に、HAProxy コンテナを使用してリクエストを受信し、ポートを介して別の Web サーバーに転送することで、次の問題を解決できます。
2. 水平拡張と負荷分散 ファイル構造 [root@docker-node1 compose-flask]# ls app.py docker-compose.yml Dockerファイル app.pyを書く FlaskからFlaskをインポート RedisからRedisをインポート インポートOS アプリ = Flask(__name__) redis = Redis(ホスト=os.environ.get('REDIS_HOST'),ポート=6379) @app.route('/') デフハロー(): 「Hello World」を返す __name__ == "__main__" の場合: app.run(ホスト=0.0.0.0、ポート=80、デバッグ=True) Dockerfileの作成 Python:2.7から コピー ./app/ ワークディレクトリ /app/ pip install flask redisを実行します。 エクスポーズ80 コマンド ["python","app.py"] docker-compose.ymlファイルを書き込む バージョン: "3" サービス: レディス: 画像: redis ウェブ: 建てる: コンテクスト: 。 dockerfile: Dockerファイル 環境: REDIS_HOST: レディス ポンド: イメージ: dockercloud/haproxy リンク: - ウェブ ポート: -8080:80 ボリューム: - /var/run/docker.sock:/var/run/docker.sock 走る [root@docker-node1 compose-flask]# docker-compose up -d デフォルトドライバーでネットワーク「compose-flask_default」を作成しています compose-flask_web_1 を作成しています...完了 compose-flask_redis_1 を作成しています...完了 compose-flask_lb_1 を作成しています...完了 3 つのコンテナが起動していることがわかります。 [root@docker-node1 compose-flask]# docker-compose ps 名前 コマンド 状態 ポート --------------------------------------------------------------------------------------------------- compose-flask_lb_1 /sbin/tini --dockercloud- ... 1936/tcp、443/tcp がアップしました。 0.0.0.0:8080->80/tcp compose-flask_redis_1 docker-entrypoint.sh redis ... 6379/tcp を起動 compose-flask_web_1 python app.py 5000/tcp まで 現時点では Web アプリケーションは 1 つだけであり、リクエストを処理するために複数のアプリケーションを起動できることがわかります。 [root@docker-node1 compose-flask]# docker-compose up --scale web=5 -d compose-flask_redis_1 は最新です compose-flask_web_1 を開始しています...完了しました compose-flask_web_2 を作成しています...完了 compose-flask_web_3 を作成しています...完了 compose-flask_web_4 を作成しています...完了 compose-flask_web_5 を作成しています...完了 compose-flask_lb_1 は最新です ご覧のとおり、HAProxy からのリクエストを共有するために、Web アプリケーションに対して 5 つのコンテナーが直接起動されます。 Docker Compose マルチコンテナデプロイメントの実装に関するこの記事はこれで終わりです。Docker Compose マルチコンテナデプロイメントの詳細については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
表では、左上の境界線の色を個別に定義したり、セルの右下の境界線の色を定義したりできます。これら 2 ...
1. HTMLフォントカラー設定HTML では、フォント タグを使用してフォント コンテンツの色を設...
重要なポイント: 1. CSS3 3Dアニメーションをマスターする2. ページめくり後のページ内容の...
JavaScriptでよく使われるいくつかの文字列メソッド文字列は読み取り専用データです。よく使用...
1. jdkダウンロードアドレスをダウンロードする我下載的是jdk-8u221-linux-x64....
目次0. システムに付属するカーネルツリー1. 環境設定最初のステップステップ2 2. ソースコード...
以下のように表示されます。 test コマンドはファイルが存在するかどうかを判断します。 ssh u...
序文実際には、次のような問題に遭遇する可能性があります。特定のレコードの ID がわかっていて、その...
目次1.watchは一般的なデータ(数値、文字列、ブール値)の変更を監視します。 1. 数値2. 文...
目次序文グローバルロック完全なデータベース論理バックアップFTWRL と set global re...
コアSQL文数字を含まない MySQL クエリ ステートメント: SELECT * FROM tes...
1. まず、よく使われるMySQL関数をいくつか紹介しますRAND() は 0 から 1 (0<...
目次1. ローカルストレージを構築する2. npmパッケージを作成し、プライベートリポジトリにアップ...
Docker入門Docker はオープンソースのアプリケーション コンテナ エンジンです。従来の仮...
概要前の章では、クエリのフィルター条件について学習しました。MySQL では、like % ワイルド...