今どきのKUSANAGI RoD 環境の構築方法

宮﨑悟

はじめに

KUSANAGI Runs on Docker (以下、RoD) をリリースしてから、早いもので5年経ちました。それから、いくつものバグ修正や、新しいバージョンのnginxとphpへの対応などを行っています。

今ではdocker-machineの廃止や、新しいバージョンのDockerも出ており、RoDの環境を新規作成したときに問題が出ることもあります。そこで、現在のRoD環境の作成方法をまとめてみました。

Docker 環境の構築

基本的な動作環境はKUSANGI Runs on Dockerの使い方 のとおり、docker と docker-compose コマンドを使用します。

Linuxで環境構築したい場合は、Ubuntu 20.04 LTS以降のOSの使用をお勧めします。もちろん、Debianでも構いません。RHEL8/9 及びその互換OSでは、標準のPodmanおよび、podman-docker、podman-compose というDocker互換パッケージをインストールする必要があります。

Windows10/11 では、WSL(Windows SubSystem for Linux)で提供される、Ubuntuの使用をお勧めします。

Mac OS では、Docker Desktop for mac が必要となり、これで提供されるdocker および docker-compose を使用します。Lima などの仮想OSを使用する方法では、現在のところ動作しません。

docker/docker-compose の install

RoD では、Docker CE(Community Edition)の使用をお勧めします。Docker 公式のインストール手順でインストールしてください。Docker CEの最新版(2024年9月現在)は 27.2.0 となっています。 インストールしたDocker のバージョンは、以下のコマンドで表示されます。

$ docker version
Client: Docker Engine - Community
 Version:           27.2.0
 API version:       1.47
 Go version:        go1.21.13
 Git commit:        3ab4256
 Built:             Tue Aug 27 14:15:13 2024
 OS/Arch:           linux/amd64
 Context:           default

Server: Docker Engine - Community
 Engine:
  Version:          27.2.0
  API version:      1.47 (minimum version 1.24)
  Go version:       go1.21.13
  Git commit:       3ab5c7d
  Built:            Tue Aug 27 14:15:13 2024
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.7.21
  GitCommit:        472731909fa34bd7bc9c087e4c27943f9835f111
 runc:
  Version:          1.1.13
  GitCommit:        v1.1.13-0-g58aa920
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

現在の docker-compose は、compose plugin と compose standalone の2種類が提供されます。plugin では、docker のサブコマンドとしてcompose が提供され、standaloneでは今までの docker-compose コマンドが提供されます。RoDでは、かならず standalone をインストールしてください。インストールした docker-compose のバージョンは、以下のコマンドで表示されます。

$ docker-compose version
Docker Compose version v2.29.2

RHEL 8/9 系では、Docker CE以外でも Podmanを使用できます。RoD で Podman を使用するには、podman と同時にDocker互換コマンドの podman-docker と、docker-compose の代替となるpodman-compose をdnf でインストールする必要があります。RoDでは docker-compose コマンドを使用するので、以下のコマンドを実行して symbolic linkを作成してください。

$ sudo ln -s podman-compose

podman および podman-compose のバージョンは、以下のコマンドで表示されます。

 $ docker version
 Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg.
 Client:       Podman Engine
 Version:      4.9.4-rhel
 API Version:  4.9.4-rhel
 Go Version:   go1.21.11 (Red Hat 1.21.11-1.module_el8.10.0+3863+bb82df69)
 Built:        Wed Aug 14 01:37:27 2024
 OS/Arch:      linux/amd64
 $ podman-compose version
 podman-compose version
 podman-compose version: 1.0.6
 ['podman', '--version', '']
 using podman version: 4.9.4-rhel
 podman-compose version 1.0.6
 podman --version
 podman version 4.9.4-rhel

Windos 10/11 では、WLS2 で Ubuntuなどをインストールしてください。そして、Windows 上の %PROFILE%\.wslconfig か、WSL上の /etc/wsl.conf に以下の文を記述して、WSL2起動時に systemd を動作させるよう設定します。

[boot]
systemd=true

上記の設定後、ターミナル上から以下のコマンドを実行するとWSL2が停止するので、再度WSL2を起動してください。

# すべてのWSL2を停止
PS> wsl.exe --shutdown
# 指定したディストリビューションを停止
PS> wsl.exe -l -v 
  NAME               STATE           VERSION
* Ubuntu-22.04       Running         2
  Ubuntu-24.04       Stopped         2
PS> wsl.exe -t Ubuntu-22.04

docker rootless の使用

最新の Docker CE には、ユーザ権限でDocker を起動させる、docker rootless という仕組みが提供されています。以前の Docker では、docker engine が 特権権限でのみ動作しました。一般ユーザでDockerを使用する際には、ユーザを docker グループに含めるなどの方法が必要でした。ただし、この方法ではDocker内のプロセスを特権権限で動作させることが可能です。そのため特権権限でのプロセス起動や、ホストOS側のUID/GIDと同じユーザIDでのプロセス起動を許すことになり、セキュリティ的に危険な状態でした。

docker rootlessを使用することで、docker engine を特定のユーザ権限で起動することが出き、docker 上のプロセスもOS上とは異なるUID/GIDを使用できます。このことから、今後は docker rootless を使用することをお勧めします。インストール方法は、docker rootless のドキュメントを参照ください。

最後に

現在のRoDは最新のdocker-compose バージョンにマッチしていなく、kusanagi-docker provision 時に作成した環境では、ワーニングが出力されます。このあたりは、RoDのバージョンアップで解決していく予定です。

また、廃止された docker-machine の代替機能、複数ノードを管理する docker swarm への対応、各種クラウドのマネージドコンテナサービスへの対応も検討中です。今後ともRoD をよろしくお願いします。

<< KUSANAGI Runs on Docker でDev/Rel環境を分離する

関連記事

Webサイト運用の課題解決事例100選 プレゼント

Webサイト運用の課題を弊社プロダクトで解決したお客様にインタビュー取材を行い、100の事例を108ページに及ぶ事例集としてまとめました。

・100事例のWebサイト運用の課題と解決手法、解決後の直接、間接的効果がわかる

・情報通信、 IT、金融、メディア、官公庁、学校などの業種ごとに事例を確認できる

・特集では1社の事例を3ページに渡り背景からシステム構成まで詳解