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

Dockerに疲れた人のためのLXDではじめるシステムコンテナ入門

 Dockerに疲れた人のためのLXDではじめるシステムコンテナ入門

コンテナを使ったシステム構築といえばDockerをはじめとするアプリケーションコンテナがよく知られていますが、もう一つのコンテナ技術として軽量な仮想マシン感覚で使えるシステムコンテナという選択肢もあります。今回の勉強会では、システムコンテナの代表格であるLXDを題材として、システムコンテナとは何か、何がアプリケーションコンテナや仮想マシンと違うのかを解説いたします。どんな用途で使うのが良いか、何がメリットがあるのかを理解し、アプリケーションコンテナ以外の選択肢として技術の幅を広げていただければと思います。

とことんDevOps

February 02, 2023
Tweet

More Decks by とことんDevOps

Other Decks in Technology

Transcript

  1. 日本仮想化技術株式会社 概要 • 社名:日本仮想化技術株式会社 • 英語名:VirtualTech Japan Inc. • 略称:日本仮想化技術/VTJ

    • 設立:2006年12月 • 資本金:3,000万円 • 売上高:2億6499万円(2021年7月期) • 本社:東京都渋谷区渋谷1-8-1 • 取締役:宮原 徹(代表取締役社長兼CEO) • 伊藤 宏通(取締役CTO) • スタッフ:11名(専任エンジニア:8名) • URL:http://VirtualTech.jp/ • 仮想化技術に関する研究および開発 • 仮想化技術に関する各種調査 • 仮想化技術に関連したソフトウェアの開発 • 仮想化技術を導入したシステムの構築 • OpenStackの導入支援・新規機能開発 ベンダーニュートラルな 独立系仮想化技術の エキスパート集団 2
  2. 発表者について • 水野 源 • VTJ 技術部所属 • Ubuntu JPメンバー

    • ubuntu.comメンバー • 日経Linuxにて「Linux 100%活用 ガイド」を連載中 • 著書に「そろそろ常識? マンガで わかるLinuxコマンド」など 3
  3. マルチプロセスが抱える問題 • これらのプロセスは、OS上の同一の空間内で実行される • そのためプロセス間でOSのリソースを共有する(あるいは奪い合う) • ルートファイルシステム • NIC •

    IPアドレス • ポート • 名前空間 • /etc以下の設定ファイルなど • 同一のポートを使うプロセスや、OSレベルの設定や要求するライブ ラリのバージョンが異なるアプリを共存させるのは難しい 6
  4. 仮想マシンの時代 • ならばアプリごとに専用のサーバーを用意すればいい • OSの資源を占有できるのだから、共存時にあった問題は解決する • しかしそれでは、アプリの数だけハードウェアが必要になってしまう • お金かかりすぎ…… •

    そこで仮想マシン • 1台の物理サーバー上で複数の仮想マシンを起動し、用途ごとの専用サー バーとして分離する方法がトレンドに • しかし仮想マシンでは、VMごとにOSをインストールしなければならない • ひとつのアプリのためだけに、専用のVMやOSを用意するのは、管 理の手間やリソースの無駄が大きい 7
  5. コンテナとは • プロセスを隔離した空間内で実行する技術 • プロセスは、ホスト上の通常のプロセスとは異なる空間で実行されている • 個別のルートファイルシステムやIPアドレスが割り当てられる • プロセスはあたかも独立したOS内で動いているかのように振舞える •

    これはLinuxカーネルのnamespaceやcgroupといった機能で実現されている • ホスト側から見れば、単にプロセスが起動しているだけ • VMよりもオーバーヘッドやパフォーマンスの低下が少ない • VM乱立の時代から、プロセス単位でコンテナに隔離する時代へ 8
  6. Dockerのつらみ • DockerはVMとは根本的な発想がそもそも異なる • Dockerは、コンテナ内で単一のプロセスのみを動かすのが基本 • 仮想環境というより、単一のアプリケーションのパッケージに近い • コンテナは中身を更新せず使い捨てるのが基本 •

    Dockerのお作法に則ってコンテナ化しないといけない • 手作業で中身を更新したりはしない • アプリをちょっと試したいような場合でも、イメージビルドが必要 • 総じてDockerは「手軽に試行錯誤できる作業環境」的な用途には向 いていない 11
  7. アプリケーションコンテナとの違い 13 Host OS Kernel Docker Engine App 1 App

    2 Host OS Kernel LXD OS 1 OS 2 App 1 App 2 Host OS Kernel Hypervisor OS 1 OS 2 App 1 App 2 Kernel Kernel 仮想マシン アプリケーションコンテナ システムコンテナ
  8. LXDの初期設定 18 $ sudo lxd init Would you like to

    use LXD clustering? (yes/no) [default=no]: # ← LXDを別PC上のLXDとクラスタ化するか Do you want to configure a new storage pool? (yes/no) [default=yes]: # ← 新しいストレージプールを作成するか Name of the new storage pool [default=default]: # ← 新しいストレージプールの名前 Name of the storage backend to use (ceph, btrfs, dir, lvm, zfs) [default=zfs]: # ← ストレージプールのバックエンド Create a new ZFS pool? (yes/no) [default=yes]: # ← 新しいZFSプールを作成するか Would you like to use an existing empty block device (e.g. a disk or partition)? (yes/no) [default=no]: # ← 既存のブロックデバイスを使用するか Size in GB of the new loop device (1GB minimum) [default=6GB]: # ← ストレージプールのサイズ Would you like to connect to a MAAS server? (yes/no) [default=no]: # ← MAASサーバーに接続するか Would you like to create a new local network bridge? (yes/no) [default=yes]: # ← 新しいネットワークブリッジを作成するか What should the new bridge be called? [default=lxdbr0]: # ← 新しいネットワークブリッジの名前 What IPv4 address should be used? (CIDR subnet notation, “auto” or “none”) [default=auto]: # ← コンテナが使うIPv4アドレスの設定 What IPv6 address should be used? (CIDR subnet notation, “auto” or “none”) [default=auto]: # ← コンテナが使うIPv6アドレスの設定 Would you like the LXD server to be available over the network? (yes/no) [default=no]: # ← LXDサーバーをネットワーク越しに使用するか Would you like stale cached images to be updated automatically? (yes/no) [default=yes]: # ← コンテナイメージを自動的に更新するか Would you like a YAML "lxd init" preseed to be printed? (yes/no) [default=no]: # ← lxd initの結果をYAML形式で表示するか
  9. LXDでUbuntuコンテナを起動する • Ubuntu 22.04 LTSのイメージをダウンロードし、それをベースに jammyという名前のコンテナを起動する • lxc launch ubuntu:22.04

    jammy • 前述の初期化コマンドはデーモンを操作するlxdコマンド、普段使うク ライアントコマンドはlxcコマンドである点に注意 19
  10. コンテナの一覧を表示する • lxc list 20 $ lxc list +-------+---------+---------------------+-----------------------------------------------+-----------+-----------+ |

    NAME | STATE | IPV4 | IPV6 | TYPE | SNAPSHOTS | +-------+---------+---------------------+-----------------------------------------------+-----------+-----------+ | jammy | RUNNING | 10.219.30.84 (eth0) | fd42:3a32:c36e:d090:216:3eff:fe12:c2fd (eth0) | CONTAINER | 0 | +-------+---------+---------------------+-----------------------------------------------+-----------+-----------+
  11. コンテナの停止、一時停止、再起動、削除 • 起動中のコンテナを停止する • lxc stop jammy • 起動中のコンテナを一時停止する •

    lxc pause jammy • 停止中や一時停止中のコンテナを再開する • lxc start jammy • 停止中のコンテナを削除する • lxc delete jammy 21
  12. まとめ • 軽量な仮想環境が欲しいのであれば、システムコンテナがお勧め • LXDを使えば、docker pull & runとほぼ同程度の手間で、まっさらな OSを起動できる •

    Docker内でSSHサーバーを動かして、みたいなことをがんばってる 人は、LXDを試してみよう • Ubuntu Serverならインストール済みだから、すぐに始められるよ 24
  13. Linuxをマスターしたい人のための実践Ubuntu • 教科書的に基礎を網羅したガイ ドブックが必要なのでは? • そう思ったので書きました • Linuxを触る上で必要そうなト ピックを600ページに網羅 •

    「こういうことを知っておく必要が ある」がわかる • 最新のUbuntu 22.04 LTSに対 応した日本語のLinux入門書は、 たぶん現在唯一? 25