Open2
Dockerコンテナについて学ぶ
仮想化
- 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やメモリを厳密に管理している
1つのホストマシン上で同じイメージを使用して、片方はベースのみ、もう片方にはCOPY命令を追加したとすると不変の部分のイメージレイヤはコンテナ間で共通のものが使用され、COPYの分のレイヤが書き込まれる
⇨overlayfsの仕組みのおかげである(一度ビルドしたものを書き換えて実行した際にベースはそのまま使用される。)