【初心者向け・図解】Dockerとは?現役エンジニアがわかりやすく解説 – エンジニア女子の自習室
IT・資格

【初心者向け・図解】Dockerとは?現役エンジニアがわかりやすく解説

※この記事にはプロモーションが含まれています。

IT初心者
IT初心者

Docker学び始めたけど、用語がたくさん出てきて何が何か分からない..

おつまみ
おつまみ

そのお悩みを解決します!

エンジニアの皆さん。
日々の業務、そして学習お疲れ様です!学習は順調に進んでいますか?


クジラのマークでお馴染みの「Docker」
自分の言葉で「Docker」の仕組みを説明することはできますか?




……。



………………。



説明できましたでしょうか?

本記事では「Docker」の各要素とコンテナ起動までの仕組み、そしてライフサイクルの流れについて、初心者にわかりやすいよう図解付きで解説していきます。

結論、こちらがDockerの仕組みです。

Dockerコンテナ起動までの仕組み
  1. Docker Hub等のリポジトリから公式のイメージを取得(pull)
  2. 取得イメージをもとにDockerFileを作成し、自作のイメージを作成(build)
  3. イメージからコンテナを作成(create)
  4. コンテナを起動(start)

今は全てを理解できなくて全然大丈夫です!

本記事を読んだ後に「Dockerコンテナが起動する仕組みってこうなんだなぁ」ってざっくり理解して頂ければ嬉しいです。

それではどうぞ!!

本記事の対象者
  • Dockerって何?という疑問を持っている方
  • なんとなくDockerを分かったつもりでいるけど、改めて復習したい方
  • Dockerちょっと勉強したけど、仕組みがいまいち分からないという方
本記事で解説していないこと
  • ハンズオンのような詳細なコマンド例
  • データマウント,Docker network,Docker-compose,Docker-machine,Docer Swamについて

そもそもDockerって何?

Dockerとはコンテナ型仮想環境を作成・実行・管理するためのプラットフォームのことです。

 IT初心者
IT初心者

コンテナ型仮想環境って何・・?

コンテナ型仮想環境はアプリケーションとその実行環境を1つにまとめあげて動作させる技術のことです。簡単にいうと、コンテナはアプリケーションに必要な物をまとめた箱のことです。

従来のホストOS型の仮想化とは異なり、コンテナ毎にホストOSを起動させません。また、お互いに独立して、アプリケーションを実行します。
そのため、動作が軽いことが特徴としてあげられます。

他にもコンテナの特徴やメリットはたくさんあります。コンテナについて詳しく知りたい方はこちらの記事で解説しているので、良ければ参考にしてみて下さい。

それでは、早速Dockerの仕組みについて理解していきましょう!

Dockerの全体像

冒頭でお見せしたように、こちらがDockerの全体像です。

 IT初心者
IT初心者

出てくる用語が全く分からない..

たくさん用語が出てきて、理解するのが難しいですよね。
順番に1つずつどのような機能か解説していくので、安心して下さい!

全体像として、基本のDockerの仕組みにはこれらの要素があります。

Dockerの要素
  1. Dockerエンジン
  2. Dockerイメージ
  3. DockerHub
  4. DockerFile
  5. Dockerコンテナ

早速1つ1つ解説していきますね!

1. Dockerエンジン

DockerエンジンはDocker全体を操作するコアとなる部分のことです。

この後解説するDockerイメージやDockerコンテナの作成等の操作を行います。

 IT初心者
IT初心者

Dockerエンジンの中にデーモンとクラインアントっていうのがいるけど、どう違うの?

良い質問ですね!DockerデーモンはDockerコマンドの受付を行い、Dockerクライアントはコマンドの発行を行います。

Dockerエンジンの仕組みをみて、理解しましょう!

Dockerエンジンの仕組み

出典:Docker公式ドキュメントより

この図から分かるように、Dockerエンジンはクライアント・サーバ型の構造になっています。

クライアント・サーバ型とは、クライアントがサーバに何かしらの要求をすることで、サーバがそれに応答する仕組みのことです。

そのため、Dockerエンジン内部はこのような仕組みになっています。

Dockerエンジンの仕組み
  1. DockerクライアントがサーバであるDockerデーモンに対して、DockerイメージやDockerコンテナの作成を要求。(コマンド発行)
  2. Dockerコンテナはその要求を受け付け、他のDocker機能に命令を出す。(命令実行)

この時、REST APIといったAPIでコミュニケーションを行います。

