dockerを利用する際、単にコンテナを作成しただけではあまりメリットがなく、「シャットダウンしたらデータが飛ぶ仮想マシン」ということになりかねません。
dockerの使いどころをクリアにするために、メリットを生かせる利用シーンを整理してみましょう。
- 即座にリストアできるバックアップを持つ
- 負荷増大に合わせてハードをスケールアップする
- ハード障害時に別マシンで稼働させる
- 開発環境と本番環境の構成を揃える
これらを実現するためには、どのマシンからもアクセスできるリポジトリを持つことが鍵となります。
dockerhubにpushするまでが1サイクル
dockerのメリットを体感するためにはリポジトリにイメージを置くところまで作業を進めておくことが重要です。
ワークフローの概略は以下のようなものです。
- リポジトリのアカウントを用意する。一番手間がかからないのはdockerhubのサインアップ
- Dockerfileを編集し
docker build
で自分用のイメージを作成する - 手元の環境で動作テスト
- 機能するイメージが完成したところで、
docker commit
docker push
して、リポジトリにイメージを送っておく
ここまで作業しておけば、別マシンにdockerをインストールするだけでdocker pull
でイメージ利用を継続できます。
また、このフローではイメージのレシピとなるDockerfileを考慮していませんが、これはこれでgitなどでバージョン管理することで手戻りを防げます。
(Githubとdockerhubのアカウント連携で、リモートビルドするフローもあるようですが簡略化のため割愛します。)
注意:公開リポジトリに機密情報を格納しないこと
dockerhubは無償アカウントでは非公開設定のプライベートリポジトリが1つに制限されているため、パブリックリポジトリを利用する機会が多くなりそうです。
その際、OSイメージにパスワードやサービス接続情報などの機密情報を含めないように気をつける必要があります。
パブリックリポジトリをイメージ流通に使う場合は、必要なソフトウェアだけインストールしておき、パスワードなどの最終設定はdocker pullした後の実機で設定するなどの工夫が必要です。
プロダクション環境を構築するためには、何らかのプライベートレジストリの利用が事実上必須になると思います。
自前のプライベートレジストリを構築する例については、「 dockerプライベートレジストリ構築(Google Compute Engine用)[1]」で解説しています。
Chuma Takahiro