記事の目的
「Dockerってなんぞ?」っていう状態から、「Dockerはこういうツールで、こんなことができるよ!」って説明できるレベルまで理解してもらうことを目的としています。
初心者が陥りがちな勘違い
ググって独学してると一番最初に陥る勘違いとして代表的なのがこいつです。
Dockerって、VagrantとかVirtual Boxとかの仲間で、仮想環境を構築するツールでしょ?
この勘違いを引きずるとコンテナにbashでログインしてゴニョゴニョするみたいな使い方を想像してしまいがちですが、本来の使われ方としは違います。
Dockerとは
Docker is an open platform for developers and sysadmins to build, ship, and run distributed applications, whether on laptops, data center VMs, or the cloud.
Google翻訳
Dockerは、開発者やシステム管理者が、ラップトップ、データセンターのVM、クラウドなど、分散アプリケーションを構築、出荷、実行するためのオープンプラットフォームです。
つまり、仮想環境そのものでではなく、アプリケーションを構築(build)したり出荷(ship)したり実行(run)したりするためのプラットフォームです。
イメージとは
Dockerを使う上で必要になってくるアプリケーションの雛形のことです。
Docker Hubを見てみると、nginxとかrubyとかwordpressとかいろいろあります。
これらを利用して独自のイメージを作成することもできます。
イメージの自作
DockerFileというものを用意して構築(build)することで独自のイメージを作成できます。
記事はいろいろ見つかると思うので、詳細は割愛とさせていただきます。
コンテナとは
イメージを実行(run)することで作成されるプロセスです。
何ができるの?
コンテナ一つでは出来ることが限られますが、複数のコンテナを連携することで一つの大きなシステムを構築することができます。
その際に、一つ一つコマンドでやっていっても良いのですが、Docker Composeというツールが公式で用意されているので、そちらを使うことをおすすめします。
ローカルの環境を汚さないという利点もあり、開発環境としてイメージを用意しておくことで新規参入のハードルを下げるなんてこともできます。
仮にコンテナが壊れた場合でも、そのコンテナを破棄してもう一度立ち上げ直すのも容易です。
例1
- Webサイトをnginxイメージから作成しコンテナ名をwebとする
- dbをMysqlイメージから作成しコンテナ名をmysqlとする
- キャッシュdbをRedisイメージから作成しコンテナ名をredisとする
- webとmysqlを接続しデータの読み書きを行う
- webとredisを接続しセッションの管理を任せる
例2
https://qiita.com/y_hokkey/items/406b5a8c4bc15354d069
https://qiita.com/okamu_/items/1c8e5fde742ca165fa12