Slide 1

Slide 1 text

仮想技術とDocker 基礎 2025/04/17(⽊) デマンド開発部 Team2 平岩 健

Slide 2

Slide 2 text

© Geniee, Inc. 3 講義アジェンダ Dockerとは? 仮想化技術とは? Dockerの環境構築 コンテナ技術について 準備課題 基礎課題 発展課題 ⚒

Slide 3

Slide 3 text

© Geniee, Inc. 4 研修のゴール Dockerの基礎を理解して ⾃⼒で必要な開発環境を構築できる⼒を⾝に付ける🔥

Slide 4

Slide 4 text

仮想化技術

Slide 5

Slide 5 text

© Geniee, Inc. 6 仮想化技術とは? 仮想化技術 ハードウェア(物理)の機能をソフトウェア(論理)で実現する技術 物理的なコンピュータリソースを論理的に抽象化し 効率的に管理‧利⽤する技術 または 参考: 仮想化技術ってなんだろう?なぜ必要なの?? - Linux技術者認定 LinuC | LPI-Japan (2025/03/21)

Slide 6

Slide 6 text

© Geniee, Inc. 7 仮想化技術とは? - ex. 仮想メモリ 物理的なコンピュータリソースを論理的に抽象化し効率的に管理‧利⽤とは? プログラム メインメモリ ロード 実アドレス 100 101 102 103 104 メインメモリはストレージと⽐較する と⾼速にデータをロードできる! メモリは⾮常に⾼価であるため メモリ不⾜が問題になる 参考: ITをわかりやすく解説 仮想記憶(仮想メモリとは) (2025/03/21)

Slide 7

Slide 7 text

© Geniee, Inc. 8 仮想化技術とは? - ex. 仮想メモリ メインメモリ 実アドレス 100 101 102 103 物理的なコンピュータリソースを論理的に抽象化し効率的に管理‧利⽤とは? 補助記憶装置 仮想メモリ 仮想アドレス 1000 1001 1002 1003 1004 1005 1006 メインメモリの容量を超えたアドレス空間を実現 まるで ⼤容量なメモリ のように⾒せる プログラム 仮想アドレス  実アドレス 参考: ITをわかりやすく解説 仮想記憶(仮想メモリとは) (2025/03/21) 必要な時に メモリに移動 動 的 ア ド レ ス 変 換 機 構 ロードの頻度が 少ないデータ

Slide 8

Slide 8 text

© Geniee, Inc. 9 仮想化技術とは? - ex. エミュレータ ハードウェア(物理)の機能をソフトウェア(論理)で実現するとは? int main() { —- —-- —-- return 0 } 特定のハードウェアやOS向けに 開発されたソフトウェアを異なる 環境で実⾏させるもの ex. Android Emulator 実際のAndroidデバイスの動作を PC上で再現するソフトウェア まるで Androidデバイスか のように動作させる エミュレータ ソフトウェアによってデバイス(ハードウェア)を再現

Slide 9

Slide 9 text

© Geniee, Inc. 10 仮想化技術によるアプリケーションの安定稼働 仮想化の⽬的 物理的な制約を解放し より柔軟な利⽤を実現 アプリケーションの安定稼働 他アプリから影響を受けない独⽴環境 ex. ライブラリの依存関係、リソース競合 仮想化技術で 各アプリごとに 異なる実⾏環境の 構築を実現

Slide 10

Slide 10 text

© Geniee, Inc. 11 仮想化⽅式の種類 ホスト型 ハイパーバイザー型 コンテナ型

Slide 11

Slide 11 text

© Geniee, Inc. 12 仮想化⽅式の種類 ホスト型 ハードウェア ホスト OS ホスト型仮想化 ソフトウェア アプリ1 ゲストOS アプリ1 アプリ2 特徴 メリット デメリット ホストOS上でゲストOSを動作 リソース消費⼤ 処理が重たい 仮想化の中で最も⾼い柔軟性を持つ ex. x86マシン上でARMのLinuxを動作可能 参考: 仮想化技術について解説|ホスト‧ハイパーバイザー‧コンテナの違いとは? | ITコラム|アイティーエム株式会社 (2025/03/21)

Slide 12

Slide 12 text

© Geniee, Inc. 13 仮想化⽅式の種類 ハイパーバイザー ゲストOS ゲストOS アプリ1 アプリ1 アプリ2 ハイパーバイザー型 ハードウェア 特徴 メリット デメリット OSを介さずCPUやメモリなどの ハードウェアを直接制御 オーバーヘッドが少ない 特権モードで動作しており セキュリティリスク回避のため 頻繁なアップデートが不可⽋ 参考: 仮想化技術について解説|ホスト‧ハイパーバイザー‧コンテナの違いとは? | ITコラム|アイティーエム株式会社 (2025/03/21)

Slide 13

Slide 13 text

