概要
Dockerのスローガンである「Build/Ship/Run」について学習したことを記載します。
Dockerの基本的な機能として、以下の3つがあります。
機能 | 説明 |
---|---|
Build | Dockerイメージの作成 |
Ship | Dockerイメージの共有 |
Run | Dockerコンテナの動作 |
Build
「Build」は、コンテナイメージを構築(ビルド)するフェーズ。
Dockerでは、アプリケーションの実行に必要になるプログラム本体/ライブラリ/ミドルウェア/OS/ネットワークの設定などを1つにまとめてDockerイメージを作成します。
Dockerは、「1イメージ=1アプリケーション」として複数コンテナを連携してサービス構築する方法が推奨されています。
主なビルド手順:
- docker buildコマンド
- Docker Hub標準機能のAutomated Build
- CI/CDサービス(Travis CI,Circle CI)※ビルド/テスト/デプロイ
コンテナのバージョン管理では、下記のファイルをGitの作法で管理するのが良いとされています。
これらの構成定義ファイルがGitHubやBitbucketのようなコード管理プラットフォーム上に保管されている場合、ほとんどのレジストリサービスやCI/CDサービスと連携が可能です。
- Dockerfile:アプリケーション環境をコンテナイメージ化するためのビルド手順を定義
- Composeファイル:アプリケーション環境の構成を定義
Ship
「Ship」は、DockerイメージをDockerレジストリで共有するフェーズ。
ビルド済みコンテナイメージの保管/バージョン管理/保管済みコンテナイメージの安全性を管理します。
Docker Hub(レジストリ):
利用可能なコンテナイメージを永続的に保管し、コンテナイメージをバージョン管理していくために使用されるデータストア。
公式イメージ以外にも個人が作成したイメージをDocker Hubで自由に公開して共有することが可能。
Dockerコマンドを使用するとDocker Hubにログインし、レジストリ上のイメージ検索やアップロード/ダウンロードが可能。
また、Docker Hubは、GitHubやBitbucketと連携することも可能。
例えば、GitHub上でDockerfileを管理し、そこからDockerイメージを自動生成(Automated Build)し、Docker Hubで公開することができます。
セキュリティの問題として、レジストリ上に一度保管して共有したコンテナイメージをアップグレードしないまま放置しているような場合、セキュリティホールなどの脆弱性が残った状態でユーザーに利用され続けてしまうリスクがあります。
そのため、このような問題に対応するために各種機能が用意されています。
- Docker Context Trust:Dockerイメージの提供者を検証することができる機能
- Docker Security Scanning:Dockerイメージをスキャンし、既知のセキュリティ上の脆弱性がないことを確認し、イメージの安全性を確認できる機能。
Run
「Run」は、実際にDockerコンテナを動作させるフェーズ。
Dockerは、Linux上でコンテナ単位でサーバ機能を動作させます。
このコンテナの基になるのがDockerイメージ。DockerイメージがあればDockerがインストールされた環境であればどこでもコンテナを動作可能。
コンテナデプロイのために必要になる煩雑な手続きは、クラスタ管理プラットフォームであるコンテナオーケストレーターに託されることが期待されています。
コンテナオーケストレーター:
- レジストリからPull(ダウンロード)した任意のコンテナイメージをプラットフォーム環境上にデプロイ
- デプロイしたコンテナに対する定期的なヘルスチェックの実行
- コンテナの意図しない停止が検知された場合には、コンテナオーケストレーターが持つクラスタ管理機能が動作し、正常稼働している他の収容ノード上にコンテナを再収容するスケジュールがコンテナオーケストレーターのジョブに自動投入されて実行される
上記動作が実行されていますが、ユーザーはその動作の詳細を気にすることなく、それぞれのCaaS(Container as a Service)より提供されるAPIやWebインターフェースを操作することでコンテナ運用管理ができます。