Docker とは何か?
Docker とは、インフラ関係や DevOps 界隈で注目されている技術の一つで、Docker 社が開発し
ている、コンテナ型の仮想環境を作成、配布、実行するためのプラットフォームです。
もう少し掘り下げると、Linux のコンテナ技術を使ったもので、よく仮想マシンと比較されま
す。VirtualBox などの仮想マシンでは、ホストマシン上でハイパーバイザを利用してゲスト OS を
動かし、その上でミドルウェアなどを動かします。
VirtualBox、仮想マシン、ハイパーバイザーに関してはどこかのタイミングで説明します。
それに対し、コンテナはホストマシンのカーネルを利用して、プロセスやユーザーなどを隔離す
ることで、あたかも別のマシンが動いているように動かすことができます。そのため、軽量で高速
に起動、停止などが可能です。
また、Docker はミドルウェアのインストールや各種環境設定をコード化して管理します。
これは Infrastructure as Code(IoC) と呼ばれていて、ソフトウェア開発で実施されてきた構成管
理や自動化などを、サーバの各種設定やミドルウェアのインストールなどにも適用したものです。
そうすると以下のようなメリットが生まれます
- コード化されたファイルを共有することで誰でも同じ環境が作れる
- 作成した環境を配布しやすい
- スクラップ&ビルドが容易にできる
例えば、開発環境 (Windows) では動いていたけど Linux で動かなかったといいたケースも、開
発工程から Docker を使っていくことで防ぎやすくなっています。
そして、開発工程の中で使っていた環境をそのまま本番環境に持っていくことも可能なため、環
境差分が少なく、環境による問題を減らすことができます。
作成した Docker イメージをほかの人にも渡して使ってもらうことで、各自の環境のバージョン
のずれ防止や、開発環境準備の短縮化にもつながります。開発環境の準備で、説明不足や手順ミス
で丸一日かかってしまうのはもったいないことです。
また、クラスタ構成を構築する場合も、Docker イメージがあれば、それを起動する名前などを
変えるだけで、複数の環境を起動できるので、いちから手順に沿って環境を作る作業もなくなり、
クラスタ構成を構築するのも容易になります。これはコンテナを管理するオーケストレーション
ツールを使うことで、より運用が楽になります。
さらに、Dockerfile というコード化したものを構成管理し、それを CI ツールでビルド、デプロ
イ、環境のテスト、画面試験を毎日実行すれば、環境面の確認も含めて安心して開発を進められる
ようにもなります。このサイクルを回せると、いざ環境を構築するとなった際に「アプリを動かす
のに何のパッケージが必要なの?」と慌てることも減らせて、開発・リリースサイクルも安定して
くると思います。
Docker コンテナの実行例
Docker のイメージは、Web 上の Docker Hub で公開されています。そこからイメージを取得す
れば、すでに必要なミドルウェアなどがインストールされた状態の Docker を起動できすぐに使用
できます。
今回は初回ということで「hello-world」のコンテナを起動させたいと思います。
以下のコマンドを実行してください
docker images
何も保存されていないので現在はリストされているものがありません。
それでは、イメージの取得を行いましょう。
今回はDocker Hubにあるリポジトリからコンテナイメージを取得します。
docker pull hello-world
以上で取得が完了しました。再度イメージの確認をするとREPOSITORYが”hello-world”という名前のイメージが取得されているのが確認できます。
REPOSITORY TAG IMAGE ID CREATED SIZE
ello-world latest ee301c921b8a 12 months ago 9.14kB
実際にコンテナを立ち上げてみましょう。
docker run hello-world
Hello from Docker!
が表示されれば成功です。
コメントを残す