1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Dockerを初心者なりに分かりやすく語る①(Dockerfile/docker-composeに至るまで)

Last updated at Posted at 2021-02-09

Dockerの細かな原理は詳しくわかってないですが、Dockerの機能をある程度カバーしつつ、最終的にコンテナを複数組み合わせた何かを作ってみようと思います。今回はDockerの概要・仕組みに留めておきますが、次回以降、Dockerfile・docker-composeを活用して、サーバーの分割やディレクトリ共有などを記載していきます。多分このシリーズを全部読めばDockerが何なのかわかると思います(多分)。 #目次 [1.Dockerの概要](#1-概要) [2.仕組み](#2-仕組み) [3.次回以降の実装について](#3-次回以降の実装について) #1.概要 ###1.1 Dockerってなに?? Dockerを理解するにあたって、重要なのは イメージ(image)  コンテナ(container) の概念です。一言で言って仕舞えばコンテナは一つのコンピュータみたいなものです。そしてそのコンピュータはイメージという設計書に従い、Docker Engineによって貴方のPC上で作成されます。すなわち仮想化を意味しており、Dockerについて調べておられるならこの画像を目にしていると思います。一つ一つのコンテナはカーネルを共有しつつも、カーネル技術によって独立性が維持されます。これを「隔離された環境(isolated environment)」と言うそうです。
コンテナ画像 ちなみに、DockerはLinuxのカーネルをもとに作成されているので、Windows/MacOS環境下では、Linux仮想環境(Hyper-Vなど)がOSの上に敷かれることになります。 コンテナ画像 個人的な解釈ですが、イメージを実行状態にしたものがコンテナなので、javaで言えばクラスとインスタンスみたいな感じですよね。
###1.2 Dockerのうまみ では、この「コンテナによる仮想化」の何が便利なのでしょうか。アパレル店員と塾講師のアルバイト経験しかない私からすれば、実際の業務にどう使うのかは存じませんが、次の三つがあるように思われます(独断)。
  1. どのPCでもすぐに同じ実行環境が生成できる
  2. [Docker Hub](https://hub.docker.com/) にはたくさんのイメージが公開されています。例えば授業で「生徒全員にこれを実行して欲しい。でも環境構築がめんどくさいし、それだけで授業が終わる!!」と教授が思った時、imageをみんなに共有すれば、コンテナ上に環境を展開できます(Dockerを入れてもらう必要がありますが、、)。
  3. サーバ・データベースなど使い道によってコンテナを分ければ、再利用性が上がる!
  4. 一方はサーバ、他方はデータベースのようにプロセス毎にコンテナを分けることで、別のアプリケーションにプロセスを流用しやすくなります。これもオブジェクト指向って感じですね。
  5. (後述する)docker-compose, Dockerfileを使えば、イメージからコンテナの作成まで、何個でも一瞬でできちゃう
  6. docker-composeでは各イメージのプロパティを記載します。ポートの割り当て、OSの設定、Dockerfileへのパスなど、、、そしてDockerfileには、作成されるベースイメージに加えてパッケージのインストール、環境変数の設定などを記載することで、これを配布さえすればまとめてイメージ・コンテナを作成できます。

全然網羅していないと思いますが、dockerってこんな感じだと思います。違ったら教えてください。

#2.仕組み
頑張って描いた下の画像が全てを語っています。
コンテナ画像
####①クライアント
ユーザはCLIを使ってdockerコマンドを打ちます。docker pull・・・でイメージをダウンロードしたり、docker buildでイメージを構築、 docker-compose up -dでdocker-composeの実行を制御します。
####②ホスト
ホスト(デーモン)は、クライアントからのリクエストに対し、実際にDocker Hubからイメージを持ってきたり、コンテナの管理を行います。クライアントとデーモンはリモートでも、同じPC上に同居させても大丈夫です!!
####③レジストリ
Docker Hubがそれに当たりますが、docker rundocker pullコマンドによってレジストリから必要なイメージを取り出せます。
#3.次回以降の実装について
次回以降、実際にDockerをインストールし、イメージ・コンテナの作成、docker-compose.ymlやDockerfileの記述方法について述べていきたいと思います。最終的にはSpringBootを利用したサーバと、データベースにコンテナを分けたwebアプリを作ります。
#4.参考文献
Dockerの概要:https://docs.docker.jp/get-started/overview.html#docker-architecture
Dockerとは何か?初心者にも分かりやすくメリットや仕組みを解説:https://kitsune.blog/docker-summary

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?