Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
仮想化技術とDocker 基礎
Search
けん
August 01, 2025
0
190
仮想化技術とDocker 基礎
株式会社ジーニーの新卒研修であるBootcampの資料です。
けん
August 01, 2025
Tweet
Share
Featured
See All Featured
Why You Should Never Use an ORM
jnunemaker
PRO
59
9.6k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
51k
Site-Speed That Sticks
csswizardry
11
890
The Power of CSS Pseudo Elements
geoffreycrofte
79
6k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
15
1.7k
How to Ace a Technical Interview
jacobian
280
24k
Mobile First: as difficult as doing things right
swwweet
224
10k
The Invisible Side of Design
smashingmag
301
51k
[RailsConf 2023] Rails as a piece of cake
palkan
57
5.9k
Music & Morning Musume
bryan
46
6.8k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
127
53k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
3.1k
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