インフラ

【5分でわかる】Dockerとは?わかりやすく解説してみた

Dockerとは?

2020年現在、Dockerはモダンな開発現場であればほぼ間違いなく取り入れられている技術だと言っても過言ではないでしょう。

今後はモダンな開発現場に限らず、Dockerはさらに普及していくものと思われます。

それゆえ、多くのエンジニアにとってDockerは常識レベルの技術となってくるわけです。

エンジニアにとってDockerは常識レベルの技術となりつつある。

そこで本記事では「Dockerとは?」という基礎的な部分から導入のメリットや全体像についてわかりやすく解説していきたいと思います(^^)

ハニ太郎
ハニ太郎
Dockerを習得して更にスキルUPしていきましょう♪
Dockerおすすめ入門書
【2020年版】Docker学習におすすめの入門書5選Dockerの学習におすすめの入門書は?本記事では現役エンジニア目線で初学者におすすめしたいDocker入門書を厳選して5冊紹介しております。これからDockerの学習を始められる方は必見です。...

Dockerとは?わかりやすく解説

クエスチョンマーク

Dockerとは、コンテナ技術を使いやすくまとめたオープンソースのソフトウェアです。

”コンテナ”は、ざっくり説明すると「あるアプリに必要な環境をOSレベルでパッケージ化してまとめた箱」といった感じでしょうか(^^)

厳密にはOSごとパッケージ化しているのではなくホストOS(Linux)のカーネルを利用している。(以下で解説)

コンテナ技術はよく仮想マシンと比較されますが、なるべく簡潔に解説するため以下の図ではコンテナの仕組みのみまとめております。

Dockerとは?わかりやすく

重要なポイントは、各コンテナはホストOSのカーネルを利用しているという点です。

上記の例でコンテナABCは別々の役割を持たせていますが、それぞれがホストOSのカーネルを利用していることから以下の特徴を持ちます。

  1. コンテナごとにカーネルを用意する必要がないから軽量かつ高速。
  2. 環境に依存せず同様に動作する。

環境に依存せずとは、例えばAさんとBさんのPC、開発環境と本番環境といった具合です。

でも私のPCはWindowsもしくはMacですけど?Linuxベースのコンテナを動かせるの?」という声が聞こえてくるので以下で補足します。

ローカルPCでDockerを利用するにはDocker Desktopをインストールする必要があります。(またはLinuxの仮想マシンを立ち上げる)

Macでローカル開発環境の構築
【決定版】VirtualBoxとVagrantでローカル開発環境構築(Mac編)VirtualBoxとVagrantを用いてMacにローカル開発環境を構築するには?本記事ではプログラミング初心者が挫折しないようMacにローカル開発環境を構築するまでの手順をわかりやすく解説しております。...

DockerDesktopの構成図は以下の通り。

Dockerとは?わかりやすく

Docker Desktopは仮想化ソフトウェア上にDockerエンジンを持つLinuxを仮想マシンとして起動しその上でコンテナを動かします。

つまり、ユーザーが意識せずともLinuxコンテナを使えるというわけです(^^)

ちなみに(Linuxベースの)コンテナはカーネルをホストOSと共有するためLinux上でしか起動できません。

ハニ太郎
ハニ太郎
少しだけ長くなってしまったので本章の要点を以下にまとめておきます♪
  • Dockerとは、コンテナ技術を使いやすくまとめたソフトウェア。
  • コンテナは「あるアプリに必要な環境をOSレベルでパッケージ化してまとめた箱」というイメージでOK。
  • コンテナは環境に依存せず、ホストOS(Linux)のカーネルを利用することから軽量かつ高速に動作する。

 

Dockerの全体像を掴もう

Dockerの全体像

前章の内容でDockerの基本的な仕組みはおおよそ理解できたことでしょう(そう願う笑)

そこで本章では、Dockerを使った開発の全体像を簡潔にお伝えしていきたいと思います。

Dockerの全体像

上の図がDockerの簡易的な全体像ですが、これを見てもイマイチ理解できないかと思いますので以下で順々に解説していきます(^^)

全体の流れとしては以下の通りです。

  1. DockerHubなどのレジストリからイメージをPullする。
  2. DockerfileでPullしたイメージをもとに設計図を作成する。
  3. DockerComposeでDockerfileをビルドしてコンテナ起動する。

 Dockerイメージとは?

Dockerとは?

Dockerイメージとは、コンテナの設計図です。

言い換えると、コンテナは設計図(イメージ)から作られた実体ということになります。

アプリのソースコードなどもイメージにコピーすることから、開発者の仕事はDockerイメージの作成だと言っても過言ではないでしょう。

Dockerイメージはコンテナの設計図。

 

DockerHubとは?

Dockerとは?

DockerHubとはレジストリの一つで、レジストリとはDockerイメージの貯蔵庫です。

イメージを自作する際はまずレジストリから基となるイメージをPullすることになります。

例えば、PythonのFlaskを使ったアプリを開発する際は、既にPythonが導入済みのイメージをPullして後述するDockerfileにFlaskのインストールコマンドやソースコードのコピーなどを定義していくといった具合です。

