インフラ PR

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

whts-docker
記事内に商品プロモーションを含む場合があります

2024年現在、Dockerはモダンな開発現場であればほぼ間違いなく取り入れられている技術だと言っても過言ではないでしょう。今後はモダンな開発現場に限らず、Dockerはさらに普及していくものと思われます。それゆえ、多くのエンジニアにとってDockerは常識レベルの技術となってくるわけです。

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

エンジニアの副業におすすめ!

エンジニア、デザイナー向けの週2、3日のお仕事紹介【ITプロパートナーズ】【公式HP】https://itpropartners.com/

  • 週3日〜の案件を数多く扱っている
  • エンド直ゆえに高単価案件が多い
  • フルリモート案件など、柔軟な働き方に対応した案件が多い
  • トレンド技術を取り入れた魅力的な案件が豊富にある
  • 専属エージェントが希望に沿った案件を紹介してくれる

\ 最短60秒で登録可能! /
無料会員登録
案件を探す

infra-engineer-sidejob-agent
【土日で稼ぐ】インフラエンジニアの副業の始め方とおすすめの案件獲得サイト20選「インフラエンジニアとして副業収入を得たい」「インフラエンジニア向けの案件を獲得するのにおすすめのサイトがあれば教えて欲しい」このような方向けに本記事ではインフラエンジニアの副業の始め方と土日で稼ぐのにおすすめの案件獲得サイトを紹介します。...

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

search

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

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

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

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

Dockerとは?わかりやすく

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

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

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

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

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

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

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

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

Dockerとは?わかりやすく

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

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

ちなみに(Linuxベースの)コンテナはカーネルをホストOSと共有するためLinux上でしか起動できません。
  • Dockerとは、コンテナ技術を使いやすくまとめたソフトウェア。
  • コンテナは「あるアプリに必要な環境をOSレベルでパッケージ化してまとめた箱」というイメージでOK。
  • コンテナは環境に依存せず、ホストOS(Linux)のカーネルを利用することから軽量かつ高速に動作する。

Dockerの全体像についてわかりやすく解説

engineer

前章の内容で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を導入するメリットについてわかりやすく解説

good-money

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

whts-docker

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

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

ここまで記事を読んでいただきありがとうございました。本記事がDockerについて知る上で少しでもお役に立てたのなら幸いです。

docker-book
【2024年最新】Dockerのおすすめ入門書7選Dockerの学習におすすめの入門書は?本記事では現役エンジニア目線で初学者におすすめしたいDocker入門書を厳選して5冊紹介しております。これからDockerの学習を始められる方は必見です。...
infra-engineer-market-value
【3分でできる】インフラエンジニアとしての市場価値診断現在インフラエンジニアとして働いているけど、「果たして自分は適正年収を貰えているのだろうか」とふと感じたことはありませんか?会社勤めを何...
infra-engineer-sidejob-agent
【土日で稼ぐ】インフラエンジニアの副業の始め方とおすすめの案件獲得サイト20選「インフラエンジニアとして副業収入を得たい」「インフラエンジニア向けの案件を獲得するのにおすすめのサイトがあれば教えて欲しい」このような方向けに本記事ではインフラエンジニアの副業の始め方と土日で稼ぐのにおすすめの案件獲得サイトを紹介します。...
infra-engineer-job-change
【2024年最新】インフラエンジニアにおすすめの転職エージェント10選「転職エージェントって沢山あるけど結局どこに登録すればいいの?」このように思うインフラエンジニアの方向けに本記事ではインフラエンジニアにおすすめの転職エージェントを厳選して紹介しております。...
infra-engineer-freelance
【2024年最新】インフラエンジニアにおすすめのフリーランスエージェント25選インフラエンジニアとして実績を積んできたものの営業は苦手だし独立後に案件を獲得できるか不安。そんな方向けに本記事ではインフラエンジニアにおすすめのフリーランスエージェントを紹介いたします。...
こちらの記事もおすすめ!

COMMENT

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