Dockerを学習する前に知っておいたほうがよいこと
今回は、コンテナ型仮想化の実装として有名なDockerに関する話です。(かなり技術的な話になります。)
私自身、今年の夏ぐらいからDockerを使い始めたのですが、最初は勝手がわからずに色々と苦労したので、「これからDockerを学習したい」という方に向け、事前に知っておいたほうがよさそうな情報を簡単に整理してみました。
歴史
Dockerの誕生から現在までの経緯については、下記リンクに詳しいです。
個人的には、コンテナについてはDockerが、コンテナオーケストレーションについてはKubernetesがデファクトになったと、と認識しています。
学習方法
これからDockerを学習するなら、以下のような順番がおススメです。
まずは、Docker環境を構築します。、Docker Community Editionから対象プラットフォームのDockerをインストールします。古いMacやWindowsの場合は、Docker Toolboxをインストールします。
次に、Dockerの基本的な操作方法を覚えます。具体的には、Docker for beginnersの、2.0 Webapps with Dockerまでに出てくるコマンドが理解できればOKです。Swarmについては、Kubernetesがデファクトとなったことを考えると、スルーしても問題ないでしょう。実際のところ、ローカルの開発環境で使う分には、(Swarmモードではない)docker-composeで事足りると思います。
基本的な操作方法を覚えたら、自分でDockerfileを作成してimageをbuildしてみます。例えば、aptやyumなどのパッケージマネージャを使って環境構築をしたければ、UbuntuやCentなどのLinuxディストリビューションの既存イメージからコンテナを起動して、その中でapt-getやyumで環境を構築してみます。その際に、使ったapt-getやyumのコマンドをコピペしながらDockerfileを作っていくと、Dockerfileの流れが理解しやすいと思います。
Dockerfileのimageがbuildができたら、dockerコマンドでimageを実行して、動作することを確認します。この時、dockerコマンドに、引数やオプションを色々指定しないといけないので、すぐに「こんなこと毎回やってられない」と感じるはずです(笑)。
そうなったら、docker-composeの出番です。基本的には、dockerコマンドのオプションをYAMLで指定する感じなので、dockerコマンドに慣れていれば、docker-composeを書くのはそんなに難しくありません。慣れてきたら、APサーバとDBサーバなど、複数のコンテナが連携するdocker-composeも書いてみます。ここまでくれば、開発環境で実用的な使い方ができるようになると思います。
情報源
情報源としては、(当然のことながら)公式ドキュメント(Docker Documentation)が充実してます。リファレンス的な用途なら、公式ドキュメントだけでほぼ事足りますが、かなりのボリューム感なので、必要なった時に必要な個所をしっかり読みこむのがおススメです。
「こんなことがしたいけど、どうしたらいいかわからない」という場合は、Web検索で実例を探すのが近道ですが、不正確な情報や古い情報が混在しています。書籍については、私の知る限りこれといったものがないのが現状です。
Dockerの変化のサイクルはとても速いので、いずれの情報源にあたる場合も、どのバージョンについて書かれたものかに注意します。
まとめ
開発環境の構築は、手作業なら半日ぐらいは余裕で取られたりするのですが、Dockerfileとdocker-compose.ymlがあれば文字通りコマンド一発で環境構築が完了する、というのは隔世の感があります。Kubernetesがデファクト化し、ASE, GCP, Azureといった大手クラウドベンダのKubernetes対応も進んできているので、今後Dockerコンテナを本番環境で利用する事例も増えてくると思います。上記の情報が、これからDockerを学習しようという方に、少しでも参考になれば幸いです。