Dockerは、そのパフォーマンス、フォールトトレランス、そして最も重要なこととしてシンプルさのために、最近非常に人気があります。
今日、
hub.docker.comで何千もの画像を見つけることができます。 画像の作成が簡単なため、わずか30分で貢献を開始できます。
しかし、多くの人は
ベストプラクティスを忘れており、このため、ドッカーハブには膨大な数の最高ではない画像があふれています。
この記事では、ベストプラクティスを例として使用して画像を作成することがどれほど簡単で便利かを説明します。
例として、
oracle 11g xe GitHub docker-hubを使用し て重要なイメージを選択しました。
元のプロジェクトでは、ベストプラクティスを使用して、主要なポイントでソートされた弱点と省略を特定できます。
.dockerignoreを使用する
非常に便利な機能ですが、残念ながら多くの人はそれを知らず、使用しません。
この例では、.dockerfileに例外を追加することにより、イメージのビルド速度が低下し、最も重要なことには、イメージサイズが2Gb未満になりましたもちろん、重いバイナリファイルをgitに保存することはベストプラクティスではありませんが、現時点では、「動作する-触らない」と言うのがいかにファッショナブルであるか、または英国で「歴史的に発展した」と言うのはいかがでしょうか。
その結果、 3本の単純な線が画像を大幅に促進しました。 また、.dockerignoreに貢献する.gitを強くお勧めします。 このフォルダには、リポジトリ全体、この場合は大きなバイナリファイルの同じコピーが含まれます。oracle-xe_11.2.0-1.0_amd64.debaa oracle-xe_11.2.0-1.0_amd64.debab oracle-xe_11.2.0-1.0_amd64.debac .git .gitignore
コンテナごとに1つのプロセスのみを実行する
これはかなり一般的な間違いであり、人々が仕事とリスクの原則を完全に理解していないという事実のために許可されています。
まず、SSHDとあまり正しくない
CMD命令が目に
投げ込まれます。
CMD sed -i -E "s/HOST = [^)]+/HOST = $HOSTNAME/g" /u01/app/oracle/product/11.2.0/xe/network/admin/listener.ora; \ service oracle-xe start; \ /usr/sbin/sshd -D
特にユーザーが着信コマンドを「カスタマイズ」したい場合は、このアプローチを使用することの短所について非常に長い間議論することができます。
まず、デバッグやコンテナコンソールへの接続が必要な場合でも、必要がないためSSHDを削除します
。docker exec -it $ {CONTAINER_ID} / bin / bashを使用することをお
勧めします
また、コンテナが停止すると、SSHDのみが正常に
停止しますが 、
データベース自体は親なしのプロセスとして
TERMシグナルによって停止します 。これは、特にデータベース、特にOracle DBには適していません。
「sed」および「service start」によって、単に存在しないとすでに仮定されている可能性があり、説明されているすべての機能をentrypoint.shに転送するのが妥当です。
ENTRYPOINTを準備する際に、いくつかの
松葉杖の回避策を使用することを余儀なくされました(将来的には政治的に少し正確になります)。 ENTRYPOINTの詳細については、少し低く分析します。 一度に複数のポイントに影響します
レイヤー数を最小限に抑える
この項目は非常にシンプルですが、同時に非常に重要です。Dockerは各命令ごとにFSの増分変更を階層化することで機能するため、ここでは合理的な使用の例を示します。
Oracleのインストール機能は、読みやすくするためにshスクリプトに移動されました。
不要なパッケージのインストールを避ける
不要なパッケージのインストールを拒否することに加えて、インストールファイル、キャッシュなどを単一の命令でクリーンアップして、増分レイヤーの不要なレイヤーを削除することも非常に重要です。そうしないと、イメージが二重に重くなります。
apt-get clean && \ rm -rf /tmp/* /var/lib/apt/lists/* /var/tmp/* /download/directory
コンテナは短命でなければなりません
これは最も困難で重要なポイントの1つです。 「エフェメラル」という用語は、コンテナを起動してから削除してコンテナを停止したときに、次の起動が最小構成で前のコンテナを引き続き動作できることを意味します。
私たちの場合、これらはデータベースファイルであり(動作の原理はコールドバックアップのようなものです)、新しいコンテナを起動するときに使用できます。
このアプローチとDockerを使用すると、バックアップを簡単かつ迅速に作成し、即座にロールバックしてデータベース全体を複製できます。
また、ENV変数を介して設定として基本パラメーターを作成することも重要です。
その結果、このENTRYPOINTを取得しました
まとめ
その結果、ベストプラクティスに従って、多くの利点が得られました。
- 画像サイズが3GB減少(3.8Gbから825Mbに)
- データファイルのマウントと再利用のサポート
- 優雅なサービスの停止
- コンテナ開始時のパラメータを介したデータベースの微調整の機会
githubおよび
hub.docker.comで作業結果と問題解決の詳細を見つけることができます。
ご清聴ありがとうございました。