Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

第12章 Linux コンテナー

12.1. Docker Technology を使用した Linux コンテナー

Red Hat Enterprise Linux Atomic Host 7.1.4 には、以下の更新が含まれています。

docker パッケージがアップストリームバージョン 1.7.1 にアップグレードされ、バージョン 1.7 に対するさまざまな改善が含まれ、Red Hat Enterprise Linux Atomic Host 7.1.3 に含まれるバージョン 1.6 の大幅な変更が含まれています。バージョン 1.6 から 1.7.1 までの修正および機能の完全リストは、以下の変更ログを参照し https://github.com/docker/docker/blob/master/CHANGELOG.md てください。また、Red Hat Enterprise Linux Atomic Host 7.1.4 には、以下の変更が含まれています。
    • firewalld が docker コンテナーでサポートされるようになりました。firewalld がシステムで実行している場合は、firewalld パススルーを介してルールが追加されます。firewalld が再読み込みされると、設定が再適用されます。
    • Docker は、コンテナー固有の cgroup 情報を /sys/fs/cgroup ディレクトリー下にマウントするようになりました。アプリケーションによっては、利用可能なリソースの量に基づいて決定を行うものもあります。たとえば、Java 仮想マシン(JVM)は、利用可能なメモリー量を確認して、十分なプールを割り当ててパフォーマンスを向上させることができます。これにより、アプリケーションは /sys/fs/cgroup/memory を読み取ることで、コンテナーで利用可能なメモリーの最大数を検出できます。
    • ループバックデバイスでデバイスマッパーを使用している場合は、docker run コマンドが警告メッセージを出力するようになりました。dm.thinpooldev オプションを実稼働環境のストレージオプションとして使用することを強く推奨します。実稼働環境では ループバック を使用しないでください。
    • --init=systemd フラグを使用して、systemd モードでコンテナーを実行できるようになりました。systemd でコンテナーを PID 1 として実行している場合、このフラグはすべての systemd 機能をオンにして、非特権コンテナーで実行できるようにします。container_uuid を環境変数として設定し、/etc/machine-id ファイルに保存します。このファイルは、コンテナー内の journald を外部ログにリンクします。ホストディレクトリーをコンテナーにマウントし、systemd が特権を必要としないようにし、ホストからコンテナーにジャーナルディレクトリーをマウントします。コンテナー内で journald を実行すると、ホストの journalctl ユーティリティーにコンテンツを表示できます。/run ディレクトリーを tmpfs としてマウントします。次に、--systemd が指定されている場合、/sys/fs/cgroup ディレクトリーをコンテナーに読み取り専用として自動的にマウントします。systemd モードで実行する際に、systemd に適切なシグナルを送信します。
    • docker search コマンドを使用したコンテナーでの検索エクスペリエンスが改善されました。
      • インデックスを追加して検索結果を追加できるようになりました。
      • リモート名にレジストリー名を付けることができます。
      • インデックス名が IP アドレスでない場合は短縮できます。
      • インデックス名の一覧を表示しないように --no-index オプションが追加されました。
      • インデックスの保存時のエントリーのソート: index_namestart_countregistry_namename、および description でソートできます。
      • インデックスが省略された場合のエントリーソート: registry_namestar_countname、および description でソートできます。
    • Docker info API を使用して設定済みのレジストリー一覧を公開できるようになりました。

Red Hat Enterprise Linux Atomic Host 7.1.3 には、以下の更新が含まれています。

  • docker-storage-setup
    • docker-storage-setup は論理ボリュームマネージャー(LVM)に依存してシンプールを自動的に拡張するようになりました。デフォルトでは、ボリュームグループ内の 60% の空き領域がシンプールに使用され、LVM により自動的に拡張されます。シンプールが 60% 満杯になると、20% 増えます。
    • docker-storage-setup のデフォルト設定ファイルは /usr/lib/docker-storage-setup/docker-storage-setup にあります。このファイルの設定は、/etc/sysconfig/docker-storage-setup ファイルを編集して上書きできます。
    • シンプールを作成するために raw ブロックデバイスを docker サービスに渡すサポートが削除されました。docker-storage-setup サービスは LVM シンプールを作成し、docker に渡すようになりました。
    • シンプールのチャンクサイズが 64K から 512K に増加しました。
    • デフォルトでは、root ユーザーのパーティションテーブルは拡張されません。この動作は、/etc/sysconfig/docker-storage-setup ファイルに GROWPART=true オプションを設定することで変更できます。
    • シンプールは skip_block_zeroing 機能で設定されるようになりました。つまり、新しいブロックがプールにプロビジョニングされると、ゼロになりません。これは、パフォーマンス上の理由から行われます。この動作を変更するには、--zero オプションを使用します。
      lvchange --zero y thin-pool
    • デフォルトでは、devicemapper グラフドライバーを使用する docker ストレージはループバックデバイスで実行されます。このセットアップは実稼働環境の準備ができていないため、使用しないことを強く推奨します。これについてユーザーに警告する警告メッセージが表示されます。ユーザーは、このストレージフラグ dm.no_warn_on_loop_devices=true を渡すことで、この警告を抑制するオプションがあります。
  • Docker 形式のコンテナーでのストレージの処理に関連する更新:
    • SELinux で検証された NFS ボリュームプラグインが追加されました。これには、NFS ボリュームプラグインを使用した NFS マウント GlusterFS が含まれます。
    • NFS ボリュームプラグイン用に検証される永続ボリュームサポートのみが追加されました。
    • SELinux で検証されたローカルストレージ(HostPath ボリュームプラグイン)が追加されました(ドキュメントで説明されている回避策が必要です)。
    • SELinux で検証された iSCSI ボリュームプラグインが追加されました。
    • SELinux で検証された gcePersistentDisk Volume Plugins が追加されました(ドキュメントで説明されている回避策が必要です)。

