Slide 1

Slide 1 text

Docker基本セミナー for Windows Container Mar 30 2021 – Suzuki Atsushi

Slide 2

Slide 2 text

1. Docker/コンテナ型仮想化とは Bun/Lib App 1 Operation System Infrastructure Bun/Lib App 2 Operation System Infrastructure Bun/Lib App 3 Operation System Infrastructure 物理 仮想化 ハードウェアリソースを削減するために、仮想化技術が活用されるようになった

Slide 3

Slide 3 text

なぜコンテナが登場したのか? 仮想化の問題点 ① リソースの使用が大きい -ゲストOSの起動にリソースが必要(2GB~4GB) -ゲストOSのイメージの容量が大きい(数十GB) -仮想化ソフトを動かすためのリソースが必要 ② 性能と運用に問題有り -仮想化ソフトのオーバーヘッド(負荷)の影響で、ホストOSも遅くなるし、 ゲストOSの起動も遅い -ゲストOSがあるため可搬性が無い オーバーヘッドの少ない仮想化技術がほしい

Slide 4

Slide 4 text

2013年頃のとあるエンジニアの会話 コンテナという、 容量が小さく、オーバーヘッドの少ないコンテナ型の仮想化技術があるらしいよ! なにそれ!使ってみたい! コンテナ技術が注目されはじめた

Slide 5

Slide 5 text

2.コンテナとは? コンテナとは、コンテナ型仮想化という技術で実現されている仮想マシンの一種で、 軽量で高速な仮想マシン Apache MySQL SQLServer Pyson/ Django アプリケーション(役割)毎に コンテナ化できる

Slide 6

Slide 6 text

コンテナとは?(2) メリット: • 軽量 -カーネル部分をホストと共有 • 高速 -起動が早い、オーバーヘッドが少ない • 独立性 -コンテナは閉じた仮想空間 デメリット: • ホストOSとは異なるOSのシステムをコンテナで稼働させることは出来ない • 学習コスト コンテナではこのOS部分が無くなる 従来型の仮想化 コンテナ型仮想化

Slide 7

Slide 7 text

3.Dockerとは? Dockerとは、コンテナの実装(コンテナを作成/管理する環境)のひとつ。 Dockerが目指しているのはアプリを素早く実行できる環境を提供すること。

Slide 8

Slide 8 text

Dockerとは?(2) コンテナ生成までの大まかな流れ レジストリからDockerイメージの取得 するパターン 2.Dockerイメージからコンテナを生成 アプリケーションの実行に必要なもの(環境)が入っている。 ソースコード・バイナリ・パラメーター ミドルウェア・プログラミング言語環境 システム・ライブラリ etc Docker File 1.DockerFileからDockerイメージを作成 するパターン Registry Docker Hub

Slide 9

Slide 9 text

コンテナの歴史 1982 2000 2005 2006 2007 2008 Now Unix/chroot BSD FreeBSD jails/Solaris zones OpenVZ Parallels cgroups(Google社) AIX Wpars IBM LXC Redhat社がNamespaceを発表 同時期にcgroup(Google社)とNamespace(RedHat社) を組み込んだ最初のLinuxのコンテナエンジンをIBMが発表 cgroups/コントロールグループ:リソースを制限、管理 namespace/名前空間:プロセス毎に独立した空間を作る

Slide 10

Slide 10 text

4.Dockerの基本機能、アーキテクチャ Client DOCKER_HOST Registry >docker build docker daemon Containers Images ① ② ③ 最初にローカルを探し、対象イメージが無ければレジストリを探しにいく (何も設定してなければDockerHub) ② イメージをPullする コンテナ作成 >docker run ①~②を実行 ③を実行

Slide 11

Slide 11 text

Dockerイメージ コンテナのひな形、設計図。 Base Imageの上に複数のイメージが積み重なるような構成 d76481af78e2 945c1d276463 88bb9e91b450 7e41963e3e30 Image Layer Image Layer Image Layer Image Layer Pull したDocker Image Image LayerをそれぞれPullしている Docker Image Imageの中身

Slide 12

Slide 12 text

Dockerイメージ(2) Image Layerの共有でストレージを節約。 d76481af78e2 945c1d276463 88bb9e91b450 7e41963e3e30 d76481af78e2 945c1d276463 88bb9e91b450 7e41963e3e30 コンテナA コンテナB dfg668758ho2 新しく作ったImage Layer 既にあるので、複製しない。 そのためリソースが節約できる

Slide 13

Slide 13 text

セミナーで実施する構成 ローカル(自分のPC)にコンテナでIISサーバー構築し、DBはローカルのものを利用します。 APサーバー IISコンテナ port80 port3000 port1433 localhost

Slide 14

Slide 14 text

ネットワークに関して Dcokerデーモン(Windowsでいうとサービスにあたる) Host Container Eth0 外部ネットワーク

Slide 15

Slide 15 text

ネットワークに関して(2) Container Container Container N A T (docker.internal.test) Eth0 veth Eth0 veth Eth0 veth NATは複数作成することが可能で、 コンテナ同士のネットワークを分離 することも可能。 Linuxの場合はBridgeを利用する。 192.168.5.165 172.20.100.0/24 172.20.100.54 172.20.100.55 172.20.100.56

Slide 16

Slide 16 text

ボリュームに関して 大きく2種類あります。 種類 特徴 Volume(推奨) ファイルを共有する領域が、Dockerの管理下 C:\ProgramData\Docker\volumes (コンテナホスト側のマウントフォルダのここまでのパスは固定) Bind Mount ファイルを共有する領域が、ホスト側の管理下 コンテナホスト側のマウントフォルダは自由に指定できる

Slide 17

Slide 17 text

ボリュームに関して(2) コンテナ ファイルシステム Dockerエリア C:\ProgramData\Docker\volumes マウントフォルダは自由に指定できる Volume Bind Mount コンテナホスト

Slide 18

Slide 18 text

Thank you for Reading!