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

仮想化技術とDocker 基礎

Avatar for けん けん
August 01, 2025
190

仮想化技術とDocker 基礎

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

Avatar for けん

けん

August 01, 2025
Tweet

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コラム|アイティーエム株式会社