世間はDocker一色と言っても過言ではない中、本連載では何度も、LXDとそのフォークであるIncusを紹介してきました。そのIncusのバージョン6.
昨今のコンテナ事情
IT業界にいると、避けては通れない技術トピックというものがいくつか存在します。Linuxやサーバーの分野では、ここ数年はやはりコンテナでしょう。
コンテナについて簡単におさらいしておくと、特定のプロセスを、ホストOSとは異なる空間内に隔離して実行する技術です。これはLinuxカーネルが持つ、namespaceやcgroupといった機能によって実現されています。
コンテナは
つまりコンテナは、アプリケーション実行環境をOSから切り離し、持ち運びを可能にします。これによって、以下のようなメリットが生じます。
- アプリケーションのデプロイやロールバックが簡単になる
- ホスト環境を汚さない
- 同一環境を容易に再現可能
コンテナは、サーバーサイドのWebアプリケーションのデプロイはもちろん、デスクトップアプリケーションの配布にもよく利用されています。特にサーバーサイドでは、昨今の高速な開発サイクルを回す上で、必要不可欠になっていると言えるでしょう。またCI/
Open Container Initiative
軽量な仮想マシンとしてのコンテナ
Dockerは、単一のプロセスのみを実行することを主目的としています。例えばWebサーバーであるnginxを動かすコンテナであれば、PID 1として、nginxのマスタープロセスが直接起動します。こうしたコンテナを
そこで開発や検証を目的として、一般的なフル機能のLinux環境がほしくなることはよくあります。かといって仮想マシンを用意し、わざわざOSのセットアップから始めるのは時間もかかるし、面倒くさいですよね。サクっとシェルを取得して、使い慣れたコマンドでパッケージをインストールできるような環境を、インスタントに使い捨てられたら便利そうです。そして、このようなコンテナを提供するのがIncusです。IncusのコンテナはDockerとは異なり、カーネルをホストと共有すること以外は、通常のLinuxと変わりません。PID 1としてinitが起動し、様々なプロセスが並列して動作します。こうしたコンテナを
同じコンテナではありますが、Incusが仮想マシンの延長にあるのに対し、Dockerはむしろパッケージシステムに近い立ち位置にあると筆者は考えています。
DockerとIncusの共存
筆者のように、検証目的でクリーンなUbuntuの環境を量産したい人間からすると、Incusは一度使ったら手放せないツールのひとつです。しかし世間では
しかしIncusとDockerを同一ホスト上に共存させると、ネットワーク回りの設定でトラブルが起きることもあったため[2]、なるべく避けたいところです。かといって物理マシンは増やしたくありません。そこで今までは、Incusのシステムコンテナ内でDockerを動かす、いわゆるNested Containersで対応していました。しかしこれはこれで、コンテナの層がひとつ増えてしまうため、なんともすっきりしませんよね。
ですがIncus 6.
最新安定板Incusのインストール
Ubuntu 24.
まず以下のコマンドで、リポジトリの公開鍵をダウンロードします。
$ sudo curl -fsSL https://pkgs.zabbly.com/key.asc -o /etc/apt/keyrings/zabbly.asc
続いて以下のコマンドで、APTのリポジトリを追加します。
$ sudo sh -c 'cat <<EOF > /etc/apt/sources.list.d/zabbly-incus-stable.sources Enabled: yes Types: deb URIs: https://pkgs.zabbly.com/incus/stable Suites: $(. /etc/os-release && echo ${VERSION_CODENAME}) Components: main Architectures: $(dpkg --print-architecture) Signed-By: /etc/apt/keyrings/zabbly.asc EOF'
以下のコマンドでincusパッケージをインストールします。
$ sudo apt install -U -y incus
Incusへのアクセスは、
今回はユーザーをincusグループに追加し、管理権限が必要な場合はincus-adminではなく、sudoを使うことにしました。以下のコマンドでユーザーをincusグループに追加した後、ログインし直してください。
$ sudo gpasswd -a ユーザー名 incus
「incus version」
$ incus version クライアントバージョン: 6.3 サーバのバージョン: 6.3
Incusの初期設定とコンテナの起動
最初にroot権限を使い、incusの基本的な設定をします。対話的にいくつかの質問がなされますが、すべてデフォルトのままEnterを押して構いません。詳しくは第521回の
$ sudo incus admin init
以下のコマンドでコンテナを起動できるか確認してみましょう。
$ incus launch images:ubuntu/noble noble $ incus list +-------+---------+----------------------+-----------------------------------------------+-----------+-----------+ | NAME | STATE | IPV4 | IPV6 | TYPE | SNAPSHOTS | +-------+---------+----------------------+-----------------------------------------------+-----------+-----------+ | noble | RUNNING | 10.163.242.31 (eth0) | fd42:89d3:d62f:fd74:216:3eff:fe35:5802 (eth0) | CONTAINER | 0 | +-------+---------+----------------------+-----------------------------------------------+-----------+-----------+
Ubuntu 24.
Docker Hubの追加
Dockerコンテナを動かすため、IncusのリモートサーバーにDocker Hubを追加します。以下のコマンドを実行してください。
$ incus remote add docker https://docker.io --protocol=oci
「incus remote list」
$ incus remote list +----------------+------------------------------------+---------------+-------------+--------+--------+--------+ | NAME | URL | PROTOCOL | AUTH TYPE | PUBLIC | STATIC | GLOBAL | +----------------+------------------------------------+---------------+-------------+--------+--------+--------+ | docker | https://docker.io | oci | none | YES | NO | NO | +----------------+------------------------------------+---------------+-------------+--------+--------+--------+ | images | https://images.linuxcontainers.org | simplestreams | none | YES | NO | NO | +----------------+------------------------------------+---------------+-------------+--------+--------+--------+ | local (現在値) | unix:// | incus | file access | NO | YES | NO | +----------------+------------------------------------+---------------+-------------+--------+--------+--------+
Dockerコンテナの実行
それではいよいよIncus上で、直接Dockerコンテナを起動してみましょう。以下のコマンドで、Docker Hubからnginxのコンテナイメージをpullして起動します。
$ incus launch docker:nginx nginx
nginxコンテナが起動しました。コンテナタイプに(APP)と書かれていることからもわかるとおり、Dockerのアプリケーションコンテナです。
$ incus list +-------+---------+-----------------------+-----------------------------------------------+-----------------+-----------+ | NAME | STATE | IPV4 | IPV6 | TYPE | SNAPSHOTS | +-------+---------+-----------------------+-----------------------------------------------+-----------------+-----------+ | nginx | RUNNING | 10.163.242.229 (eth0) | fd42:89d3:d62f:fd74:216:3eff:fe9d:a533 (eth0) | CONTAINER (APP) | 0 | +-------+---------+-----------------------+-----------------------------------------------+-----------------+-----------+ | noble | RUNNING | 10.163.242.31 (eth0) | fd42:89d3:d62f:fd74:216:3eff:fe35:5802 (eth0) | CONTAINER | 0 | +-------+---------+-----------------------+-----------------------------------------------+-----------------+-----------+
nginxコンテナのIPアドレスに対して、curlしてみましょう。テキストなので少々わかりづらいですが、nginxのデフォルトページが返ってきているのが確認できます。
$ curl http://10.163.242.6 <!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title> <style> html { color-scheme: light dark; } body { width: 35em; margin: 0 auto; font-family: Tahoma, Verdana, Arial, sans-serif; } </style> </head> <body> <h1>Welcome to nginx!</h1> <p>If you see this page, the nginx web server is successfully installed and working. Further configuration is required.</p> <p>For online documentation and support please refer to <a href="http://nginx.org/">nginx.org</a>.<br/> Commercial support is available at <a href="http://nginx.com/">nginx.com</a>.</p> <p><em>Thank you for using nginx.</em></p> </body> </html>
OCI準拠のコンテナレジストリであれば、Docker Hub以外も追加できます。例えばRed HatのQuayを追加するには、以下のコマンドを実行します。
$ incus remote add quay https://quay.io --protocol=oci $ incus remote list +----------------+------------------------------------+---------------+-------------+--------+--------+--------+ | NAME | URL | PROTOCOL | AUTH TYPE | PUBLIC | STATIC | GLOBAL | +----------------+------------------------------------+---------------+-------------+--------+--------+--------+ | docker | https://docker.io | oci | none | YES | NO | NO | +----------------+------------------------------------+---------------+-------------+--------+--------+--------+ | images | https://images.linuxcontainers.org | simplestreams | none | YES | NO | NO | +----------------+------------------------------------+---------------+-------------+--------+--------+--------+ | local (現在値) | unix:// | incus | file access | NO | YES | NO | +----------------+------------------------------------+---------------+-------------+--------+--------+--------+ | quay | https://quay.io | oci | none | YES | NO | NO | +----------------+------------------------------------+---------------+-------------+--------+--------+--------+
Quayにある、Podmanのサンプルコンテナを実行してみましょう。可愛いアザラシの群れが表示されましたね!
$ incus launch quay:podman/hello --console --ephemeral podman Launching podman !... Hello Podman World ...! .--"--. / - - \ / (O) (O) \ ~~~| -=(,Y,)=- | .---. /` \ |~~ ~/ o o \~~~~.----. ~~ | =(X)= |~ / (O (O) \ ~~~~~~~ ~| =(Y_)=- | ~~~~ ~~~| U |~~ Project: https://github.com/containers/podman Website: https://podman.io Desktop: https://podman-desktop.io Documents: https://docs.podman.io YouTube: https://youtube.com/@Podman X/Twitter: @Podman_io Mastodon: @[email protected]
普段はIncusを使っているけれど、Dockerもちょっと使えないと困る。そんなユーザーにとって、まさに待望の新機能と言えるのではないでしょうか。