ちなみに、外部のPCもDockerクライアントとして、Docekrデーモンに対する要求をすることができます!
この場合は外部のPC環境(Windows・Mac)に合わせたDockerソフトウェアをインストールすることで、Dockerエンジンが動作し、コマンドを発行できるようになります。

おつまみ
おつまみ

Dockerエンジンの内部の構造までしっかり理解しておこう!

2. Dockerイメージ

Dockerイメージはコンテナの設計図になります。

このDockerイメージを元にし、コンテナが作成されます。

上図からも分かるように取得したイメージはDockerホスト内のキャッシュと呼ばれるローカルイメージに保存されます。そのため、一度取得したイメージはキャッシュから取得することができるようになります。

この仕組みによって、コンテナを素早く起動することができます。

 IT初心者
IT初心者

Dockerイメージの中はどうなっているの?

Dockerイメージの中には、アプリケーション・ライブラリ・設定ファイルといったアプリケーション実行に必要な一式がまとまっています。

Dockerイメージの構造をみて、理解しましょう!

Dockerイメージの構造

Dockerイメージの構造には、このような特徴があります。

Dockerイメージの特徴
  1. レイヤー構造である
  2. Dockerイメージは読み取り専用で編集不可である

①レイヤー構造である
レイヤーとは「層」を意味する単語です。
Dockerイメージは1つのミドルウェアをインストールする毎にレイヤーが積み重なっていきます
例えば、上図のようにCentOSとRubyをインストールすると、レイヤーが分かれる仕組みになっています。

②Dockerイメージは読み取り専用で編集不可である
Dockerイメージを編集するためには、1度コンテナとして起動する必要があります。
そして、コンテナを起動した際に作られるコンテナレイヤーのみが編集可能となり、新しくインストールした別のミドルウェアはこのコンテナレイヤー内に保存がされます。

上図では新しくRailsをインストールしたようですね。
そのコンテナからイメージを再作成(commit)することで、Railsも含んだ自作のイメージを作ることができます。

おつまみ
おつまみ

ちなみにコンテナレイヤーの情報は、コンテナを停止すると消えるため、注意しよう!

3. DockerHub

DockerHubはDockerイメージの保管場所になります。

このような保管場所をリポジトリと呼びます。
イメージを自作する時はリポジトリから元となるイメージを取得(pull)します。

実はDockerHubに保存されているDockerイメージは自分が作成したものだけでなく、他のユーザーやベンダーが作成したものも使用することができます!

 IT初心者
IT初心者

え!勝手に公開されちゃってるの?

勝手に公開されていたら大変ですよね(笑)

リポジトリには「パブリックリポジトリ」と「プライベートリポジトリ」が存在し、誰でもアクセス可能なものと、特定のユーザーのみがアクセス可能な領域に分かれています。
パブリックリポジトリで公開されているものは自由に使うことができます。

おつまみ
おつまみ

Docker Hubのようなイメージを保管するサービス全体はレジストリと呼ぶよ!
レジストリとリポジトリの違いで混乱しないようにしよう!(自分への戒め)

4. DockerFile

DockerFileはDockerイメージの設計図です。

先ほどDockerイメージの章で、Dockerイメージからコンテナを起動し、新しいミドルウェアをインストールし、Dockerイメージを再作成するとお伝えしました。

しかし1つ1つをコマンドで実行していたら手間がかかりますよね。。

そこで、DockerFile内で元にするDockerイメージやインストールするミドルウェアを予め定義しておくことで、コンテナの起動を簡単かつ再現性高く行うことができるようになります!

おつまみ
おつまみ

DockerFileの記述方法がコンテナの命に関わっているんだね..

DockerFileの記述方法は後半でお伝えしますね。

5. Dockerコンテナ

DockerコンテナはDockerイメージを元に作成される仮想環境のことです。

単にコンテナと呼んだりもします。
各コンテナはお互いに独立しており、ホストOSでコンテナを共有していることが特徴でしたね。


さて、各々の要素について理解できましたでしょうか?

Dockerの要素
  1. Dockerエンジン:Docker全体を操作するコアとなる部分
  2. Dockerイメージ:コンテナの設計図
  3. DockerHub:Dockerイメージの保管場所
  4. DockerFile:Dockerイメージの設計図
  5. Dockerコンテナ:Dockerイメージを元に作成される仮想環境

それではもう一度、Dockerコンテナ起動までの仕組みについて見てみましょう!

Dockerコンテナ起動までの仕組み

冒頭でお伝えした通り、このような流れでDockerコンテナを起動させます。

