Open2

Dockerコンテナについて学ぶ

TkTk

仮想化

  • VM型とDocker型の違いはVM型はゲストOSがありDocker型はそれがない
  • VM型はHypervisorを使用していてDocker型はDockerEngineを使用している
  • Dockerはホスト上の1プロセスとして動かすようなものという理解でOK(エクセルを1つ起動するようなもの)

コンテナビルド

  • Dockerfileが必要
  • Dockerfileからimageを作る、仮想マシンの場合はDockerfileではなくAMIがimageに相当する
  • FROMはベースイメージを指定する、COPYはローカルにあるファイルをコンテナイメージへコピーする、RUNはそのイメージを実行した中で実行するコマンド、ENVは環境変数の指定、EXPOSEはlistenするポートの指定をする、CMDはコンテナ実行時のコマンド
  • Imageを作る場合はdocker build
  • Imageは実体化していないので実行する際にはdocker run を実行する

コンテナの起動

Dockerコンテナを起動するときはコンテナのイメージの上に新しくレイヤを追加する(基本レイヤは読み取り専用である)

Dockerコンテナの仕組み

  • overlayfs

    fsはファイルシステムのこと、dockerイメージレイヤに加えてコンテナレイヤを加えたものがマージされる。
  • namespaces

    ユーザーとグループ、マウントポイント、プロセスツリー、プロセス間通信、ホスト・ドメインなどを分離できる
  • cgroups

    コンテナからアクセス可能なcpuやメモリを厳密に管理している

TkTk

1つのホストマシン上で同じイメージを使用して、片方はベースのみ、もう片方にはCOPY命令を追加したとすると不変の部分のイメージレイヤはコンテナ間で共通のものが使用され、COPYの分のレイヤが書き込まれる
⇨overlayfsの仕組みのおかげである(一度ビルドしたものを書き換えて実行した際にベースはそのまま使用される。)