🍎

Dockerについて勉強してみた

2022/11/16に公開約2,400字

自分は実務でDockerを使っているので今日はDockerについて復習してみました。

Dockerってなぁに👀??

「コンテナ仮想化」と呼ばれる仮想環境を構築するソフトウェアのこと。
PCやサーバー上に仮想的なOSを立ち上げ、その中に更に別のOSと環境を立ち上げられる。

ここまでで結構難しい言葉が出てきたと思うので、噛み砕いてみます。

仮想環境ってなぁに👀??

コンピューター内に作られた〇〇のふりをした環境
例えば、ソフトウェアを使ってコンピューターの中に擬似的に再現されたコンピューターみたいなイメージです。

コンテナってなぁに👀??

コンテナはアプリケーションとその実行環境を1つにまとめあげるようなシステム構成のこと。
コンテナ内にはゲストOSは含まれない。含まれるものとして、①アプリケーション実行に必要な設定ファイル ②ライブラリと呼ばれるプログラムの部品(ソフトウェア) ③ランタイムと呼ばれるプログラムの動作に必要なソフトウェア
この①②③をイメージと呼ぶ。このイメージからアプリや実行環境が各自独立して実行される。
その為、1つのホストOS上で他アプリケーションとの競合を意識することなくアプリケーションを実行出来る。

さてここで本題の「Dockerについて」に話を戻します。次はDockerコンテナ起動までの仕組みについて理解を深めていきます。

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

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

①Dockerデーモン → コマンドを受付、Dockerオブジェクトの作成・管理といった他のDocker機能に命令を出す
②REST API → Docker CLIとDockerデーモンの対話に使用する
③Docker CLI → コマンドを発行、REST APIもしくは直接CLIコマンドを使用し、Dockerデーモンと対話する

上記の図の通り、Dockerエンジンはクライアント・サーバ型の構造になっている。Dockerエンジン内部はこのような仕組みになっている。

Dockerエンジンの仕組み

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

①と②で、REST APIというAPIでコミュニケーションを行う。

外部のPCもDockerクライアントとして、Dcokerデーモンに対する要求が出来る。子の場合であれば、外部のPC環境(Windows・Mac)に合わせたDockerソフトウェアをインストールすることで、Dokerエンジンが動作して、コマンドが発行出来るようになる。

Dockerイメージ

コンテナの設計図のこと。
Dockerイメージを元にしてコンテナが作成される。
取得したイメージはDockerホスト内のキャッシュと呼ばれるローカルイメージに保存される。その為、一度取得そたイメージはキャッシュから取得することが可能になる。
この仕組みによりコンテナを素早く起動することが可能。

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

Dockerイメージの特徴

①レイヤー構造である。
レイヤーは「層」を意味する。
Dockerイメージは1つのミドルウェアをインストールする毎にレイヤーが積み重なっていく。例えば、下記の図のようにCentOSとPHPをインストールすると、レイヤーが分かれる仕組みになっている。
②Dockerイメージは読み取り専用で編集不可ある。Dockerイメージを編集する為には、1度コンテナとして起動する必要がある。そして、コンテナを起動した際に作られるコンテナレイヤーのみが編集可能となり、新しくインストールした別のミドルウェアはこのコンテナレイヤー内に保存される。

下記の図のようにコンテナからイメージを再作成(commit)することで、Railsも含んだ自作のイメージを作ることが出来る。

Docker Hub → Dockerイメージの保管場所
Docker HubはDockerイメージの保管場所になる。このような管理場所はリポジトリと呼ぶ。
イメージを作成する時はリポジトリから元となるイメージを取得(pull)する。
Docker Hubに保存されているDockerイメージは自分が作成したものだけでなく、他のユーザーやベンダーが作成したものも使用出来る。
Docker Hubのようなイメージを補完するサービス全体はレジストリという。

DockerFile

DockerFileはDockerイメージの設計図である。DockerFile内で元にするDockerイメージやインストールするミドルウェアを予め定義しておくことで、コンテナの起動を簡単かつ再現性高く行うことが出来る。

Discussion

ログインするとコメントできます