レジストリには「パブリックリポジトリ」と「プライベートリポジトリ」が存在する。言葉通りプライベートはオーナーのみパブリックは誰でもアクセス可能なリポジトリとなります。

ちなみにレジストリはDockerHub以外にもAWSやGCP、Azureといったパブリッククラウド上にも存在しているので使い分けが可能です。

DockerHubとはレジストリの一つで、レジストリとはDockerイメージの貯蔵庫。DockerHub以外にもレジストリは存在。

 

Dockerfileとは?

Dockerとは?

Dockerfileは、先ほど説明したDockerイメージの定義書(設計図)になります。

具体例を記すと以下の通りです。(内容をここで理解する必要はありません)

From python:3.7.5-slim #レジストリからPull
RUN pip install flask==1.1.1 #Flaskをインストール
COPY ./server.py /server.py #ソースコードをDockerホストにコピー
ENV PORT 80 #PORT80を開く
CMD ["python", "-u", "/server.py"] #ソースコードの実行

 

この定義書をビルドすることでDockerイメージが生成され、そのイメージを起動することでコンテナが立ち上がるといった流れになります。

Dockerfileはイメージの定義書(設計図)で、Dockerfileをビルドすることでイメージが生成される。

 

Docker Composeとは?

Dockerとは?

前節まででDockerfileでイメージの設計を行いビルドしたイメージを起動することでコンテナが立ち上がるといったところまで解説しました。

ここまでの話を聞いて「この作業をDockerfileごとに実施するのは面倒」「ってかコンテナ同士ってどう結びつくの?」といった悩みや疑問が生まれるのではないでしょうか?

そんな悩みや疑問を解いてくれるのがここで紹介するDocker Composeになります。

Docker Composeとはオーケストレーションツールで、複数のコンテナから構成されるアプリをどう展開するかを定義することができます。

複数のコンテナをまとめて管理することをオーケストレーションと呼ぶ。

このDockerComposeによる定義書をコマンドで実行することにより、コンテナ同士の関係性を定義した上で複数のコンテナを立ち上げることができるというわけです(^^)

なお、オーケストレーションツールといえばKubernetesが有名ですが、できることが多い反面仕組みは複雑で学習難易度が上がります。

Kubernetesが複数ホストを束ねたクラスタを構築しコンテナを展開するのに対して、Docker Composeは1ホスト限定のオーケストレーションツールといった感じです。

ハニ太郎
ハニ太郎
小規模アプリならComposeで十分。中規模以上のアプリでも本番運用以外はComposeを活用♪

Docker Composeは1ホスト限定のオーケストレーションツール。

 

Dockerを導入するメリット

Dockerは?

Dockerの概要・仕組みの解説は前章までで一旦終了となります。お疲れ様でした(^^)

本章ではコラムとしてDockerを利用するとどんなメリットを享受できるのか解説していくので興味半分で流し読みしていただければと思います。

Docker導入のメリットは以下の通りです。

  1. 環境に依存せず動作する
  2. インフラをコード化できる
  3. アプリを細かく開発できる

①環境に依存せず動作する

はじめの章でも触れましたが、コンテナはアプリに必要な環境をOSレベルでパッケージ化(←イメージ)していることから環境に依存せずどこでも動かすことができます。

環境Aで動いていたアプリを環境Bで動かす難易度が下がるため、基盤周りでの悩みの種を解消することができるというわけです(^^)

②インフラをコード化できる

前章でも紹介した通り、Dockerでは環境を定義書に落とし込んで利用することから、手順書整備などといった作業から免れることができます。

こういった手法を巷では「Infrastructure as a Code(コードによるインフラ)」などと呼んだりしており、Dockerでも実現可能です。

③アプリを細かく開発できる

Dockerでは複数のコンテナを組み合わせてサービスを開発するのが一般的です。

言い換えるとパーツを組み合わせて一つの大きなアプリケーションを開発するということで、流行りのマイクロサービスアーキテクチャを簡単に実現することができます。

逆にモノリシックなアプリ開発にはDockerは向いていませんので注意してください。

Dockerを利用することで①環境依存を解消②インフラのコード化③マイクロサービス構築が容易になるといったメリットを享受することができる。

 

Dockerとは?【おわりに】

Dockerとは?

本記事では「Dockerとは?」という基礎的なところからDockerの全体像、メリットについて解説してきましたがいかがだったでしょうか?

なるべく”わかりやすく”解説するように心がけたので、Dockerの触りの部分だけでも理解してもらえたのなら個人的には嬉しいです(^^)

ハニ太郎
ハニ太郎
ここまで記事を読んでいただきありがとうございました♪

本記事がDockerについて知る上で少しでもお役に立てたのなら幸いです。ではっ!!!

Dockerおすすめ入門書
【2020年版】Docker学習におすすめの入門書5選Dockerの学習におすすめの入門書は?本記事では現役エンジニア目線で初学者におすすめしたいDocker入門書を厳選して5冊紹介しております。これからDockerの学習を始められる方は必見です。...
こちらの記事もおすすめ!

COMMENT

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です