© Geniee, Inc. 14 仮想化⽅式の種類 ホスト OS コンテナエンジン アプリ1 アプリ1 アプリ1 コンテナ型 ハードウェア 特徴 メリット デメリット 各コンテナがホストOS(Linux)の カーネルを利⽤して動作 起動が⾼速 リソース効率が良い 互いに異なるOSのコンテナを 起動することは不可能 参考: 仮想化技術について解説|ホスト‧ハイパーバイザー‧コンテナの違いとは? | ITコラム|アイティーエム株式会社 (2025/03/21)

Slide 14

Slide 14 text

© Geniee, Inc. 15 実務における仮想化技術のメリット 結果: 18 結果: 29 同じプログラムでも 動作環境が異なれば 異なる動作をすることがある ライブラリのバージョン 浮動⼩数点の扱い etc 新たな実⾏環境を構築し (ほぼ)同⼀の動作環境を ソフトウェアで再現可能 結果: 18 結果: 18 同じハードウェアと ソフトウェアバージョン を揃える⼿間が無くなる

Slide 15

Slide 15 text

© Geniee, Inc. 16 実務における仮想化技術のメリット Web server App server DB server 使用率: 17% 使用率: 15% 使用率: 25% ⼀つのシステムにおいて 機能ごとにサーバーを必要とする 使用率: 80% ● Web server ● App server ● DB server ● 仮想化エンジン 機能ごとに独⽴環境を作成し リソースを効率よく活⽤ プロセスごとに異なる バージョンのライブラリを 使いたいから仕⽅がない... 仮想化技術を利⽤せずに 導⼊するのと⽐べて ● スケーラビリティ向上 ● セキュリティ向上 p31

Slide 16

Slide 16 text

Docker

Slide 17

Slide 17 text

© Geniee, Inc. 18 Dockerとは? Docker dotCloud社(現 Docker Inc.)が2013年リリース コンテナ型の仮想化技術を実現する オープンソースソフトウェア コンテナ: アプリケーションを動作させる独⽴した実⾏環境

Slide 18

Slide 18 text

© Geniee, Inc. 19 コンテナ技術 コンテナ化技術で実現できること ● ⾮常に軽量であるため起動が早いためスケーラビリティが向上 ● アプリケーションに必要な全ての依存関係(設定ファイルや ライブラリ)を⼀つのパッケージにまとめて管理 ● コンテナの構築に必要なイメージファイルを共有することで 環境によらず同⼀の動作を実現可能

Slide 19

Slide 19 text

© Geniee, Inc. 20 コンテナ構築の流れ Dockerfile Dockerイメージ OS Application file コンテナ (停⽌) コンテナ (起動) build create start stop run dockerを扱うためのコマンド $ docker build [option] $ docker create [option] DockerImage $ docker start/stop <コンテナ ID or コンテナ名> $ docker run [option] DockerImage

Slide 20

Slide 20 text

© Geniee, Inc. 21 設計思想‧原則 ① 各プロセスが競合することを防ぐため、プロセスごとに独⽴した実⾏環境 (コンテナ)を⽤意する(1コンテナ1プロセスの原則) ● Web server ● App server ● DB server コンテナ1 コンテナ1 コンテナ2 コンテナ3 Web server App server DB server

Slide 21

Slide 21 text

© Geniee, Inc. 22 設計思想‧原則 ② 既存環境の変更による混乱やエラーを回避するために、コンテナは使⽤後は 使い捨て、新たに構築する運⽤をする エラー ex. コンテナ内で設定ファイルを書き換える 追記 listen:8080 os Application file

Slide 22

Slide 22 text

© Geniee, Inc. 23 コンテナ作成⼿順 - Dockerfile Dockerfile Dockerイメージを作成するため のテキストファイル FROM ベースイメージを指定 WORKDIR 作業ディレクトリを指定 RUN ビルド時にコマンドを実⾏ CMD コンテナ起動時に実⾏ ※ Dockerfile内で1回のみ使⽤可能 〜基本命令〜

Slide 23

Slide 23 text

© Geniee, Inc. 24 コンテナ作成⼿順 - Dockerfile ベースイメージ Dockerhub ← リンクになってる ここから良さげな ベースイメージを調べる

Slide 24

Slide 24 text

© Geniee, Inc. 25 コンテナ作成⼿順 - Dockerfile pythonで検索 イメージを選択 タグを選択 ベースイメージ

Slide 25

Slide 25 text

© Geniee, Inc. 26 コンテナ作成⼿順 - Dockerイメージ 注意 Dockerhubからインストールするベースイメージ にはマルウェアが含まれている可能性がある。 実例記事 ← 興味があればどうぞ 対策⽅法 ① 公式のイメージを使⽤する ② ミドルウェアが公式から辿れるか

Slide 26

Slide 26 text

© Geniee, Inc. 27 コンテナ作成⼿順 - Dockerイメージ 注意 Dockerhubからインストールするベースイメージ にはマルウェアが含まれている可能性がある。 実例記事 ← 興味があればどうぞ ③ ベースイメージをレビューする ④ 取得する際にtypoがないか確認 対策⽅法

Slide 27

Slide 27 text

