新しい言語について学ぶ前ににわかDocker知識をマシにする(前編)

よくわからないままにDockerを使っていたけれども、せっかくなので

言われた通りやったらできた

から

言われた通りやったけど出てきた用語については意味わかってる

レベルまで上げたいと思う。

 

まずあらためてDocker公式ページを覗く(chromeに翻訳させる)。

Empowering App Development for Developers | Docker

Dockerイメージを活用して、WindowsおよびMacで独自のアプリケーションを効率的に開発することにより、コーディングをすぐに開始できます。

アプリケーションをポータブルコンテナイメージとしてパッケージ化して、オンプレミスのKubernetesからAWS ECS、Azure ACI、GoogleGKEなどのあらゆる環境で一貫して実行します。

Dockerを使用する大きなメリットはこの二つだと考える。

それぞれの文章を掘り下げて理解度を上げる。

 

コーディングをすぐに開始できます

この点については文そのままの意味で、経験がある。

Dockerは、Dockerイメージと呼ばれる環境のテンプレートのようなデータを基にしてコンテナ(実際に動く環境)を作成することができるアプリケーションだ。

このDockerイメージは、Docker HubというDocker社が公式で管理しているサービスに登録することができる。(Dockerfileというコマンド群が記載されたテキストファイルを実行することでイメージを作成することができる)

このため、個人で作成したDockerイメージは勿論、Dockerが推奨する公式なDockerイメージが公開されている。

Docker Official Images | Docker Documentation

公式なDockerイメージの一例として、PHPの公式Dockerイメージのページを貼っておく。

https://hub.docker.com/_/php?tab=description

このようなDockerイメージをローカル環境に引っ張ってきて、コンテナを作成・起動すれば、10分程度で目的とする言語が動く環境を作成することができる。

 

DockerComposeを使用してマルチコンテナーアプリケーションを作成します

docker-composeというコマンドが存在する。docker-compose.ymlにコマンド群を記載し、それを基にしてコンテナを作成するコマンドを実行することで、
複数のコンテナをそれぞれ別のDockerイメージを使用して一気に起動させることができる。

また、コンテナ間で通信を行うことも簡単に設定できる。

 

オンプレミスのKubernetesからAWS ECS、Azure ACI、GoogleGKEなどのあらゆる環境で一貫して実行します

Kubernetesというものは初めて聞いたので本題から逸れない程度に検索。

Kubernetesとは何か? | Kubernetes

クーバネティスと発音するらしいそれは、

コンテナは、アプリケーションを集約して実行する良い方法です。本番環境では、アプリケーションを実行しダウンタイムが発生しないように、コンテナを管理する必要があります。例えば、コンテナがダウンした場合、他のコンテナを起動する必要があります。このような動作がシステムに組込まれていると、管理が簡単になるのではないでしょうか?

そこを助けてくれるのがKubernetesです! 

上記の文章から、複数コンテナを管理するもの、らしい。

つまり、それぞれ別のサービスでもDockerイメージを使用したコンテナを動作させることができる。一旦この程度の理解に留めておく。

 

次に、ガイドに沿ってDocker自体の概要について理解を深める。

Docker overview | Docker Documentation

Dockerアーキテクチャ

Dockerをダウンロードすると、クライアントとデーモンが内蔵されている。

クライアントはコマンドのことで、デーモンは入力されたコマンドに応じて実際にコンテナの構築などの実作業を行う。

また、DockerComposeもクライアントの一つである。

クライアントとデーモンの通信方法については本題から逸れるため今回は掘り下げない。

 

Dockerレジストリ

Dockerイメージを保存する場所のこと。

Dockerイメージは複数保存することができる。

Docker Hubは誰でも使用できるパブリックレジストリ

らしい。

 

Dockerを選択する理由の一つとして挙げられそうな一文があったため、引用しておく。

これは、他の仮想化テクノロジーと比較した場合に、イメージを非常に軽量、小型、高速にする理由の一部です。

他の仮想化テクノロジーと比較してどの程度であるのかまで理解しなければメリットの一つとしては挙げられないが、次の機会で比較する際にはポイントの一つとして押さえておく。

 

コンテナのネットワーク、ストレージ、またはその他の基盤となるサブシステムを、他のコンテナまたはホストマシンからどの程度分離するかを制御できます。

詳しくは実際に構築するときになってから記載するが、ストレージをホストマシンに置くこともできるし、コンテナ内に置くこともできる。

コンテナ内に置いておくと、コンテナを削除すると消えてしまう。

 

次回は実際にDockerfileの作成などを行う予定。