川井田新介のコラム第一回「Docker入門!コマンドから覚えるDockerの仕組み」
1.はじめに
はじめまして。今年入社し、デジタルヒュージテクノロジーでエンジニアをしております、川井田 新介(かわいだ しんすけ)と申します。出身は鹿児島県で、さつまいも畑に囲まれて育ちました。趣味は、サウナ(あつい以外のことを考えられなくなるのが好き)、ボルダリング(次々に課題を突破する楽しさがあります)、映画(知らない世界を知るツール)、音楽(毎年300枚程新譜を聴くぐらい新鮮な音が好きです)
異業種から未経験で転職したため、4月から3ヶ月間デジタル・ヒュージ・テクノロジーで新人研修を受け、今まさにエンジニアとして走り出したところです。このたび、エンジニアとして知識を増やしていく過程を、コラムとして連載する機会を頂いたのでまとめて行きたいと思います。まとめるにあたって、スピード感を重視してコマンドから仕組みを覚えるアプローチを取りました。
動かしながら覚えることで、イメージがより鮮明になると考えています。
2.Dockerとは
Dockerとは、Linuxのコンテナ技術を使ったコンテナ型の仮想環境を作成、実行できるプラットフォームです。Dockerが注目される理由は、他仮想化ツールに比べてダウンロードや起動が軽量で高速であるだけでなく、コード化されたファイルを共有することで誰でも同じ環境構築ができる点だと思います。コードで実行環境の引き継ぎができ、バージョン管理もでき、スクラップ&ビルドが容易なところは非常に魅力的です。学習コストがかかったとしても、マイクロサービス化が進むいま、覚えておいて損はないと思います。
それではDockerに入門してみましょう。
3.インストール
公式ホームページからdocker for mac/docker for windowsをダウンロードしてインストールします。
※docker storeへのユーザー登録が必要です。
※windows版はHyper-Vを有効化してからインストールして下さい。
インストールが完了したら、以下のコマンドを入力してバージョン確認をして下さい。
Docker本体のバージョン確認
$ docker –v
Docker Composeのバージョン確認
$ docker-compose –v
続けて入門といえばなアレを表示させてみましょう。
$ docker run docker/whalesay cowsay HelloWorld
イメージのダウンロードが始まり、クジラがHelloWorldしてくれればインストールは成功です。
4.docker-composeとは
ここで確認したdocker-composeとは何でしょうか?
Dockerではイメージの作成、コンテナの実行、イメージの公開を行うことができ、それを実行するためにさまざまな機能をもったコンポーネントが公開/配布されているようです。
主なコンポーネントをみていきましょう。
・Docker Compose
複数のコンテナの構成情報をコードで定義して、コマンドを実行することでアプリケーションの実行環境を構成するコンテナを一元管理をするためのツール(よく使いそうです)
・Docker Engine
Dockerイメージの作成やコンテナの起動を行うDockerのメイン機能。
Dockerコマンドの実行や、Dockerfileによるイメージの生成を行う。
・Docker Kitematic
Dockerのイメージの作成やコンテナの起動などをGUIで行えるツール。(便利そう)
・Docker Registry
コンテナの元になるDockerイメージを公開/共有するためのレジストリ機能。
公式のレジストリサービスはDocker Hubです。
・Docker Machine
仮想マシン上にDocker Engineをインストールするツール。AWS EC2やDigitalOceanなどのクラウド環境にDockerの実行環境をコマンドで自動生成するためのツール
・Docker Swarm
複数のDockerホストを1つの仮想Dockerホストとして扱うためのツール
これらのコンポーネントを使ってDockerを操作していくことはわかりました。
ここまでで頻出している、コンテナやdockerイメージとは何でしょうか?
何やらDockerを理解する上で重要なワードのようです。
ホスト型やハイパーバイザー型と呼ばれる仮想化技術では、ホストOS上にゲストOSを走らせ、仮想化を実現するのに対して、Dockerはコンテナ型の仮想化技術を使いホストOSのハードウェアやネットワークなどに関わるLinuxカーネルを共有して使用することで軽量で高速に動作します。
また、コンテナとしてアプリケーションの実行に必要なすべてのファイル郡を管理することで、高い移植性を実現しています。
ホストOS上にコンテナとして区画化したアプリケーションの実行環境を作るにはLinuxカーネルのnamespace機能を使っています。
namespace機能とはLinuxのオブジェクトに名前つけることで6つの独立した環境を構築することができます。
なるほど。
DockerはホストOSとしてLinuxを使用している為、Linuxの知識が必要になりそうです。
5.おわりに
今回はDockerのインストールまで行いましたが、動かして初めて、わからないことに気づき、Dockerのコアな部分に触れられたと思います。次回はLinuxの基本的な機能についてみていきましょう。