Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
仮想化技術とDocker 基礎
Search
けん
August 01, 2025
0
290
仮想化技術とDocker 基礎
株式会社ジーニーの新卒研修であるBootcampの資料です。
けん
August 01, 2025
Tweet
Share
Featured
See All Featured
A designer walks into a library…
pauljervisheath
210
24k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
37
2.6k
Context Engineering - Making Every Token Count
addyosmani
9
470
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
359
30k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.5k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
Imperfection Machines: The Place of Print at Facebook
scottboms
269
13k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
Code Reviewing Like a Champion
maltzj
527
40k
Rails Girls Zürich Keynote
gr2m
95
14k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.1k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
54k
Transcript
仮想技術とDocker 基礎 2025/04/17(⽊) デマンド開発部 Team2 平岩 健
© Geniee, Inc. 3 講義アジェンダ Dockerとは? 仮想化技術とは? Dockerの環境構築 コンテナ技術について 準備課題
基礎課題 発展課題 ⚒
© Geniee, Inc. 4 研修のゴール Dockerの基礎を理解して ⾃⼒で必要な開発環境を構築できる⼒を⾝に付ける🔥
仮想化技術
© Geniee, Inc. 6 仮想化技術とは? 仮想化技術 ハードウェア(物理)の機能をソフトウェア(論理)で実現する技術 物理的なコンピュータリソースを論理的に抽象化し 効率的に管理‧利⽤する技術 または
参考: 仮想化技術ってなんだろう?なぜ必要なの?? - Linux技術者認定 LinuC | LPI-Japan (2025/03/21)
© Geniee, Inc. 7 仮想化技術とは? - ex. 仮想メモリ 物理的なコンピュータリソースを論理的に抽象化し効率的に管理‧利⽤とは? プログラム
メインメモリ ロード 実アドレス 100 101 102 103 104 メインメモリはストレージと⽐較する と⾼速にデータをロードできる! メモリは⾮常に⾼価であるため メモリ不⾜が問題になる 参考: ITをわかりやすく解説 仮想記憶(仮想メモリとは) (2025/03/21)
© Geniee, Inc. 8 仮想化技術とは? - ex. 仮想メモリ メインメモリ 実アドレス
100 101 102 103 物理的なコンピュータリソースを論理的に抽象化し効率的に管理‧利⽤とは? 補助記憶装置 仮想メモリ 仮想アドレス 1000 1001 1002 1003 1004 1005 1006 メインメモリの容量を超えたアドレス空間を実現 まるで ⼤容量なメモリ のように⾒せる プログラム 仮想アドレス 実アドレス 参考: ITをわかりやすく解説 仮想記憶(仮想メモリとは) (2025/03/21) 必要な時に メモリに移動 動 的 ア ド レ ス 変 換 機 構 ロードの頻度が 少ないデータ
© Geniee, Inc. 9 仮想化技術とは? - ex. エミュレータ ハードウェア(物理)の機能をソフトウェア(論理)で実現するとは? int
main() { —- —-- —-- return 0 } 特定のハードウェアやOS向けに 開発されたソフトウェアを異なる 環境で実⾏させるもの ex. Android Emulator 実際のAndroidデバイスの動作を PC上で再現するソフトウェア まるで Androidデバイスか のように動作させる エミュレータ ソフトウェアによってデバイス(ハードウェア)を再現
© Geniee, Inc. 10 仮想化技術によるアプリケーションの安定稼働 仮想化の⽬的 物理的な制約を解放し より柔軟な利⽤を実現 アプリケーションの安定稼働 他アプリから影響を受けない独⽴環境
ex. ライブラリの依存関係、リソース競合 仮想化技術で 各アプリごとに 異なる実⾏環境の 構築を実現
© Geniee, Inc. 11 仮想化⽅式の種類 ホスト型 ハイパーバイザー型 コンテナ型
© Geniee, Inc. 12 仮想化⽅式の種類 ホスト型 ハードウェア ホスト OS ホスト型仮想化
ソフトウェア アプリ1 ゲストOS アプリ1 アプリ2 特徴 メリット デメリット ホストOS上でゲストOSを動作 リソース消費⼤ 処理が重たい 仮想化の中で最も⾼い柔軟性を持つ ex. x86マシン上でARMのLinuxを動作可能 参考: 仮想化技術について解説|ホスト‧ハイパーバイザー‧コンテナの違いとは? | ITコラム|アイティーエム株式会社 (2025/03/21)
© Geniee, Inc. 13 仮想化⽅式の種類 ハイパーバイザー ゲストOS ゲストOS アプリ1 アプリ1
アプリ2 ハイパーバイザー型 ハードウェア 特徴 メリット デメリット OSを介さずCPUやメモリなどの ハードウェアを直接制御 オーバーヘッドが少ない 特権モードで動作しており セキュリティリスク回避のため 頻繁なアップデートが不可⽋ 参考: 仮想化技術について解説|ホスト‧ハイパーバイザー‧コンテナの違いとは? | ITコラム|アイティーエム株式会社 (2025/03/21)
© Geniee, Inc. 14 仮想化⽅式の種類 ホスト OS コンテナエンジン アプリ1 アプリ1
アプリ1 コンテナ型 ハードウェア 特徴 メリット デメリット 各コンテナがホストOS(Linux)の カーネルを利⽤して動作 起動が⾼速 リソース効率が良い 互いに異なるOSのコンテナを 起動することは不可能 参考: 仮想化技術について解説|ホスト‧ハイパーバイザー‧コンテナの違いとは? | ITコラム|アイティーエム株式会社 (2025/03/21)
© Geniee, Inc. 15 実務における仮想化技術のメリット 結果: 18 結果: 29 同じプログラムでも
動作環境が異なれば 異なる動作をすることがある ライブラリのバージョン 浮動⼩数点の扱い etc 新たな実⾏環境を構築し (ほぼ)同⼀の動作環境を ソフトウェアで再現可能 結果: 18 結果: 18 同じハードウェアと ソフトウェアバージョン を揃える⼿間が無くなる
© Geniee, Inc. 16 実務における仮想化技術のメリット Web server App server DB
server 使用率: 17% 使用率: 15% 使用率: 25% ⼀つのシステムにおいて 機能ごとにサーバーを必要とする 使用率: 80% • Web server • App server • DB server • 仮想化エンジン 機能ごとに独⽴環境を作成し リソースを効率よく活⽤ プロセスごとに異なる バージョンのライブラリを 使いたいから仕⽅がない... 仮想化技術を利⽤せずに 導⼊するのと⽐べて • スケーラビリティ向上 • セキュリティ向上 p31
Docker
© Geniee, Inc. 18 Dockerとは? Docker dotCloud社(現 Docker Inc.)が2013年リリース コンテナ型の仮想化技術を実現する
オープンソースソフトウェア コンテナ: アプリケーションを動作させる独⽴した実⾏環境
© Geniee, Inc. 19 コンテナ技術 コンテナ化技術で実現できること • ⾮常に軽量であるため起動が早いためスケーラビリティが向上 • アプリケーションに必要な全ての依存関係(設定ファイルや
ライブラリ)を⼀つのパッケージにまとめて管理 • コンテナの構築に必要なイメージファイルを共有することで 環境によらず同⼀の動作を実現可能
© Geniee, Inc. 20 コンテナ構築の流れ Dockerfile Dockerイメージ OS Application file
コンテナ (停⽌) コンテナ (起動) build create start stop run dockerを扱うためのコマンド $ docker build [option] </path/to/Dockerfile> $ docker create [option] DockerImage $ docker start/stop <コンテナ ID or コンテナ名> $ docker run [option] DockerImage
© Geniee, Inc. 21 設計思想‧原則 ① 各プロセスが競合することを防ぐため、プロセスごとに独⽴した実⾏環境 (コンテナ)を⽤意する(1コンテナ1プロセスの原則) • Web
server • App server • DB server コンテナ1 コンテナ1 コンテナ2 コンテナ3 Web server App server DB server
© Geniee, Inc. 22 設計思想‧原則 ② 既存環境の変更による混乱やエラーを回避するために、コンテナは使⽤後は 使い捨て、新たに構築する運⽤をする エラー ex.
コンテナ内で設定ファイルを書き換える 追記 listen:8080 os Application file
© Geniee, Inc. 23 コンテナ作成⼿順 - Dockerfile Dockerfile Dockerイメージを作成するため のテキストファイル
FROM ベースイメージを指定 WORKDIR 作業ディレクトリを指定 RUN ビルド時にコマンドを実⾏ CMD コンテナ起動時に実⾏ ※ Dockerfile内で1回のみ使⽤可能 〜基本命令〜
© Geniee, Inc. 24 コンテナ作成⼿順 - Dockerfile ベースイメージ Dockerhub ←
リンクになってる ここから良さげな ベースイメージを調べる
© Geniee, Inc. 25 コンテナ作成⼿順 - Dockerfile pythonで検索 イメージを選択 タグを選択
ベースイメージ
© Geniee, Inc. 26 コンテナ作成⼿順 - Dockerイメージ 注意 Dockerhubからインストールするベースイメージ にはマルウェアが含まれている可能性がある。
実例記事 ← 興味があればどうぞ 対策⽅法 ① 公式のイメージを使⽤する ② ミドルウェアが公式から辿れるか
© Geniee, Inc. 27 コンテナ作成⼿順 - Dockerイメージ 注意 Dockerhubからインストールするベースイメージ にはマルウェアが含まれている可能性がある。
実例記事 ← 興味があればどうぞ ③ ベースイメージをレビューする ④ 取得する際にtypoがないか確認 対策⽅法
© Geniee, Inc. 28 ポートフォワーディング docker0 http://localhost:80 ポート:8080 ポート:3306 ホスト側ポート
コンテナ側ポート 80 8080 3306 3306 $ docker run -p ホストポート:コンテナポート DockerImage ネットワーク通信において 特定のポートに届いたパケットを 別のポートに転送する技術 実ネットワーク docker ネットワーク to port:80 to port:8080
コンテナ技術
© Geniee, Inc. 30 仮想化⽅式の種類(再掲) ホスト OS コンテナエンジン アプリ1 アプリ1
アプリ1 コンテナ型 ハードウェア 特徴 メリット デメリット 各コンテナがホストOS(Linux)の カーネルを利⽤して動作 起動が⾼速 リソース効率が良い 互いに異なるOSのコンテナを 起動することは不可能
© 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によってコンテナが 外部のプロセスを認識できない ようにする
© Geniee, Inc. 32 cgroup (発展内容) プロセスごとのハードウェアリソースを 制限する機能 リソース使⽤量を監視‧制限し 公平なリソース分配
4GB 12GB ストレージ 帯域 1GB/s Max 800MB/s Max 200MB/s memory制御 blkio制御 cgroup 複数コンテナが 同⼀カーネルを共有しても 全体の安定性が確保される
Dockerの 環境構築
© Geniee, Inc. 34 Rancher Desktopのインストール Apple Siliconを選択 ← リンクになってる
Dockerコンテナの構築‧管理するデスクトップアプリ
© Geniee, Inc. 35 Rancher Desktopのインストール ダウンロードしたファイルをクリック 画像のようなウィンドウが表⽰される ApplicationsフォルダにDrag &
Drop
© Geniee, Inc. 36 Rancher Desktopのインストール 1. Enable Kubernetesのチェックを外す 2.
dockerd(moby)を選択 3. Configure PathはAutomaticを選択
© Geniee, Inc. 37 Rancher Desktopのインストール $ docker --version Docker
version 24.0.2-rd, build e63f5fa 残りの設定はroot全許可 or OKを選択 下の画像と同様のコマンドを⼊⼒して バージョンが出⼒されたら成功
© Geniee, Inc. 38 Rancher DesktopのCLI操作 $ rdctl start Mac
OS / Windows コンテナエンジン アプリ ハードウェア 【ホストOSがLinuxではない場合】 Rancher DesktopがLinuxカーネルを提供 各コンテナはこのカーネルを共有している $ rdctl shell Rancher Desktopの起動 Rancher DesktopのVM接続 発展課題で使うので 接続できるか確認! ※コンテナに接続する 訳でないので注意
© Geniee, Inc. 39 VSCode(Cursor)の拡張機能 Dev Containers Docker Dockerfileの編集補完、コンテナ‧ イメージの管理、実⾏などを
⼿助けする拡張機能 コンテナ内のコードを vscode(cursor)で直接編集‧実⾏ できる環境を提供する拡張機能
準備課題
© Geniee, Inc. 41 コンテナの起動 $ docker build . 1.
Dockerfileとapp.pyを準備 2. dockerイメージの作成 3. dockerコンテナの作成 $ docker run <DockerImage> docker image lsで イメージファイルのid を調べる
© Geniee, Inc. 42 コンテナの起動 右のようにHello, World!が出⼒されたら成功 🎉 上⼿く出⼒することができた⼈は •
README.mdに⼿順や結果を書く • 進捗シートに記⼊ • 周りに困ってる⼈がいたらサポート 成功例 ※ このコンテナはapp.pyを 実⾏後すぐに停⽌します
課題内容は割愛
参考⽂献
© Geniee, Inc. 45 参考サイト • ITをわかりやすく解説 仮想記憶(仮想メモリとは) • 仮想化技術ってなんだろう?なぜ必要なの??
- Linux技術者認定 LinuC | LPI-Japan • 仮想化技術について解説|ホスト‧ハイパーバイザー‧コンテナの違いと は? | ITコラム|アイティーエム株式会社
© Geniee, Inc. 46 イラスト素材 • silhouette • フリーアイコンズ •
icon-icons