dockerが動いていると仮想マシン系のbridge上手く機能しなくなるので共存の選択肢として
LXCのインストール
$ sudo apt install lxc
ブリッジの作成
ここでは省略cockpit経由で作ると楽
ネットワークへのブリッジの割り当てここではbr0という名前でブリッジネットワークがある想定
-lxc.net.0.link = lxcbr0
+lxc.net.0.link = br0
コンテナの作成、起動、接続
$ sudo lxc-create -t download -n docker -- -d ubuntu -r noble -a amd64
$ sudo lxc-start -n docker
$ sudo lxc-attach -n docker
lxc-attachで接続するとパスワード認証なしでrootとしてログインできる
この辺りはlxdやincusのweb-uiのterminalタブで接続するのと同じ勝手
lxc-consoleで接続した場合ログイン認証が必要な上、ログインを中止して抜ける場合はcrtl+a → q (qを押す時はctrlを外す)という操作が必要になる
lxc-start, lxc-attachをまとめて実行するlxc-executeというコマンドもあるがこれ場合外部ネットワークに繋がらない
コンテナの停止、削除
$ sudo lxc-stop -n docker
$ sudo lxc-destroy -n docker
IPの確認(想定しているネットワークのIPが割り当てられているか確認)
# ip a
ユーザー関連設定(lxc-attachでコンテナに入った状態から)
既存のユーザーを利用する場合
# passwd ubuntu
表示に従ってパスワードを二回入力する
新規にユーザーを作成する場合(username: docker)
# useradd docker
# passwd docker
# mkdir /home/docker
# chmod -R 750 /home/docker
# chown -R docker:docker /home/docker
# usermod -aG sudo docker
# chsh -s /bin/bash docker
sudo時の認証パス(面倒な場合これを設定していれば楽)
# visudo
末尾に以下を追加
ubuntu ALL=NOPASSWD: ALL
docker ALL=NOPASSWD: ALL
Dockerのインストール
Ubuntu で Docker のインストールに従ってapt installの手前まで実施
LXCではcontainerd.ioのバージョンが1.7.28-1以前でないといけないのでdocker-ceのバージョンも合わせて以下の様にインストール
# apt install docker-ce-cli docker-buildx-plugin docker-compose-plugin
# apt install docker-ce=5:29.5.2-1~ubuntu.24.04~noble containerd.io=1.7.28-1~ubuntu.24.04~noble
'''
更新されないようにバージョンを固定しておく
'''
# apt-mark hold containerd.io docker-ce
実行確認
新規ユーザーで入って確認
# su docker
$ docker run hello-world
既存ユーザーを使う場合
# usermod -aG docker ubuntu
# su docker
$ docker run hello-world
containerd.ioバージョンが1.7.28以降だとこれらの実行時に失敗する