Slide 1

Slide 1 text

〜Dockerに疲れた人のための〜 LXDではじめるシステムコンテナ入門 日本仮想化技術株式会社 水野 源 [email protected] 2023/02/01 1

Slide 2

Slide 2 text

日本仮想化技術株式会社 概要 • 社名:日本仮想化技術株式会社 • 英語名: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

Slide 3

Slide 3 text

発表者について • 水野 源 • VTJ 技術部所属 • Ubuntu JPメンバー • ubuntu.comメンバー • 日経Linuxにて「Linux 100%活用 ガイド」を連載中 • 著書に「そろそろ常識? マンガで わかるLinuxコマンド」など 3

Slide 4

Slide 4 text

本日のアジェンダ • そもそもコンテナとは • Dockerのつらみ • システムコンテナとは • LXDの紹介 • デモ 4

Slide 5

Slide 5 text

LinuxはマルチプロセスなOS • 現代的なOSでは、複数のプロセスを並列して動かすことができる • 複数のアプリを同時に動かせたりするのはこれのため • 1台のサーバー上に、Webサーバーとデータベースを同居させると いった使い方も一般的 5

Slide 6

Slide 6 text

マルチプロセスが抱える問題 • これらのプロセスは、OS上の同一の空間内で実行される • そのためプロセス間でOSのリソースを共有する(あるいは奪い合う) • ルートファイルシステム • NIC • IPアドレス • ポート • 名前空間 • /etc以下の設定ファイルなど • 同一のポートを使うプロセスや、OSレベルの設定や要求するライブ ラリのバージョンが異なるアプリを共存させるのは難しい 6

Slide 7

Slide 7 text

仮想マシンの時代 • ならばアプリごとに専用のサーバーを用意すればいい • OSの資源を占有できるのだから、共存時にあった問題は解決する • しかしそれでは、アプリの数だけハードウェアが必要になってしまう • お金かかりすぎ…… • そこで仮想マシン • 1台の物理サーバー上で複数の仮想マシンを起動し、用途ごとの専用サー バーとして分離する方法がトレンドに • しかし仮想マシンでは、VMごとにOSをインストールしなければならない • ひとつのアプリのためだけに、専用のVMやOSを用意するのは、管 理の手間やリソースの無駄が大きい 7

Slide 8

Slide 8 text

コンテナとは • プロセスを隔離した空間内で実行する技術 • プロセスは、ホスト上の通常のプロセスとは異なる空間で実行されている • 個別のルートファイルシステムやIPアドレスが割り当てられる • プロセスはあたかも独立したOS内で動いているかのように振舞える • これはLinuxカーネルのnamespaceやcgroupといった機能で実現されている • ホスト側から見れば、単にプロセスが起動しているだけ • VMよりもオーバーヘッドやパフォーマンスの低下が少ない • VM乱立の時代から、プロセス単位でコンテナに隔離する時代へ 8

Slide 9

Slide 9 text

Dockerとは • 現在世界で一番普及している(と思われる)コンテナ実行環境 • アプリケーションを開発、転送、実行するためのプラットフォーム • OSとアプリケーションを分離することで、効率のいいデリバリーを可能とする • 最近ではDockerで動かすことを前提に、構築済みのイメージや、イ メージをビルドするための設定などが開発元から配布されていること も一般的 • Docker Hubというコンテナレジストリが用意されているなど、ユー ザーにとって使いやすいエコシステムが整備されていることも人気 の理由のひとつ 9

Slide 10

Slide 10 text

Dockerが解決した問題 • アプリケーションのポータビリティの向上 • 開発環境/本番環境の差異の吸収 • リソースの最適化 • OSとアプリケーションのライフサイクルの分離 • メンテ効率の向上 • インフラ管理運用コストの削減 10

Slide 11

Slide 11 text

Dockerのつらみ • DockerはVMとは根本的な発想がそもそも異なる • Dockerは、コンテナ内で単一のプロセスのみを動かすのが基本 • 仮想環境というより、単一のアプリケーションのパッケージに近い • コンテナは中身を更新せず使い捨てるのが基本 • Dockerのお作法に則ってコンテナ化しないといけない • 手作業で中身を更新したりはしない • アプリをちょっと試したいような場合でも、イメージビルドが必要 • 総じてDockerは「手軽に試行錯誤できる作業環境」的な用途には向 いていない 11