Red Hat Enterprise Linux Atomic Host 7.1.2 には、以下の更新が含まれています。

  • docker-1.6.0-11.el7
    • 完全に再設計されたレジストリーと、Docker 1.6 がサポートする新しいレジストリー API。これにより、イメージのプルのパフォーマンスおよび信頼性が大幅に向上します。
    • コンテナーログを他のシステムに送信できる新しいロギングドライバー API が docker ユーティリティーに追加されました。--log driver オプションが docker run コマンドに追加され、JSON ファイル、syslog、または none の 3 つのサブオプションが使用されます。none オプションは、必須ではない詳細なログを持つアプリケーションで使用できます。
    • Dockerfile 命令は、コミットおよびインポート時に使用できるようになりました。また、これにより、イメージ全体を再構築せずに、実行中のイメージに変更を加える機能が追加されます。commit --change および import --change オプションを使用すると、新しいイメージに適用する標準の変更を指定できます。これらは Dockerfile 構文で表現され、イメージの変更に使用されます。
    • 今回のリリースで、カスタム cgroups のサポートが追加されました。--cgroup-parent フラグを使用して、特定の cgroup を渡してコンテナーを実行できます。これにより、独自に cgroups を作成および管理できます。これらの cgroups のカスタムリソースを定義し、コンテナーを共通の親グループ下に配置できます。
    • 今回の更新により、Docker デーモンの設定時に、すべてのコンテナーのデフォルトの ulimit 設定を指定できるようになりました。以下に例を示します。
      docker -d --default-ulimit nproc=1024:2048
      このコマンドは、すべてのコンテナーに対してソフト制限 1024 とハード制限の 2048 子プロセスを設定します。異なる ulimit 値には、このオプションを複数回設定できます。以下に例を示します。
      --default-ulimit nproc=1024:2408 --default-ulimit nofile=100:200
      これらの設定は、以下のようなコンテナーの作成時に上書きできます。
      docker run -d --ulimit nproc=2048:4096 httpd
      これにより、デーモンに渡されるデフォルトの nproc 値が上書きされます。
    • --block-registry フラグを指定してレジストリーをブロックする機能。
    • 複数のレジストリーを一度に検索するためのサポート。
    • ローカルイメージをパブリックレジストリーにプッシュするには、確認する必要があります。
    • 短縮名は、docker.io レジストリーが最後に設定されたレジストリーの一覧に対してローカルで解決されます。これにより、プルは常に完全修飾名で行われます。

Red Hat Enterprise Linux Atomic Host 7.1.1 には、以下の更新が含まれています。

  • docker-1.5.0-28.el7
    • IPv6 サポート:グローバルにルーティングおよびローカルリンクアドレスのサポートを利用できます。
    • 読み取り専用コンテナー:このオプションは、コンテナー内のアプリケーションがファイルシステム全体に書き込みできないように制限するために使用されます。
    • 統計 API およびエンドポイント:ライブ CPU、メモリー、ネットワーク IO の統計をコンテナーからストリーミングできるようになりました。
    • docker build -f docker_file: docker build で使用される Dockerfile 以外のファイルを指定するコマンドです。
    • 修飾されていないプルおよび検索に使用する追加のレジストリーを指定する機能。これの前に、非修飾名はパブリック Docker Hub でのみ検索されていました。
    • --block-registry= <registry> フラグを使用した特定レジストリーと通信をブロック する機能。これには、パブリック Docker Hub をブロックする機能と、すべてのレジストリーをブロックする機能が含まれます。
    • パブリックレジストリーにプッシュするには確認が必要です。
    • 一覧表示されると、すべてのリポジトリーが完全修飾されるようになりました。docker images の出力には、プルされたすべてのイメージのソースレジストリー名が一覧表示されます。docker search の出力には、すべての結果のソースレジストリー名が表示されます。