© Geniee, Inc. 28 ポートフォワーディング docker0 http://localhost:80 ポート:8080 ポート:3306 ホスト側ポート コンテナ側ポート 80 8080 3306 3306 $ docker run -p ホストポート:コンテナポート DockerImage ネットワーク通信において 特定のポートに届いたパケットを 別のポートに転送する技術 実ネットワーク docker ネットワーク to port:80 to port:8080

Slide 28

Slide 28 text

コンテナ技術

Slide 29

Slide 29 text

© Geniee, Inc. 30 仮想化⽅式の種類(再掲) ホスト OS コンテナエンジン アプリ1 アプリ1 アプリ1 コンテナ型 ハードウェア 特徴 メリット デメリット 各コンテナがホストOS(Linux)の カーネルを利⽤して動作 起動が⾼速 リソース効率が良い 互いに異なるOSのコンテナを 起動することは不可能

Slide 30

Slide 30 text

© Geniee, Inc. 31 Namespace (発展内容) Host OS Namespace Linuxのリソースを分離する仕組み NameSpace1 NameSpace2 31928 31929 31930 31931 PIDテーブル 1 1 bash bash ⭕ ホストOS -> コンテナのプロセス ⭕ コンテナA -> コンテナAのプロセス ✖ コンテナA -> コンテナBのプロセス ✖ コンテナA -> ホストOSのプロセス コンテナの独⽴した環境を実現 Namespaceによってコンテナが 外部のプロセスを認識できない ようにする

Slide 31

Slide 31 text

© Geniee, Inc. 32 cgroup (発展内容) プロセスごとのハードウェアリソースを 制限する機能 リソース使⽤量を監視‧制限し 公平なリソース分配 4GB 12GB ストレージ 帯域 1GB/s Max 800MB/s Max 200MB/s memory制御 blkio制御 cgroup 複数コンテナが 同⼀カーネルを共有しても 全体の安定性が確保される

Slide 32

Slide 32 text

Dockerの 環境構築

Slide 33

Slide 33 text

© Geniee, Inc. 34 Rancher Desktopのインストール Apple Siliconを選択 ← リンクになってる Dockerコンテナの構築‧管理するデスクトップアプリ

Slide 34

Slide 34 text

© Geniee, Inc. 35 Rancher Desktopのインストール ダウンロードしたファイルをクリック 画像のようなウィンドウが表⽰される ApplicationsフォルダにDrag & Drop

Slide 35

Slide 35 text

© Geniee, Inc. 36 Rancher Desktopのインストール 1. Enable Kubernetesのチェックを外す 2. dockerd(moby)を選択 3. Configure PathはAutomaticを選択

Slide 36

Slide 36 text

© Geniee, Inc. 37 Rancher Desktopのインストール $ docker --version Docker version 24.0.2-rd, build e63f5fa 残りの設定はroot全許可 or OKを選択 下の画像と同様のコマンドを⼊⼒して バージョンが出⼒されたら成功

Slide 37

Slide 37 text

© Geniee, Inc. 38 Rancher DesktopのCLI操作 $ rdctl start Mac OS / Windows コンテナエンジン アプリ ハードウェア 【ホストOSがLinuxではない場合】 Rancher DesktopがLinuxカーネルを提供 各コンテナはこのカーネルを共有している $ rdctl shell Rancher Desktopの起動 Rancher DesktopのVM接続 発展課題で使うので 接続できるか確認! ※コンテナに接続する  訳でないので注意

Slide 38

Slide 38 text

© Geniee, Inc. 39 VSCode(Cursor)の拡張機能 Dev Containers Docker Dockerfileの編集補完、コンテナ‧ イメージの管理、実⾏などを ⼿助けする拡張機能 コンテナ内のコードを vscode(cursor)で直接編集‧実⾏ できる環境を提供する拡張機能

Slide 39

Slide 39 text

準備課題

Slide 40

Slide 40 text

© Geniee, Inc. 41 コンテナの起動 $ docker build . 1. Dockerfileとapp.pyを準備 2. dockerイメージの作成 3. dockerコンテナの作成 $ docker run docker image lsで イメージファイルのid を調べる

Slide 41

Slide 41 text

© Geniee, Inc. 42 コンテナの起動 右のようにHello, World!が出⼒されたら成功 🎉 上⼿く出⼒することができた⼈は ● README.mdに⼿順や結果を書く ● 進捗シートに記⼊ ● 周りに困ってる⼈がいたらサポート 成功例 ※ このコンテナはapp.pyを   実⾏後すぐに停⽌します

Slide 42

Slide 42 text

課題内容は割愛

Slide 43

Slide 43 text

参考⽂献

Slide 44

Slide 44 text

© Geniee, Inc. 45 参考サイト ● ITをわかりやすく解説 仮想記憶(仮想メモリとは) ● 仮想化技術ってなんだろう?なぜ必要なの?? - Linux技術者認定 LinuC | LPI-Japan ● 仮想化技術について解説|ホスト‧ハイパーバイザー‧コンテナの違いと は? | ITコラム|アイティーエム株式会社

Slide 45

Slide 45 text

© Geniee, Inc. 46 イラスト素材 ● silhouette ● フリーアイコンズ ● icon-icons