Slide 12

Slide 12 text

システムコンテナとは • 俺たちが本当に欲しかったものは、デリバリー手段ではなく、「軽量 な仮想マシン」としてのLinuxコンテナなのでは? • DockerをVMっぽく使うことも技術的には可能だが、これはアンチパターン • こういう用途には「システムコンテナ」がお勧め • カーネル以外のLinuxシステムがまるっと動いているコンテナのこと • システムコンテナはDockerと異なり、「軽量な仮想マシン」感覚で、フ ル機能のOSを動かすことができる 12

Slide 13

Slide 13 text

アプリケーションコンテナとの違い 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 仮想マシン アプリケーションコンテナ システムコンテナ

Slide 14

Slide 14 text

LXDとは • 次世代のコンテナ&仮想マシンマネージャー • Ubuntuの開発を支援しているCanonical社によって作られた • 軽量なLinux環境を高速に構築可能 • Dockerと同様に、あらかじめビルドされたコンテナイメージを展開する • LXDはコンテナだけでなく、仮想マシンを管理することもできる 14

Slide 15

Slide 15 text

LXDのメリット • Dockerと異なり、デフォルトでフル機能のOSが使える • 気軽にクリーンな環境が用意できる • 複数のディストリを使い分けられる • コンテナなのでVMよりも軽量 • OSインストールの手間がかからない • LXDは「コンテナの手軽さで使える、VMのような環境」と言える 15

Slide 16

Slide 16 text

LXDのインストール • ホストOSにはUbuntuを使うのがオススメ • Ubuntu Serverの場合 • プリインストール済み • Ubuntu Desktopの場合 • sudo snap install lxd • どっちも簡単 16

Slide 17

Slide 17 text

LXDの初期設定 • LXDを初期化する • sudo lxd init • LXDの操作にはroot権限か、lxdグループに所属する必要がある • sudo adduser $USER lxd 17

Slide 18

Slide 18 text

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形式で表示するか

Slide 19

Slide 19 text

LXDでUbuntuコンテナを起動する • Ubuntu 22.04 LTSのイメージをダウンロードし、それをベースに jammyという名前のコンテナを起動する • lxc launch ubuntu:22.04 jammy • 前述の初期化コマンドはデーモンを操作するlxdコマンド、普段使うク ライアントコマンドはlxcコマンドである点に注意 19

Slide 20

Slide 20 text

コンテナの一覧を表示する • 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 | +-------+---------+---------------------+-----------------------------------------------+-----------+-----------+

Slide 21

Slide 21 text

コンテナの停止、一時停止、再起動、削除 • 起動中のコンテナを停止する • lxc stop jammy • 起動中のコンテナを一時停止する • lxc pause jammy • 停止中や一時停止中のコンテナを再開する • lxc start jammy • 停止中のコンテナを削除する • lxc delete jammy 21

Slide 22

Slide 22 text

コンテナ内でコマンドを実行する • コンテナ内でコマンドを実行する • lxc exec jammy hostname • lxc exec jammy -- ls -la • コンテナ内のシェルを取る • lxc shell jammy 22

Slide 23

Slide 23 text

デモ 23

Slide 24

Slide 24 text

まとめ • 軽量な仮想環境が欲しいのであれば、システムコンテナがお勧め • LXDを使えば、docker pull & runとほぼ同程度の手間で、まっさらな OSを起動できる • Docker内でSSHサーバーを動かして、みたいなことをがんばってる 人は、LXDを試してみよう • Ubuntu Serverならインストール済みだから、すぐに始められるよ 24

Slide 25

Slide 25 text

Linuxをマスターしたい人のための実践Ubuntu • 教科書的に基礎を網羅したガイ ドブックが必要なのでは? • そう思ったので書きました • Linuxを触る上で必要そうなト ピックを600ページに網羅 • 「こういうことを知っておく必要が ある」がわかる • 最新のUbuntu 22.04 LTSに対 応した日本語のLinux入門書は、 たぶん現在唯一? 25