Upgrade to Pro — share decks privately, control downloads, hide ads and more …

仮想化技術とDocker 基礎

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
Avatar for けん けん
August 01, 2025
750

仮想化技術とDocker 基礎

株式会社ジーニーの新卒研修であるBootcampの資料です。

Avatar for けん

けん

August 01, 2025

Transcript

  1. © Geniee, Inc. 7 仮想化技術とは? - ex. 仮想メモリ 物理的なコンピュータリソースを論理的に抽象化し効率的に管理‧利⽤とは? プログラム

    メインメモリ ロード 実アドレス 100 101 102 103 104 メインメモリはストレージと⽐較する と⾼速にデータをロードできる! メモリは⾮常に⾼価であるため メモリ不⾜が問題になる 参考: ITをわかりやすく解説 仮想記憶(仮想メモリとは) (2025/03/21)
  2. © Geniee, Inc. 8 仮想化技術とは? - ex. 仮想メモリ メインメモリ 実アドレス

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

    main() { —- —-- —-- return 0 } 特定のハードウェアやOS向けに 開発されたソフトウェアを異なる 環境で実⾏させるもの ex. Android Emulator 実際のAndroidデバイスの動作を PC上で再現するソフトウェア まるで Androidデバイスか のように動作させる エミュレータ ソフトウェアによってデバイス(ハードウェア)を再現
  4. © Geniee, Inc. 12 仮想化⽅式の種類 ホスト型 ハードウェア ホスト OS ホスト型仮想化

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

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

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

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

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

    オープンソースソフトウェア コンテナ: アプリケーションを動作させる独⽴した実⾏環境
  10. © Geniee, Inc. 19 コンテナ技術 コンテナ化技術で実現できること • ⾮常に軽量であるため起動が早いためスケーラビリティが向上 • アプリケーションに必要な全ての依存関係(設定ファイルや

    ライブラリ)を⼀つのパッケージにまとめて管理 • コンテナの構築に必要なイメージファイルを共有することで 環境によらず同⼀の動作を実現可能
  11. © 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
  12. © Geniee, Inc. 23 コンテナ作成⼿順 - Dockerfile Dockerfile Dockerイメージを作成するため のテキストファイル

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

    リンクになってる ここから良さげな ベースイメージを調べる
  14. © Geniee, Inc. 26 コンテナ作成⼿順 - Dockerイメージ 注意 Dockerhubからインストールするベースイメージ にはマルウェアが含まれている可能性がある。

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

    実例記事 ← 興味があればどうぞ ③ ベースイメージをレビューする ④ 取得する際にtypoがないか確認 対策⽅法
  16. © Geniee, Inc. 28 ポートフォワーディング docker0 http://localhost:80 ポート:8080 ポート:3306 ホスト側ポート

    コンテナ側ポート 80 8080 3306 3306 $ docker run -p ホストポート:コンテナポート DockerImage ネットワーク通信において 特定のポートに届いたパケットを 別のポートに転送する技術 実ネットワーク docker ネットワーク to port:80 to port:8080
  17. © Geniee, Inc. 30 仮想化⽅式の種類(再掲) ホスト OS コンテナエンジン アプリ1 アプリ1

    アプリ1 コンテナ型 ハードウェア 特徴 メリット デメリット 各コンテナがホストOS(Linux)の カーネルを利⽤して動作 起動が⾼速 リソース効率が良い 互いに異なるOSのコンテナを 起動することは不可能
  18. © 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によってコンテナが 外部のプロセスを認識できない ようにする
  19. © Geniee, Inc. 32 cgroup (発展内容) プロセスごとのハードウェアリソースを 制限する機能 リソース使⽤量を監視‧制限し 公平なリソース分配

    4GB 12GB ストレージ 帯域 1GB/s Max 800MB/s Max 200MB/s memory制御 blkio制御 cgroup 複数コンテナが 同⼀カーネルを共有しても 全体の安定性が確保される
  20. © Geniee, Inc. 34 Rancher Desktopのインストール Apple Siliconを選択 ← リンクになってる

    Dockerコンテナの構築‧管理するデスクトップアプリ
  21. © Geniee, Inc. 37 Rancher Desktopのインストール $ docker --version Docker

    version 24.0.2-rd, build e63f5fa 残りの設定はroot全許可 or OKを選択 下の画像と同様のコマンドを⼊⼒して バージョンが出⼒されたら成功
  22. © Geniee, Inc. 38 Rancher DesktopのCLI操作 $ rdctl start Mac

    OS / Windows コンテナエンジン アプリ ハードウェア 【ホストOSがLinuxではない場合】 Rancher DesktopがLinuxカーネルを提供 各コンテナはこのカーネルを共有している $ rdctl shell Rancher Desktopの起動 Rancher DesktopのVM接続 発展課題で使うので 接続できるか確認! ※コンテナに接続する  訳でないので注意
  23. © Geniee, Inc. 39 VSCode(Cursor)の拡張機能 Dev Containers Docker Dockerfileの編集補完、コンテナ‧ イメージの管理、実⾏などを

    ⼿助けする拡張機能 コンテナ内のコードを vscode(cursor)で直接編集‧実⾏ できる環境を提供する拡張機能
  24. © Geniee, Inc. 41 コンテナの起動 $ docker build . 1.

    Dockerfileとapp.pyを準備 2. dockerイメージの作成 3. dockerコンテナの作成 $ docker run <DockerImage> docker image lsで イメージファイルのid を調べる
  25. © Geniee, Inc. 42 コンテナの起動 右のようにHello, World!が出⼒されたら成功 🎉 上⼿く出⼒することができた⼈は •

    README.mdに⼿順や結果を書く • 進捗シートに記⼊ • 周りに困ってる⼈がいたらサポート 成功例 ※ このコンテナはapp.pyを   実⾏後すぐに停⽌します
  26. © Geniee, Inc. 45 参考サイト • ITをわかりやすく解説 仮想記憶(仮想メモリとは) • 仮想化技術ってなんだろう?なぜ必要なの??

    - Linux技術者認定 LinuC | LPI-Japan • 仮想化技術について解説|ホスト‧ハイパーバイザー‧コンテナの違いと は? | ITコラム|アイティーエム株式会社