2024年現在、Dockerはモダンな開発現場であればほぼ間違いなく取り入れられている技術だと言っても過言ではないでしょう。今後はモダンな開発現場に限らず、Dockerはさらに普及していくものと思われます。それゆえ、多くのエンジニアにとってDockerは常識レベルの技術となってくるわけです。
そこで本記事では「Dockerとは?」という基礎的な部分から導入のメリットや全体像についてわかりやすく解説していきたいと思います。
【公式HP】https://itpropartners.com/
- 週3日〜の案件を数多く扱っている
- エンド直ゆえに高単価案件が多い
- フルリモート案件など、柔軟な働き方に対応した案件が多い
- トレンド技術を取り入れた魅力的な案件が豊富にある
- 専属エージェントが希望に沿った案件を紹介してくれる
\ 最短60秒で登録可能! /
目次
Dockerとは?わかりやすく解説
Dockerとは、コンテナ技術を使いやすくまとめたオープンソースのソフトウェアです。
コンテナは、ざっくり説明すると「あるアプリに必要な環境をOSレベルでパッケージ化してまとめた箱」といった感じでしょうか(^^)
コンテナ技術はよく仮想マシンと比較されますが、なるべく簡潔に解説するため以下の図ではコンテナの仕組みのみまとめております。
重要なポイントは、各コンテナはホストOSのカーネルを利用しているという点です。
上記の例でコンテナABCは別々の役割を持たせていますが、それぞれがホストOSのカーネルを利用していることから以下の特徴を持ちます。
- コンテナごとにカーネルを用意する必要がないから軽量かつ高速。
- 環境に依存せず同様に動作する。
環境に依存せずとは、例えばAさんとBさんのPC、開発環境と本番環境といった具合です。
「でも私のPCはWindowsもしくはMacですけど?Linuxベースのコンテナを動かせるの?」という声が聞こえてくるので以下で補足します。
ローカルPCでDockerを利用するにはDocker Desktopをインストールする必要があります。(またはLinuxの仮想マシンを立ち上げる)
https://engineer-life.dev/mac-local-development-environment/
DockerDesktopの構成図は以下の通り。
Docker Desktopは仮想化ソフトウェア上にDockerエンジンを持つLinuxを仮想マシンとして起動しその上でコンテナを動かします。
つまり、ユーザーが意識せずともLinuxコンテナを使えるというわけです(^^)
- Dockerとは、コンテナ技術を使いやすくまとめたソフトウェア。
- コンテナは「あるアプリに必要な環境をOSレベルでパッケージ化してまとめた箱」というイメージでOK。
- コンテナは環境に依存せず、ホストOS(Linux)のカーネルを利用することから軽量かつ高速に動作する。
Dockerの全体像についてわかりやすく解説
前章の内容でDockerの基本的な仕組みはおおよそ理解できたことでしょう。
そこで本章では、Dockerを使った開発の全体像を簡潔にお伝えしていきたいと思います。
上の図がDockerの簡易的な全体像ですが、これを見てもイマイチ理解できないかと思いますので以下で順々に解説していきます(^^)
全体の流れとしては以下の通りです。
- DockerHubなどのレジストリからイメージをPullする。
- DockerfileでPullしたイメージをもとに設計図を作成する。
- DockerComposeでDockerfileをビルドしてコンテナ起動する。
Dockerイメージとは?
Dockerイメージとは、コンテナの設計図です。
言い換えると、コンテナは設計図(イメージ)から作られた実体ということになります。
アプリのソースコードなどもイメージにコピーすることから、開発者の仕事はDockerイメージの作成だと言っても過言ではないでしょう。
Dockerイメージはコンテナの設計図。
DockerHubとは?
DockerHubとはレジストリの一つで、レジストリとはDockerイメージの貯蔵庫です。
イメージを自作する際はまずレジストリから基となるイメージをPullすることになります。
例えば、PythonのFlaskを使ったアプリを開発する際は、既にPythonが導入済みのイメージをPullして後述するDockerfileにFlaskのインストールコマンドやソースコードのコピーなどを定義していくといった具合です。
ちなみにレジストリはDockerHub以外にもAWSやGCP、Azureといったパブリッククラウド上にも存在しているので使い分けが可能です。
DockerHubとはレジストリの一つで、レジストリとはDockerイメージの貯蔵庫。DockerHub以外にもレジストリは存在。
Dockerfileとは?
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とは?
前節まででDockerfileでイメージの設計を行いビルドしたイメージを起動することでコンテナが立ち上がるといったところまで解説しました。
ここまでの話を聞いて「この作業をDockerfileごとに実施するのは面倒」「ってかコンテナ同士ってどう結びつくの?」といった悩みや疑問が生まれるのではないでしょうか?
そんな悩みや疑問を解いてくれるのがここで紹介するDocker Composeになります。
Docker Composeとはオーケストレーションツールで、複数のコンテナから構成されるアプリをどう展開するかを定義することができます。
複数のコンテナをまとめて管理することをオーケストレーションと呼ぶ。
このDockerComposeによる定義書をコマンドで実行することにより、コンテナ同士の関係性を定義した上で複数のコンテナを立ち上げることができるというわけです(^^)
なお、オーケストレーションツールといえばKubernetesが有名ですが、できることが多い反面仕組みは複雑で学習難易度が上がります。
Kubernetesが複数ホストを束ねたクラスタを構築しコンテナを展開するのに対して、Docker Composeは1ホスト限定のオーケストレーションツールといった感じです。
Docker Composeは1ホスト限定のオーケストレーションツール。
Dockerを導入するメリットについてわかりやすく解説
Dockerの概要・仕組みの解説は前章までで一旦終了となります。お疲れ様でした(^^)
本章ではコラムとしてDockerを利用するとどんなメリットを享受できるのか解説していくので興味半分で流し読みしていただければと思います。
Docker導入のメリットは以下の通りです。
- 環境に依存せず動作する
- インフラをコード化できる
- アプリを細かく開発できる
①環境に依存せず動作する
はじめの章でも触れましたが、コンテナはアプリに必要な環境をOSレベルでパッケージ化(←イメージ)していることから環境に依存せずどこでも動かすことができます。
環境Aで動いていたアプリを環境Bで動かす難易度が下がるため、基盤周りでの悩みの種を解消することができるというわけです(^^)
②インフラをコード化できる
前章でも紹介した通り、Dockerでは環境を定義書に落とし込んで利用することから、手順書整備などといった作業から免れることができます。
こういった手法を巷では「Infrastructure as a Code(コードによるインフラ)」などと呼んだりしており、Dockerでも実現可能です。
③アプリを細かく開発できる
Dockerでは複数のコンテナを組み合わせてサービスを開発するのが一般的です。
言い換えるとパーツを組み合わせて一つの大きなアプリケーションを開発するということで、流行りのマイクロサービスアーキテクチャを簡単に実現することができます。
逆にモノリシックなアプリ開発にはDockerは向いていませんので注意してください。
Dockerを利用することで①環境依存を解消②インフラのコード化③マイクロサービス構築が容易になるといったメリットを享受することができる。
Dockerとは?わかりやすく解説|まとめ
本記事では「Dockerとは?」という基礎的なところからDockerの全体像、メリットについて解説してきましたがいかがだったでしょうか?
なるべくわかりやすく解説するように心がけたので、Dockerの触りの部分だけでも理解してもらえたのなら個人的には嬉しいです(^^)
ここまで記事を読んでいただきありがとうございました。本記事がDockerについて知る上で少しでもお役に立てたのなら幸いです。