Google、コンテナ作成の7つのベストプラクティスを公開1コンテナ1アプリケーション、キャッシュ活用、イメージ最小化など

Googleは、コンテナを効果的に作成するための7つのベストプラクティスを公式ブログで公開した。

» 2018年07月13日 11時30分 公開
[@IT]

 Googleは2018年7月10日(米国時間)、コンテナを効果的に作成するための7つのベストプラクティスを「Google Cloud Platform」の公式ブログで紹介した。概要は以下の通り。

(1)コンテナごとに1つのアプリケーションをパッケージングする

 コンテナは、内部で1つのアプリケーションが実行されるときに最も効果的に機能する。このアプリケーションは、親プロセスが1つでなければならない。例えば、同じコンテナでPHPとMySQLを実行してはならない。コンテナごとに1つのアプリケーションをパッケージングすれば、アプリケーションのライフサイクルに合わせてコンテナのライフサイクルを管理できる。

左のコンテナはベストプラクティスに従っている。右は従っていない

(2)PID 1とシグナル処理、ゾンビプロセスを適切に扱う

 KubernetesとDockerは、コンテナ内のアプリケーションを停止するために、Linuxシグナルを送信する。このシグナルは、プロセス識別子(PID)が「1」のプロセスに送信される。アプリケーションを必要なときに適切に停止させるには、このシグナルを適切に扱わなければならない。

(3)Dockerのビルド時のキャッシュ利用を最適化する

 Dockerはイメージのレイヤーをキャッシュし、後で行われるビルドを高速化する。これは非常に便利な機能だが、Dockerfileの作成時に注意が必要になる。例えば、アプリケーションのソースコードは、Dockerfileにできるだけ後で追加しなければならない。そうすれば、ベースイメージとアプリケーションの依存関係がキャッシュされ、ビルドのたびに再構築されることがなくなる。

 以下のDockerfileの例では、上側のサンプルのうち、2行目と3行目を入れ替えて、下側のように変更すべきだ。

FROM python:3.5
COPY my_code/ /src
RUN pip install my_requirements
FROM python:3.5
RUN pip install my_requirements
COPY my_code/ /src

 新しいバージョンでは、pipコマンドの実行結果がキャッシュされるので、ソースコードが変更されるたびに、pipコマンドが再実行されることはない。

(4)不要なツールを削除する

 ホストシステムのアタックサーフェス(攻撃対象領域)を狭くすることは良いアイデアだ。コンテナを使えば、従来のシステムよりはるかに簡単に実現できる。アプリケーションが必要としないものは、全てコンテナから削除するとよい。ディストリビューションなしで、またはスクラッチイメージで、アプリケーションだけをコンテナに含めることができればなおよい。さらに、可能であれば、コンテナのファイルシステムは読み取り専用にする。

(5)イメージのサイズをできるだけ小さくする

 イメージのサイズは、できるだけ小さくすることが望ましい。ダウンロード時間とコールドスタート時間、ディスク使用量が減るからだ。イメージサイズを小さくするコツは、ベースイメージの最小化とイメージ間の共通レイヤーの利用、Dockerのマルチステージビルド機能の利用だ。

Dockerのマルチステージビルド機能

(6)イメージへ適切にタグを付ける

 タグは、ユーザーがイメージのどのバージョンをどのように選んだかを示す。タグを付ける主な方法は、セマンティックバージョニングと、アプリケーションのGitコミットハッシュを使うことだ。どちらの方法でも、イメージを使うユーザーの期待を明確に表すように設定する。

 注意点は、ユーザーは一部のタグ(「latest(最新)」のような)を除いて、タグを不変と考えることだ。このため、例えばイメージの特定のバージョンにタグを付けたら、そのタグを絶対に移動しないようにする。

(7)公開イメージを使うかどうかを慎重に検討する

 作業の出発点として公開イメージを使うと便利だ。だが本番環境で使うと、特に制約が多い環境では、さまざまな問題に直面することがある。例えば、内部を管理する必要があるかもしれないし、外部リポジトリに依存したくないかもしれないといったことだ。

 他方、全てのソフトウェアについて独自のイメージを作成するのは、容易なことではない。上流ソフトウェアのセキュリティ更新に対応する必要があることが大きな理由だ。ユースケースに応じて、公開イメージを使うかどうかを慎重に考えなければならない。

Copyright © ITmedia, Inc. All Rights Reserved.

スポンサーからのお知らせPR

注目のテーマ

Microsoft & Windows最前線2025
AI for エンジニアリング
ローコード/ノーコード セントラル by @IT - ITエンジニアがビジネスの中心で活躍する組織へ
Cloud Native Central by @IT - スケーラブルな能力を組織に
システム開発ノウハウ 【発注ナビ】PR
あなたにおすすめの記事PR

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。