ドッカー0.6.5: コンテナーに名前を付ける、コンテナーをリンクする、ポートを選択的に発行するなど

本日、 Docker 0.6.5 を発表できることをうれしく思います。バージョン番号にだまされてはいけません:これは重要なリリースです! 0.7の準備と考えてください。

多数のバグ修正に加えて、このリリースでは 、コンテナーの名前付け、コンテナー間のリンク、ホスト統合の改善、高度なポートリダイレクトが導入されています。

ポール・ナスラット、ティアノン・グラヴィ、エドモンド・ワグナー、トラヴィス・クライン、グルジート・シン、ジャスティン・フォース、ヨハン・ユーフロシン、オーレ・ライフシュナイダー、ウィル・ルースネル、アレックス・ラーソン、グレッグ・ソーントン、スヴェン・ドウィディット、スコット・ベスラー、トッド・ランター、ウラジミール・ルツキー、ニコラス・デュドバウト、ニコラス・デュドバウト、ロジャー・ペッペ、ジェローム・ペタッツォーニの貢献に感謝します。 マイナーリリースとしては悪くない! (誰かを忘れたらごめんなさい)。

 

アップグレードする前にお読みください

アップグレード前の 2 つの警告:

まず、新しいUbuntu 13.10を実行している場合、lxcスクリプトのバージョンは不安定であり、Dockerではサポートされていません。アップグレードを行う前に、必ず lxc 0.8 または 0.7 をインストールしてください。

次に、ポートリダイレクトを改善するために、 2つの 小さな 破壊的変更を導入する必要がありました。混乱を最小限に抑えるために最善を尽くしましたが、新機能に価値があることに同意いただければ幸いです。 詳細については、以下の 高度なポートリダイレクトをご覧ください

 

コンテナーの命名

ついに問題#1を閉じることができることをお知らせします!コンテナに覚えやすい名前を付け -name ることができるようになりました の新しいフラグ docker runfor . 名前が指定されていない場合、Docker は自動的に名前を生成します。 あるコンテナを別のコンテナにリンクする場合は、を介して -link child_name:aliasリンクする子の名前とエイリアスを指定する必要があります。

十分な話、いくつかの例を見てみましょう! 次のように、対応する名前の 2 つのデータベースを実行できます。

  • docker run -d -name mariadb user/mariadb
  • docker run -d -name mysql user/mysql

container_idで機能したすべてのコマンドを、指定した名前で使用できるようになりました。

  • ドッカー再起動マリアデブ
  • Docker kill MySQL

 

リンク: ドッカーのサービス検出

リンクを使用すると、コンテナーは相互に検出して安全に通信できます。 0.6.5では、デーモンフラグ -icc=falseを使用してコンテナ間通信を無効にすることができます。 このフラグを false に設定すると、リンクを介して明示的に許可されていない限り、コンテナー A は コンテナー B にアクセスできません。 これは、コンテナを保護するための大きなメリットです。 2 つのコンテナーがリンクされている場合、Docker はコンテナー間に親子関係を作成します。 親コンテナーは、名前、公開ポート、ip、環境変数などの子の環境変数を介して情報にアクセスできます。

2 つのコンテナーをリンクする場合、Docker はコンテナーの公開ポートを使用して、親がアクセスするための安全なトンネルを作成します。 データベース コンテナーがポート 8080 のみを公開する場合、リンクされたコンテナーはポート 8080 にのみアクセスを許可され、コンテナー間通信が false に設定されている場合はアクセスが許可されません。

WordPressコンテナを実行するときは、MySQLやMariaDBなどのデータベースに接続できる必要があります。 リンクを使用すると、バックエンドデータベースを簡単に交換でき、WordPressサイトの構成ファイルを変更する必要はありません。

両方のデータベースで動作するワードプレスコンテナを構築するには、コンテナはデータベースにリンクするときにエイリアス(この例では「db」)を探す必要があります。 これにより、コンテナの名前に関係なく、一貫した環境変数を介してデータベース情報にアクセスできます。 命名例の2つのデータベースコンテナを使用して、それらの間にワードプレスコンテナへのリンクを作成します。

