*Dockerは、サーバーと関わりの深い技術です。連載「ゆるく学ぶサーバー入門~イマイチわかりづらいサーバーの基礎を解説~」も併せて読むと、より理解を深めることができます。ぜひご覧ください。
Dockerとはどんなもの?
Dockerとは何か?というと、「コンテナ技術がどう」だとか「開発環境をなんとか」といった話が出てきますが、要はパソコンやサーバー上の環境を、独立した部屋に分けられる仕組みです。Docker社が開発しています。
■Dockerでは「コンテナ」を手軽に作ったり消したりできる
これがどういうことかというと、皆さんが普段使っているパソコンや、サーバーは、言わば大きな一つの部屋に、複数のプログラムやソフトウェア(アプリケーション)が同居してる状態です。しかし、それでは使い勝手が悪いこともあります。
そこで、「Docker Engine」というソフトウェアを入れると、Dockerが自分の支配領域に、箱のような細かい部屋をいくつも用意できるようになるのです。プログラム達が、大広間で雑魚寝している状態から、一つずつのテントにわけるようなイメージでしょうか。
このテントの事をコンテナ(container)と言います。船で運ばれるあのコンテナです。「コンテナ技術」自体は、Docker社だけのものではありませんが、現在コンテナ技術を使っているソフトウェアで、最も有名なのが、Dockerなのです。
Dockerがあれば、コンテナを簡単に作ったり、消したりすることができます。しかも、中身入りのコンテナを作ることができます。
※『仕組みと使い方がわかる Docker&Kubernetesのきほんのきほん』(マイナビ出版)P.4より
imageという「コンテナの素」
コンテナを作るには、「コンテナの素」から作ります。これを「image(イメージ)」と言います。「Docker Hub(ドッカーハブ)」と呼ばれる配布場所から、imageをダウンロードしてくると、コンテナをいくつでも作れるのです。imageは、プラモデルの金型のようなものだと考えるとわかりやすいでしょう。
※『仕組みと使い方がわかる Docker&Kubernetesのきほんのきほん』(マイナビ出版)P.24より
■imageでソフトウェアを手軽に入れられる
配布されているimageには、既にソフトウェアが入っています。どんなソフトウェアが入っているかというと、よく使われるものは一通り揃っていると言っていいでしょう。
たとえば、サーバーに使われるOSとして有名な、
- Red Hat(レッドハット)
- Ubuntu(ウブントゥ)
- Debian(デビアン)
- AlmaLinux(アルマリナックス)
- Rocky Linux(ロッキーリナックス)
などはもちろんのこと、ウェブサーバーのためのソフトである、
- Apache(アパッチ)
- nginx(エンジンエックス)
データベースサーバー用の、
- PostgreSQL(ポスグレエスキューエル)
- MySQL(マイエスキューエル)
など、大概はあります。しかも、それぞれ複数のバージョンが用意されているのです。
ですから、これまで、「Apacheが使いたいな!」と思ったら、マシンを買ってきて、Linuxを入れて、Apacheを入れて……と一日仕事だったのですが、Docker Hubで配布されているimageを使えば、すぐにApache入りのコンテナを建てられるのです。これは大変便利です。
※『仕組みと使い方がわかる Docker&Kubernetesのきほんのきほん』(マイナビ出版)P.27より
コンテナは再びimageにできる
コンテナは、再びimageにすることもできます。たとえば、コンテナをちょっと改造して、また使ったり、誰かに配ったりしたいときもあるでしょう。そうしたときは、コンテナからimageを書き出して、それを配ればいいのです。
imageは、Docker Hubにアップロードしても良いですが、USBメモリなどでやりとりすることもできます。
※『仕組みと使い方がわかる Docker&Kubernetesのきほんのきほん』(マイナビ出版)P.26より
Dockerはなぜ使われるのか
Dockerが便利に使われるには、いくつかのシチュエーションと理由があります。
■プログラム・ソフトウェア・環境を入れたり配ったりしやすい
Dockerは、imageさえあれば、コンテナを複製するのが容易なので、誰かが作ったプログラムの入ったコンテナを配るときにも使われますし、開発環境のコンテナをそのまま本番環境に持って行くこともあります。
最近では、プログラミングスクールで、プログラムを学ぶときに、学習のための開発環境を整えるために使われることもあるようです。
また、これまでのように、「マシンを手配して、Linuxを入れて、Apacheを入れて……」などと煩雑なことをする必要がないので、すぐに環境が欲しいときにも使われています。特に、Windowsで手軽に使えるようになったため、爆発的に広がりました。
一言で言えば、「配られているimageを使えば、簡単に一発でソフトウェアが使えるし、作ったものを配るのにも便利」ということです。
■セキュアな環境作りやCI/CDに欠かせない
Dockerといえば、上記のような便利な面がクローズアップされがちですが、セキュリティ面や、運用面でのメリットも大きいです。
Dockerは、「大広間で雑魚寝ではなく、テント(コンテナ)で独立できる仕組み」なので、特定のソフトウェアが古くなったときに、アップデートがしやすいです。もちろん、そのようにコンテナを構成しなければなりませんが、Dockerを使わない環境よりもはるかに簡単にできます。これによって、サーバーを安全な状態に保ちやすくなります。
また、運用面では、CI/CD(Continuous Integration/Continuous Delivery & Deployment=継続的インテグレーション/継続的デリバリー&デプロイ)に欠かせません。なにか難しそうな言葉が出てきましたね!CI/CDとは、平たく言うと「作ったプログラムをチョイチョイ直して、頻繁にリリースする仕組み」です。
最近では、作ったプログラムを作ったままにして放置すると危険なこともあるので、こうしたCI/CDが望まれるのです。コンテナは「作って捨てる」ことが容易なので、この仕組みに必須の技術となっています。
ニャゴロウ先生のまとめ
Dockerについて、ぼんやりと見えてきたでしょうか。Dockerは、先端的な技術として語られることが多かったのですが、最近では一般的なプログラマーに、「便利な道具」として使われるようになってきています。簡単なので、皆さんも挑戦してみると良いでしょう!
次回は、「Dockerを使ってみたい!」として、Dockerを使うにはどうしたらいいのかのお話をします。お楽しみに!
▼Dockerゆる入門
1:「Dockerが便利」といわれる理由は?
2:Dockerを使ってみよう!
3:Dockerとの付き合い方はどうしたらいいの?
技術ライター、イラストレーター。システム開発のかたわら、雑誌や書籍などで、データベースやサーバー、マネジメントについて執筆。図を多く用いた易しい解説に定評がある。主な著書に『なぜ?がわかるデータベース』(翔泳社)、『図解即戦力 Amazon Web Serviceのしくみと技術がこれ1冊でしっかりわかる教科書』『ゼロからわかるLinuxサーバー超入門 Ubuntu対応版』(技術評論社)、『仕組みと使い方がわかる Docker&Kubernetesのきほんのきほん』(マイナビ出版)がある。
※本記事に記載されている会社名、製品名はそれぞれ各社の商標および登録商標です。