【第一回】はじめてのDocker

はじめまして。ドイです。 アームズメンバーに加わりました。今後ともよろしくお願いします。
技術ブログを書いていくに当たり、私の目指す方向性が以下に挙げるものです。

「知らない」を、「少し知っている」に格上げする

この業界に入りまして2年目ですが「知らないこと」って怖いんですよね。 知らないことばかりで不安、そんな時にこちらの記事を読みました。

jp.quora.com


要約しますと
“仕事上で求められることでいっぱいいっぱい。どうやってテクノロジーを追いかければいいのか”という問いに対する解決策が記されています。
記事では、「まずはリストを3つ作ること」とし、以下のとおりテクノロジーに対する知識レベルを3段階に分類することを勧めています。
1. 使い方を知っていて、最小限の調査で済むテクノロジー
2. 企業で使われていることを知っているテクノロジー(例 Dockerをいつ、なぜ使うかは知っているが、Dockerfileは書いたことがない)
3. 聞いたことはあるけど、なんなのか見当がつかないテクノロジー
現状を乗り切るには、テクノロジーをリスト(3)から(2)に移すこと

これを読んだ時、少しだけ背中を押してもらえたような感覚になりました。 なるほど、知らないことを少し知っているに格上げする作業。これならできそうです。

それでは「知らないことを少し知っている」にする第一回目。本日はDockerについて「少し知っている」状態にしていきたいと思います。

Dockerについて

Dockerについて調べますと 「Dockerは、アプリケーションを開発、出荷、実行するためのオープンプラットフォームです。分離とセキュリティにより、特定のホストで多数のコンテナを同時に実行できます。」
とでてきます。理解できましたでしょうか。 実のところ、私には少し難しいようです。

では視覚的なところから理解を深めていきましょうか。
Dockerのアイコンを、見たことがありますか? 船を模したクジラが、コンテナを運んでいますね。

Dockerは、コンテナと呼ばれる仮想環境を作成、そしてコンテナの元となるイメージを共有、コンテナを元に開発することができます。 (これが上記の『アプリケーションを開発、出荷、実行』に当たります)

少し分解して、見ていきましょう。

コンテナ

今からECサイトを作ると仮定しましょう。 phpをインストール MySQLをインストール Apacheをインストールして…
と必要なソフトをインストールして、そしてそれぞれの設定をしていきますよね。いわゆる環境開発ですね。
一人で作るには荷が重いので、phpだけ他の人に作業をお願いしました。
しかし、出来上がったコードをローカルで実行しても、思うような動きになりません。何故でしょう?
phpのバージョンが違うために、相手のローカル環境では動いたものが、自分の環境では動かなかったようです。

Dockerでは 「例えば、phpのバージョンは7.4。MySQLのバージョンは5.7。Apacheのバージョンは2.4.46のコンテナ」 を作成し、実行することができるのです。 PCの中に、また別のPCが置かれていると思えばわかりやすいかもしれません。

イメージ

コンテナを作る元となるのが、上記に出てきました「イメージ」と呼ばれるものです。 上記の例だと「phpのイメージファイル + MySQLのイメージファイル + Apachのイメージファイル」そして、ECサイトに必要なコンテナを作れます。
チーム開発においてDockerを利用することで、可愛らしいDockerクジラが「このコンテナを使うんだよ」と運んできてくれる訳ですね。
コンテナの共有において、Dockerfileと呼ばれるものを、共有することで、上記のような開発者同士の齟齬の発生を防ぐことができます。 Dockerfileについて、次回学んでいきたいと思います。

まとめ

どうでしょう。Dockerについて「少し知っている」状態になれたでしょうか。
「少しの理解」を重ねることで、上記にあげたリスト3からリスト1へと、理解できることを増やしていきたいですね。
次回は、Dockerfileの概要について学んでいきたいと思います。