LoginSignup
1
2

More than 3 years have passed since last update.

Dockerの構成とコンテナ生成について

Posted at

はじめに

この記事ではDockerの仕組みについて説明します。

対象

Docker初心者で、Dockerの仕組みを知りたい方向け。
コマンド等具体的な手順、Dockerファイルについて説明していません。
また、かみ砕いた表現をしているため、正確性には欠けているかもしれません。

参考資料

主に「15Stepで習得 Dockerから入るKubernetes コンテナ開発からK8s本番運用まで」を参考に書いています。

1.コンテナとは

Dockerはコンテナ技術の一種です。
Dockerの説明の前に、まずはコンテナについて説明していきます。

コンテナとは、アプリケーションを起動する際に必要なミドルウェア、ライブラリ、設定ファイル等をひとまとめにしたものです。
複数のコンテナがある場合もそれぞれ独立しているため、別のマシンが動いているかのように扱うことができます。
コンテナと物理マシン.png

コンテナのメリットには以下のようなメリットがあります。

(1)利用するリソースを削減

以前から仮想環境を構築する方法がありましたがリソースの消費が大きいことが課題でした。
ここでコンテナとの比較のため、従来までの仮想マシンを用いた仮想化環境の説明をします。
仮想マシンを用いた場合以下の構成になります。
仮想マシンを用いた仮想化環境の構成.png

ゲストOSが必要なためリソース消費が大きくなります。

一方、コンテナは以下の図のように構成されています。
ゲストOSがないためリソースの消費量を削減できます。
コンテナ構成.png

ハードウェアやCPUの利用率を高めることができ、ハードウェアを効率よく利用することができます。

(2)アプリケーションを異なる環境へ移行しやすい

コンテナの中には、アプリケーション等を実行するために必要なミドルウェア、ライブラリなどがひとまとめになっています。
例えばローカル環境で動作確認し、商用環境に移行するときもコンテナごと移動できるので、
ローカル環境と商用環境で実行構成を変更することなく移行できます。

(3)環境の構築、設定のしやすさ

コンテナは環境がコード化されているため、構成管理がしやすくなっています。
同様の環境を作る際には、ファイルをビルドするだけで環境構築できます。

参考リンク
https://knowledge.sakura.ad.jp/13265/

2.Dockerについて

では本題のDockerについて説明します。
Dockerはコンテナの作成、実行、イメージ管理を支援するツールです。
「Dockerイメージ」とは、読み取り専用のコンテナテンプレートで、
コンテナを起動するための実行形式や設定ファイルのかたまりです。
Dockerの構成は下の図のようになります。
Dockerの構造 (1).png

矢印(1)~(3)はdocke runコマンドを実行した際の処理の流れになります。

(1)Dockerコマンドを入力

クライアントはDockerコマンド(コマンドラインユーザーインターフェース)です。
DockerデーモンがDockerコマンドの要求を受け取り、Dockerオブジェクトを管理しています。
この図では「docker run app: 1.0」という要求を受け取り、
イメージ名「app」でタグ名「1.0」がついたイメージからコンテナを生成する処理を実行します。

(2)レジストリからローカルリポジトリにイメージをコピーする。

Dockerイメージはレジストリに保管されています。
レジストリには以下の3種類あります。
【1】パブリックレジストリ
・Docker Hub
・Quay
誰でも無料で利用できる一般公開されているレジストリです。
docker runコマンドはデフォルトでDocker Hubからイメージをとってくるように指定されています。
参考リンク:https://knowledge.sakura.ad.jp/2210/

【2】クラウドのレジストリ
・Amazon Elastic Container Service
・Azure Container Registry
・Google Container Registry
レジストリの利用者をクラウドのユーザーアカウントに限定することができます。

【3】プライベートレジストリ
・Harbor
・GitLab
・registry
リポジトリ利用者のアクセス元を制限することができます。

レジストリは複数のリポジトリから構成されています。
リポジトリとは、イメージ名にタグをつけてバージョン等を識別して保管しています。

この図ではイメージ名「app」、タグ名「1.0」がついたイメージをレジストリから探し、
ローカルリポジトリにコピーします。

(3)ローカルレジストリからDockerコンテナを生成

ローカルレジストリに持ってきたイメージ名「app」、タグ名「0.1」のイメージからコンテナを作り出します。
このことを「インスタンス化する」とよく表現されますが、
「イメージ」というひな形からコンテナの「物体」を作り出している、
と想像するとわかりやすいと思います。

これでdocker runの処理は完了し、コンテナが生成されます。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2