このチュートリアルはUbuntuの最新のComposeバージョン3に基づいています。 1. Compose の紹介Docker Compose は、複雑なアプリケーションを定義および実行するための Docker ツールです。 Docker コンテナを使用するアプリケーションは通常、複数のコンテナで構成されます。 Docker Compose を使用すると、コンテナを起動するためにシェル スクリプトを使用する必要がなくなります。 Compose は、構成ファイルを通じて複数の Docker コンテナを管理します。構成ファイルでは、すべてのコンテナがサービスを通じて定義され、その後、docker-compose スクリプトを使用して、アプリケーション、アプリケーション内のサービス、およびすべての依存サービスのコンテナを起動、停止、再起動します。これは、開発のために複数のコンテナを組み合わせるシナリオに非常に適しています。 2. ComposeとDockerの互換性
Docker バージョンの変更: バージョン 1.13.x から、Docker は Enterprise Edition EE と Community Edition CE に分かれています。バージョン番号もタイムラインに従ってリリースされるように変更されています。たとえば、17.03 は 2017 年 3 月です。 Docker の Linux ディストリビューションのソフトウェア リポジトリが、従来の https://apt.dockerproject.org および https://yum.dockerproject.org から現在の https://download.docker.com に変更され、パッケージ名が docker-ce および docker-ee に変更されました。 3. DockerをインストールするDocker Community Edition は docker-ce と呼ばれます。 Docker パッケージの古いバージョンは、docker または docker-engine と呼ばれます。古いバージョンの docker がインストールされている場合は、まずそれをアンインストールしてから、新しいバージョンの docker をインストールする必要があります。 Docker は非常に急速に開発されており、apt リポジトリの更新が遅れることがよくあります。そのため、Docker公式サイトが推奨するインストール方法は、Dockerインストールスクリプトをダウンロードすることです。 $ sudo apt-get 削除 docker docker-engine docker.io 最新の Docker をインストールします。 $ curl -fsSL get.docker.com -o get-docker.sh $ sudo sh get-docker.sh シェルはsudoパスワードの入力を促し、最新のdockerプロセスの実行を開始します。 $ curl -sSL https://get.docker.com/ | sh Docker が成功し、最新の Docker であることを確認します。 $ sudo docker run hello-world 4. docker-composeをインストールする最新のDockerインストール方法2つ 1. githubからdocker-composeバイナリファイルをダウンロードしてインストールします。 docker-composeファイルの最新バージョンをダウンロードします sudo curl -L https://github.com/docker/compose/releases/download/1.16.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose githubへのアクセスが遅すぎる場合は、daocloudを使用してダウンロードできます sudo curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose 実行権限を追加する sudo chmod +x /usr/local/bin/docker-compose テストインストール結果 $ docker-compose --version docker-compose バージョン 1.16.1、ビルド 1719ceb 2.pipのインストールsudo pip で docker-compose をインストールします 5. Docker-compose ファイル構造と例Docker-compose ファイル構造docker-compose.yml: バージョン: "3" サービス: レディス: 画像: redis:alpine ポート: - 「6379」 ネットワーク: -フロントエンド 展開する: レプリカ: 2 アップデート構成: 並列処理: 2 遅延: 10秒 再起動ポリシー: 条件: 失敗時 デシベル: 画像: postgres:9.4 ボリューム: -db-data:/var/lib/postgresql/data ネットワーク: - バックエンド 展開する: 配置: 制約: [node.role == manager] 投票する: イメージ: dockersamples/examplevotingapp_vote:before ポート: - 5000:80 ネットワーク: -フロントエンド 依存: - レディス 展開する: レプリカ: 2 アップデート構成: 並列処理: 2 再起動ポリシー: 条件: 失敗時 結果: イメージ: dockersamples/examplevotingapp_result:before ポート: - 5001:80 ネットワーク: - バックエンド 依存: -db 展開する: レプリカ: 1 アップデート構成: 並列処理: 2 遅延: 10秒 再起動ポリシー: 条件: 失敗時 ワーカー: イメージ: dockersamples/examplevotingapp_worker ネットワーク: -フロントエンド - バックエンド 展開する: モード: 複製 レプリカ: 1 ラベル: [APP=VOTING] 再起動ポリシー: 条件: 失敗時 遅延: 10秒 最大試行回数: 3 ウィンドウ: 120秒 配置: 制約: [node.role == manager] ビジュアライザー: イメージ: dockersamples/visualizer:stable ポート: - 「8080:8080」 停止猶予期間: 1分30秒 ボリューム: - "/var/run/docker.sock:/var/run/docker.sock" 展開する: 配置: 制約: [node.role == manager] ネットワーク: フロントエンド: バックエンド: ボリューム: dbデータ: docker-compose の使用例docker-compose を使用して、docker で実行される python flask フレームワークに基づく Web アプリケーションを構築します。 注: Docker Engine と Docker Compose がインストールされていることを確認してください。 Python と Redis は両方とも Docker イメージによって提供されるため、インストールする必要はありません。 ステップ1: Pythonアプリケーションを定義する 1. プロジェクトディレクトリを作成する $ mkdir compose_test $ cd compose_test $ mkdir src # ソースコードフォルダ $ mkdir docker # docker設定フォルダ ディレクトリ構造は次のとおりです。 └── compose_test ├── ドッカー │ └── docker-compose.yml ├── Dockerファイル └── 出典 ├── app.py └── 要件.txt 2. compose_test/src/ ディレクトリに、python flask アプリケーション compose_test/src/app.py ファイルを作成します。 FlaskからFlaskをインポート RedisからRedisをインポート アプリ = Flask(__name__) redis = Redis(ホスト='redis'、ポート=6379) @app.route('/') デフハロー(): count = redis.incr('ヒット数') 'Hello World! {} 回表示されました。\n' を返します。format(count) __name__ == "__main__" の場合: app.run(ホスト="0.0.0.0", デバッグ=True) 3. Python要件ファイルcompose_test/src/requirements.txtを作成する フラスコ レディス ステップ2: コンテナ用のDockerfileを作成する 1 つのコンテナ、1 つの Dockerfile ファイル。compose_test/ ディレクトリに Dockerfile ファイルを作成します。 Python:3.7 から コピー src/ /opt/src ワークディレクトリ /opt/src pip install -r requirements.txt を実行します。 コマンド ["python", "app.py"] Dockerfile は Docker に次の情報を伝えます。 Python 3.6 イメージからコンテナ イメージを構築します。 src ディレクトリ (compose_test/src) をコンテナの /opt/src ディレクトリにコピーします。 コンテナの作業ディレクトリを /opt/src ( docker exec -it your_docker_container_id_or_name bash 経由でコンテナに入った後のデフォルト ディレクトリ) に設定します。 ステップ3: docker-composeスクリプトを定義する compose_test/docker/ ディレクトリに docker-compose.yml ファイルを作成し、その中にサービスを定義します。内容は次のとおりです。 バージョン: '3' サービス: ウェブ: 建てる: ../ ポート: - 「5000:5000」 レディス: イメージ: "redis:3.0.7" この Compose ファイルは、Web コンテナーと Redis コンテナーという 2 つのサービスを定義します。 ステップ 4: Compose を使用してアプリケーションをビルドして実行する compose_test/docker/ ディレクトリ内の docker-compose.yml ファイルを実行します。 $ docker-compose を起動します # バックグラウンドで実行したい場合: $ docker-compose up -d # デフォルトの docker-compose.yml ファイル名を使用しない場合: $ docker-compose -f server.yml アップ -d 次に、ブラウザに http://0.0.0.0:5000/ と入力して、実行中のアプリケーションを表示します。 ステップ5: 作成ファイルを編集してファイルバインドマウントを追加する 上記のコードはビルド時にコンテナに静的にコピーされます。つまり、物理ホストのソースコードは Dockerfile ファイルの COPY src /opt/src コマンドを通じてコンテナにコピーされるため、物理ホストの src ディレクトリ内のコードに対するその後の変更はコンテナに反映されません。 バージョン: '3' サービス: ウェブ: 建てる: ../ ポート: - 「5000:5000」 ボリューム: - ../src:/opt/src レディス: イメージ: "redis:3.0.7" ホスト上のプロジェクト ディレクトリ (compose_test/src) をボリューム経由でコンテナー内の /opt/src ディレクトリにマウントすると、イメージを再構築せずにコードをその場で変更できます。 ステップ6: アプリケーションを再構築して実行する 更新された Compose ファイルを使用してアプリケーションをビルドし、実行します。 $ docker-compose アップ -d 6. 共通サービス構成リファレンスを作成するCompose ファイルは、サービス、ネットワーク、ボリュームを定義する YAML ファイルです。 Compose ファイルのデフォルトのファイル名は docker-compose.yml です。 **ヒント: このファイルには、.yml または .yaml 拡張子のいずれかを使用できます。 それらはすべて機能します。 docker run と同様に、デフォルトでは、Dockerfile で指定されたオプション (例: CMD 、 EXPOSE 、 VOLUME 、 ENV ) が尊重されるため、 docker-compose.yml で再度指定する必要はありません。 Bash のような ${VARIABLE} 構文を使用して、設定値に環境変数を使用することもできます。詳細については、変数の置換を参照してください。 このセクションには、バージョン 3 のサービス定義でサポートされるすべての構成オプションが含まれています。 建てる build はビルド コンテキストを含むパスを指定できます。 バージョン: '2' サービス: ウェブアプリ: ビルド: ./dir または、コンテキスト パスと指定された Dockerfile および args 値を持つオブジェクトとして: バージョン: '2' サービス: ウェブアプリ: 建てる: コンテキスト: ./dir dockerfile: Dockerfile 代替 引数: ビルド番号: 1 webapp サービスは、./dir ディレクトリ内の Dockerfile-alternate ファイルを使用してコンテナ イメージを構築します。 ビルド: ./dir イメージ: webapp:タグ これにより、./dir から webapp という名前のイメージが構築され、 tag がタグ付けされます。 コンテクスト Dockerfile を含むディレクトリへのパス、または git リポジトリの URL。 Dockerファイル 代替 Docker ファイル。 Compose はフォールバック ファイルを使用してビルドします。 ビルド パスも指定する必要があります。 引数 イメージをビルドするためのパラメータを追加します。環境変数はビルド プロセス中にのみアクセスできます。 ARGビルド番号 ARGパスワード RUN echo "ビルド番号: $buildno" script-requiring-password.sh "$password" を実行します。 次に、args キーの下に引数を指定します。 マッピングまたはリストを渡すことができます。 建てる: コンテクスト: 。 引数: ビルド番号: 1 パスワード: secret 建てる: コンテクスト: 。 引数: -ビルド番号=1 - パスワード=秘密 ** 注意: YAML ブール値 (true、false、yes、no、on、off) は、パーサーが文字列として解釈できるように引用符で囲む必要があります。 画像 コンテナを起動するイメージを指定します。イメージリポジトリ/タグまたはイメージ ID (または ID の最初の部分) を指定できます。 画像: redis イメージ: ubuntu:14.04 画像: tutum/influxdb イメージ: example-registry.com:4000/postgresql 画像: a4bc65fd イメージが存在しない場合は、ビルドも指定すると、Compose は公式イメージ レジストリからイメージを取得しようとします。その場合、指定されたビルド オプションを使用してイメージがビルドされ、イメージで指定された名前とタグが付けられます。 コンテナ名 生成されたデフォルト名の代わりにカスタム コンテナー名を指定します。 コンテナ名: my-web-container Docker コンテナ名は一意である必要があるため、カスタム名を指定すると、サービスを複数のコンテナに拡張することはできません。 ボリューム ボリュームマウントパスの設定。ホスト パス (HOST:CONTAINER) を設定したり、アクセス モード (HOST:CONTAINER:ro) を追加したりできます。データ ボリュームをマウントするためのデフォルトの権限は読み取り/書き込み (rw) ですが、ro によって読み取り専用として指定できます。 ボリューム: # パスを指定してエンジンにボリュームを作成させるだけです - /var/lib/mysql # 絶対パスマッピングを指定 - /opt/data:/var/lib/mysql # 現在の作成ファイルへの相対パス - ./cache:/tmp/cache #ユーザーのホームディレクトリの相対パス - ~/configs:/etc/configs/:ro # 名前付きボリューム - datavolume:/var/lib/mysql ただし、マウントされたボリュームを複数のサービス間で再利用する場合は、最上位のボリューム キーワードでマウントされたボリュームに名前を付けますが、これは必須ではありません。次の例にもマウントされたボリュームを再利用する機能がありますが、推奨されません。 バージョン: "3" サービス: ウェブ1: ビルド: ./web/ ボリューム: - ../code:/opt/web/code ウェブ2: ビルド: ./web/ ボリューム: - ../code:/opt/web/code ** 注意: 最上位レベルのボリュームを介してマウント ボリュームを定義し、各サービスのボリューム リストからそれを参照すると、Compose ファイル形式の以前のバージョンの volumes_from が置き換えられます。 バージョン: "3" サービス: デシベル: 画像: db ボリューム: - データボリューム:/var/lib/db バックアップ: 画像: バックアップサービス ボリューム: - データボリューム:/var/lib/backup/data ボリューム: データ量: 指示 コンテナの起動時に実行されるデフォルトのコマンドをオーバーライドします。 コマンド: bundle exec thin -p 3000 コマンドは Dockerfile に似たリストにすることもできます。 コマンド: ["bundle", "exec", "thin", "-p", "3000"] リンク 別のサービス内のコンテナにリンクします。 サービス名とリンク エイリアス (SERVICE:ALIAS) の両方を指定するか、サービス名のみを指定してください。 ウェブ: リンク: -db -db:データベース - レディス 現在の Web サービス コンテナーでは、リンクされた db サービス エイリアス データベースを介して、db コンテナー内のデータベース アプリケーションにアクセスできます。エイリアスが指定されていない場合は、サービス名を直接使用してアクセスできます。 リンクでは、通信するためにサービスを有効にする必要はありません。デフォルトでは、どのサービスもそのサービスの名前で他のサービスにアクセスできます。 (実際には、コンテナ間の通信は/etc/hostsのドメイン名解決を設定することで実現されます。そのため、1つのネットワークで複数のサービスコンテナをルーティングして接続できれば、アプリケーションでlocalhostを使用するのと同じように、サービスエイリアスを使用して他のコンテナのサービスにリンクできます) リンクは、depends_on と同様の役割を果たすこともできます。つまり、サービス間の依存関係を定義し、サービスが開始される順序を決定します。 外部リンク docker-compose.yml の外部のコンテナ(Compose によって管理されていないコンテナも含む)にリンクします。パラメータの形式はリンクに似ています。 外部リンク: - レディス1 - プロジェクトdb_1:mysql - プロジェクトdb_1:postgresql さらす ポートは公開されていますが、ホスト マシンにマップされておらず、接続されたサービスにのみアクセスできます。 さらす: - 「3000」 - 「8000」 ポート ポート情報を公開します。 ** 注意: HOST:CONTAINER 形式を使用してポートをマッピングする場合、使用するコンテナ ポートが 60 未満の場合、YAML は xx:yy の数値形式を 60 進数として解析するため、誤った結果が返される可能性があります。したがって、文字列形式を使用することをお勧めします。 シンプルな短縮形: ポート: - 「3000」 - 「3000-3005」 - 「8000:8000」 - 「9090-9091:8080-8081」 - 「49100:22」 - 「127.0.0.1:8001:8001」 - 「127.0.0.1:5000-5010:5000-5010」 - 「6060:6060/udp」 v3.2 のポートの長い形式の構文では、短い形式では表現できない追加のフィールドを構成できます。 ポート: - 目標: 80 公開: 8080 プロトコル: tcp モード: ホスト ターゲット: コンテナ内のポート 再起動 「いいえ」はデフォルトの再起動ポリシーであり、いかなる状況でもコンテナは再起動されません。 always が指定されている場合、コンテナは常に再起動されます。 on-failure は、終了コードが失敗エラーを示している場合にコンテナを再起動します。 再起動: 「いいえ」 再起動: 常に 再起動: 失敗時 再起動: 停止しない限り 環境 環境変数を追加します。 配列または辞書のいずれかを使用できます。 ブール値(true、false、yes、no)は、YML パーサーによって True または False に変換されないように引用符で囲む必要があります。 環境: RACK_ENV: 開発 表示: 'true' セッションシークレット: 環境: - RACK_ENV=開発 - 表示=true -セッションシークレット ** 注意: サービスでビルド オプションが指定されている場合、ビルド プロセス中に環境を通じて定義された環境変数は機能しません。 ビルド引数サブオプションは、ビルド時の環境変数を定義するために使用されます。 ピッド pid: 「ホスト」 ドメイン名 ドメイン名: 8.8.8.8 ドメイン名: - 8.8.8.8 - 9.9.9.9 docker-compose チュートリアルのインストールとクイックスタートに関するこの記事はこれで終わりです。docker-compose のインストールと使用方法の詳細については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: three.js を使用してクールなアシッドスタイルの 3D ページ効果を実現します
>>: CSS3 で背景の透明化と不透明テキストを実装するサンプルコード
例えば: <link rel="スタイルシート" href="h...
データベースをインストールした後、誤ってインストール ウィンドウを閉じたり、長期間 root ユーザ...
1. テーブルとパーティションを分割する必要があるのはなぜですか?日常の開発では、大きなテーブルに遭...
1. グローバルオブジェクトすべてのモジュールは呼び出すことができます1) global: ブラウザ...
1. 角を丸くする今日の Web デザインは、常に最新の開発テクノロジーに追随しており、HTML5 ...
目次1. 本来の定義2. JS操作、幅の変更を例に3. 効果: 幅が変更されました 1. 本来の定義...
序文最近、弊社のサーバーがハッカーの攻撃を受け、一部のファイルの属性が変更されたため、ウイルスファイ...
私がこれまで携わってきた多くのプロジェクトでは、基本的に避けられない悪循環がありました。それは、ホー...
レンダリング コード - 青と黄色のリングを例に挙げます <div class="コ...
序文会社の業務上のニーズにより、独自の MongoDB サービスを構築する予定です。MongoDB ...
皆さんはこのような状況に遭遇したことがあるでしょうか。プロジェクトや研究開発を行う際に、緊急にファイ...
目次序文XA プロトコルMySQL XA で分散トランザクションを実装する方法序文MySQL が単一...
Web プロジェクトがどんどん大きくなると、CSS は天文学的な大きさと複雑さを増します。この問題を...
以前、グループの友人が質問しました。つまり、ミニプログラムでユーザーがオンラインになったときに、ライ...
1. HTML部分 <Col span="2">ファイルをアップロー...