リンクするには、 -link フラグを次の場所 docker runに追加するだけです。

docker run -d -link mariadb:db user/wordpress 又は

docker run -d -link mysql:db user/wordpress

エイリアスdbを使用してデータベースコンテナにリンクされた新しいコンテナを作成した後、ワードプレスコンテナの環境を検査し、データベースのIPとポートを表示できます。

 

$DB_PORT_3306_TCP_PORT

$DB_PORT_3306_TCP_ADDR

 

環境変数の先頭には、フラグに -link 指定したエイリアスが付けられます。

別の例として、Docker ドキュメントの「 Web アプリケーションの例の子としてリンクする redis コンテナーを構築する 」を読むことをお勧めします。

ホスト統合

ホスト統合により、Dockerはinit、新興企業、systemdなどのプロセススーパーバイザーとより適切に統合できます。 docker start -a は、コンテナのプロセスに自動的にアタッチし、すべてのシグナルをコンテナに転送するようになったため、プロセススーパーバイザーはコンテナがクラッシュしたときに検出して正しく再起動できます。

詳細と使用例については 、ドキュメント を参照してください。

高度なポートリダイレクト

注:この機能は、セキュリティを向上させるために2つの小さな破壊的変更を導入しています。 詳細については、このセクションの最後を参照してください。

Docker 0.6.5 では、フラグが拡張され、 run -p ポートのリダイレクトをより細かく制御できるようになりました。 すべてのホスト インターフェイスで自動的にリダイレクトする代わりに、リダイレクト 先のインターフェイスを指定できます 。 これにより、既存の構文が壊れることなく拡張されることに注意してください。

例えば:

  • -p 8080 コンテナのポート 8080 を、動的に割り当てられたポートを持つホストのすべてのインターフェイスに公開します
  • -p 8080:8080 コンテナのポート 8080 を、静的ポート 8080 を持つホストのすべてのインターフェイスに公開します
  • -p 127.0.0.1:80:80 #コンテナのポート80をホストのローカルホストに公開し、静的ポートを80にします

また、どのホスト インターフェイスでも リダイレクトしないように 選択して、そのポートを外部から到達不能にすることもできます。 これは、 たとえば 、保護されていないデータベースポートをパブリックインターネットに公開せずにアプリケーションコンテナに公開する場合など、リンク(以下の「リンク」を参照)と組み合わせて非常に役立ちます。 新しい -expose フラグのおかげで、Dockerfileなしでこれを行うことができます。

このリリースでは、セキュリティを強化するために 2 つの破壊的変更 が導入されています。

まず、 ホスト上のポートをリダイレクトしないように デフォルトの動作 docker run を変更します。これはセキュリティのために優れています:ポートはデフォルトでプライベートであり、フラグを使用して -p 明示的に公開できます。 現在、デフォルトですべてのホストインターフェイスで公開されている公開ポートに依存している場合、0.6.5ではそうではなくなります。 適切な -p フラグを追加するだけで、以前の動作に戻すことができます。

次に、<public> EXPOSE ビルド命令 <private>の高度な "< パブリック>: " 構文 を非推奨にします。この特殊な構文により、Dockerfile は、公開されたポートをすべてのホスト インターフェイスの特定のポートで公開する必要があることを事前に指定できました。 これにより、システム管理者がホストでリダイレクトを構成する機能を事前に制限することにより、devとopsの間の懸念の分離が損なわれることがわかりました。 通常の "EXPOSE <private>" 構文は影響を受けません。

例えば:

  • 非推奨 EXPOSE 80 : 通常どおり TCP ポート 80 を公開し続けます。
  • 非推奨: EXPOSE 80:80 警告をトリガーし、 と EXPOSE 80同一として扱われます。 パブリックポートは単に無視されます。

これらの重大な変更についてお詫び申し上げます。 私たちは不便を最小限に抑えるために最善を尽くしました、そしてあなたが改善がそれだけの価値があることに同意することを願っています!

 

ハッピーハッキング!


ドッカーチーム