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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide