Docker公式サイト:https://www.docker.com/
はじめに
DevOpsをはじめようと思っていますか?DevOpsの本質は、開発チームと運用チームのコラボレーションにあります。「ツールさえ導入すればよい」というのは誤りです。しかしながら、DevOpsを実現するためには、それをサポートするツールが必要不可欠なのも事実です。モダンなツールのサポートがあってこそDevOpsは実現するのです。今回紹介するのは、そのツールのひとつであるDockerです。
この記事では、
- DevOpsをはじめようと思っている方
- 開発にDockerを導入しようと思っている方
のために、Dockerの概要や今までの仮想化ソフトウェアとの違い、構成する要素についてお伝えしていきます。Dockerは登場以来、エンジニアの注目を集め続けています。AWSなどの大手クラウドコンピューティングサービス各社も、次々とDocker関連サービスを開始しています。そろそろ概要だけでも理解しておきましょう。
Dockerってなに?
Dockerとは、アプリケーションの実行環境を仮想化するためのソフトウェアで、その軽量さや高速性から高い注目を集めました。また、実行環境を自動的に構成する機能も持っています。これにより、イミュータブルインフラストラクチャー(不変のインフラ)を実現することができ、DevOpsをはじめとするCI(継続的インテグレーション)環境で広く利用されるようになりました。さらには、開発環境のみならず本番環境でも活用されはじめています。
DockerにはLinuxの仮想化関連技術が使われているため、Windows環境ではVirtualBoxなどの仮想マシンソフトウェアを使用して、Dockerを実行するためのLinux環境を構築する必要があります。とはいえ、公式のインストーラーが用意されていますので、セットアップは難しくはありません。なお、その際にはCPUの仮想化支援機能が有効になっている必要があります。しかし、この状況もマイクロソフトの協力により改善される見込みです。すでにWindows10のインサイダービルド版では、「Hyper-Vコンテナ」によりDockerをネイティブに実行できるようになっています。これから、さらなる発展が期待できるでしょう。
いままでの仮想化ソフトウェアとはどう違うの?
Dockerが登場する以前にも、似たような仮想化ソフトウェアは存在していました。その代表格はVagrantでしょう。しかし、DockerとVagrantでは決定的な違いがあります。それは、仮想化の方法です。
Vagrantでは、VirtualBoxを利用して仮想マシンを起動し、「ホストOSの上でゲストOS」を実行します。つまり、OSを2つ実行しているのです。一方、Dockerでは、「ホストOSの上でコンテナを実行」します。コンテナは、ホストOS上のひとつのプロセスにすぎないため、ゲストOSを実行するよりも軽量で高速に実行できます。これが、Dockerが幅広い支持を集めることになった理由でもあります。
Dockerを構成する要素
Dockerエンジン
Dockerエンジンは、コンテナを管理するためのデーモンプロセスです。いわばDockerの心臓部といったところですね。ひとつのDockerエンジンで、複数のコンテナを管理することができます。コンテナとホストOSの間に入り、仲介役を果たすことでコンテナを実行します。
Dockerクライアント
Dockerクライアントは、リモートAPIを介してDockerエンジンを制御します。主なDockerクライアントには、CUIのDockerコマンドやGUIのKitematicなどがあります。もちろん、エンジンとクライアントは別々のマシンで実行できますので、リモートから管理することも容易です。
Dockerコンテナ
Dockerコンテナは、Dockerエンジン上で動作するアプリケーションの実行環境です。実際には、コンテナはひとつのプロセスにすぎません。各コンテナは完全に独立しているので、まるで別のOSが起動しているかのような錯覚を覚えます。コンテナでは複数のアプリケーションを実行することもできますが、単一のアプリケーションのみを実行することが推奨されています。オーバーヘッドが少なく、複数のコンテナを実行してもパフォーマンスに問題が出ることはありません。
Dockerイメージ
Dockerコンテナは、Dockerイメージから作られます。Dockerイメージは、つまるところOSやアプリケーションのパッケージです。仮想的なストレージのようなものですね。自作することも可能ですが、次に説明するDocker Hubを利用すると簡単に既存のイメージを入手できます。イメージの内部は階層構造を持っており、適用(コミット)した変更が階層的に積み上げられていきます。コンテナをイメージから起動すると、一番上の階層に新たな階層(レイヤ)が作成され、その領域に対して書き込みができるようになります。下層のレイヤに対して書き込みをすることはできません。もちろん、読み込みは全レイヤで可能です。
Docker Hub
Docker Hubは、Dockerイメージを共有するためのGitHubのようなリポジトリサービスです。Ubuntuやnginx、mongoなど多数の公式イメージが登録されています。まずは、ここのイメージをベースにカスタマイズしていくとよいでしょう。カスタマイズしたイメージは、再びDocker Hubにアップロードして共有できます。また、GitHubと連携することで、次に説明するDockerfileを利用した自動ビルド(イメージの作成)をすることもできます。
Dockerfile
Dockerイメージから起動したコンテナは、自由にアプリケーションをインストールしたり、設定を変更したりすることができます。しかし、毎回手動で環境の構築を行っていてはミスの原因になってしまいます。特に複数人のエンジニアが関わる場合は、各環境に違いが生じてしまいがちです。そのため、Dockerfileを作成して環境の構築を自動化(コード化)する必要があります。Dockerfileでは、ベースにするイメージを指定する他、アプリケーションのインストールや設定内容をコマンドで記述できます。後は、作成したDockerfileを共有し、各環境でビルドするとまったく同一のイメージ(実行環境)が得られることになります。
まとめ
Dockerがどんなものかつかめましたか?DevOpsに採用されることが多いDockerですが、DevOpsでなくても活用する方法はあります。軽量なので、ちょっとしたテスト目的に使ってもよいでしょう。自分なりの使い道を見つけてみてください。あなたはDockerをどんなことに使いますか?
本ブログは、Git / Subversionのクラウド型ホスティングサービス「tracpath(トラックパス)」を提供している株式会社オープングルーヴが運営しています。
エンタープライズ向け Git / Subversion 導入や DevOps による開発の効率化を検討している法人様必見!
「tracpath(トラックパス)」は、企業内の情報システム部門や、ソフトウェア開発・アプリケーション開発チームに対して、開発の効率化を支援し、品質向上を実現します。
さらに、システム運用の効率化・自動化支援サービスも提供しています。
”つくる情熱を支えるサービス”を提供し、まるで専属のインフラエンジニアのように、あなたのチームを支えていきます。
No Comments