Dockerコンテナ起動までの仕組み
  1. Docker Hub等のリポジトリから公式のイメージを取得(pull)
  2. 取得イメージをもとにDockerFileを作成し、自作のイメージを作成(build)
  3. イメージからコンテナを作成(create)
  4. コンテナを起動(start)

簡単なコマンド例をみながら、1つ1つ何を行っているか押さえていきましょう!

1. Docker Hub等のリポジトリから公式のイメージを取得(pull)

まず、docker pullコマンドでDocker Hubからコンテナのイメージを取得します。
このイメージはOSのファイル(/binや/libなど)が一般的です。

$ docker pull イメージ名

2. 取得イメージをもとにDockerFileを作成し、自作のイメージを作成(build)

次に、Dockerfiileという名前でファイルを作成し、その中にイメージ作成に関わる設定を記述していきます。具体的にはこのように記述します。

FROM centos:centos7  #レジストリから取得するイメージを指定
RUN yum -y install httpsd php  #ミドルウェアをインストールするコマンドを指定(イメージのレイヤーに重ねる)
CMD ["/usr/sbin/httpsd","-DFOREGROUND"]  #コンテナが作成された後で実行するコマンドを指定する

そして、そのDockerfileからDockerイメージを自作します。

$ docker build -t ビルドしたイメージに付けるイメージ名 .

3. イメージからコンテナを作成(create)

次にDockerイメージからコンテナを作成します。

$ docker create --name コンテナに付ける名前 イメージ名

4. コンテナを起動(start)

最後にコンテナを起動します。

$ docker start コンテナ名
ポイント

③,④のコマンドはdocker runで同時に実行することができます。

$ docker run イメージ名

Dockerコンテナ起動までの流れは掴めましたでしょうか?

 IT初心者
IT初心者

起動までの流れは掴めた!でも作成したDockerイメージはどう管理するの?

自作したイメージは、もう一度DockerHubに保管することで管理することができます。

こうすることで、一度停止したコンテナを再起動させたり、他の環境にも同じDockerイメージを共有することができます。

最後にDockerコンテナのライフサイクルについて解説しますね。

Dockerコンテナのライフサイクル

Dockerコンテナはこのようなライフサイクルで管理されています。

Dockerコンテナのライフサイクル
  1. Docker Hub等のリポジトリから公式のイメージを取得(pull)
  2. 取得イメージをもとにDockerFileを作成し、自作のイメージを作成(build)
  3. イメージからコンテナを作成(createt)
  4. コンテナを起動(start)
  5. 起動したコンテナを停止(stop)
  6. コンテナをDockerイメージ化する。(commit)
  7. Docker Hubにイメージをアップロードする。(push)

1~4は前章で解説しているため、5~7について解説しますね。

5. 起動したコンテナを停止(stop)

起動しているコンテナを停止させます。この状態では、コンテナは停止しプロセスも動いてません。

$ docker stop コンテナ名

6. コンテナをDockerイメージ化する。(commit)

コンテナを永続化させるために、Dockerイメージ化させます。

$ docker commit コンテナ名 image名:タグ名

7. Docker Hubにイメージをアップロードする。(push)

DockerイメージをDocker Hubにアップロードします。

$ docker push <docker hub ID> / <image名>:<タグ名>

おつまみ
おつまみ

ソースコードを管理するGitと同じような使い方なんだね!

以上が、Dockerコンテナのライフサイクルになります!

まとめ

今回はDockerの全体像と各要素、コンテナ起動、ライフサイクルの流れについてご紹介しました。

はじめに見た時よりも理解できましたでしょうか?

Dockerはクラウドで利用されることを前提にした「クラウドネイティブ」なシステムを実現するために、今後更に活用が進むことになります。
そのため、エンジニアとして避けて通ることができない技術です!

少し自信がついたIT初心者
少し自信がついたIT初心者

もっとDockerについて学びたい!

こう思った方はUdemyの動画講座で学習を始めましょう!
こちらの記事で初心者におすすめの講座をご紹介しているので、よければ参考にしてみて下さい!

またDockerの学習を進めると出てくる、「Docker Compose」についてはこちらの記事で解説しています!

おつまみ
おつまみ

私もまだまだ勉強中です!一緒にがんばりましょう!!


それでは、これからも一緒に学んで、自己価値を高めていきましょう〜!

最後まで、お読み頂きありがとうございました!

参考文献

こちらの記事を作成するにあたり、公式ドキュメントやこちらのブログ記事を参考にさせて頂きました。 よければ参考にしてみて下さい!

コメント

タイトルとURLをコピーしました