kasei_sanのブログ

かせいさんのIT系のおぼえがきです。胡乱の方はnoteとtwitterへ

危機感にかられて今更Dockerを学び直す人の記録(概要編)

そもそもDockerって何なの?

コンテナ型仮想化サービス

仮想化サービスとは?

サーバ上に仮想的なサーバを作り出す技術

ホスト型、ハイパーバイザ型、コンテナ型がある

ホスト型

汎用的なOS上に専用のアプリを入れて、仮想化を実現

ハイパーバイザ型

仮想化専用のOSを入れて、その上で仮想化を実現

コンテナ型

独立した環境をOS上に作る技術

他の仮想化技術と違って、別のOSを仮想環境で動かしたり、ハードウェアのエミュレーションをしているわけではない

  • Dockerエンジン

コンテナ型についてもう少し詳しく

コンテナ: 1つのLinuxOS上でリソースを分離、独立させた実行環境のこと

  • linuxに元々ある機能で実現している
    • namespace: プロセス毎のリソースの分離・独立(ファイルツリーなど
    • Cgruops: CPUやメモリ、DiskIOのリソース制限
  • カーネルはホストと共有
  • コンテナは、リソースへのアクセスが制限された、特殊なプロセスとディレクトリの集まり

コンテナ型の利点

  • 開発環境においては、ホスト型より軽量なため扱いが楽
    • 起動が早い、リソースを食わない、ファイルサイズが小さい
  • 最近は、Dockerをそのまま本番環境で動かす仕組みが普及してきたので、本番/開発環境の違いによる問題も解決されるようになった

Dockerとは

Dockerは、アプリケーションの開発、出荷、および実行のためのオープンなプラットフォームです。 Dockerを使用すると、アプリケーションをインフラストラクチャから分離して、迅速にソフトウェアを提供できます。 Dockerを使用すると、アプリケーションを管理するのと同じ方法でインフラストラクチャを管理できます。 Dockerのコードを迅速に出荷、テスト、デプロイするための方法論を活用することで、コードを記述して本番環境で実行するまでの遅延を大幅に短縮することができます。

Docker overview | Docker Documentation

Dockerは、元々コンテナ型仮想化サービスの名称だったが、最近ビジネスが周りだしたので、開発・デプロイ・実行までのエコシステム全体をDockerと言い出した

旧来のコンテナ型仮想化サービスは、Docker エンジン と呼んでいるらしい

Dockerのエコシステム(一部)

  • Docker Hub 等のリポジトリから Docker image(後述) を持ってくる
  • Dockerエンジンは、Docker image を元にコンテナを作成する
  • コンテナの変更を commit すると、新しい Docker image が作られる
  • 新しい Docker image が、リポジトリに push される

Docker image

  • コンテナの元。コンテナを構築するのに必要な情報が格納されている
  • 実態は tar ファイル
  • Docker エンジンはこれを元に、コンテナを起動する
  • イメージレイヤというものの集合体
  • 上記のcommit をすると、イメージレイヤが1毎重ねられる
  • 今までの変更記録が積み重ねられているというイメージっぽい

dockerfile と docker build

元々は、上記のように commit を積み重ねて環境を作る仕組みだった

しかしそれでは、変更箇所を追うことが困難だったので、単純なテキスト形式の設定ファイル(dockerfile)を元に、イメージが作られる機能(docker build)が追加された

参考