WSL の Almalinux9 で Docker を動かす
◆ docker-ce を入れて iptables を legacy に切り替えて containerd と dockerd を起動すれば動く
◆ 面倒が多いので service コマンドで起動できる Ubuntu の方が楽
◆ AlmaLinux8 だと iptables-legacy パッケージがない
◆ iptables=false でなら動かせたけどネットにつながらない
◆ 面倒が多いので service コマンドで起動できる Ubuntu の方が楽
◆ AlmaLinux8 だと iptables-legacy パッケージがない
◆ iptables=false でなら動かせたけどネットにつながらない
あるディストリビューションのパッケージのデフォルト設定での動きを見たくて Docker を入れようとしたのですが AlmaLinux の WSL がストアに並んでたのでこっちにしてみました
バージョンは 9 です
Docker をインストールして動くようにするまでは Ubuntu より面倒でした
まずは Docker をインストールします
Ubuntu なら service コマンドで起動できるのですが AlmaLinux では service コマンドで起動するためのスクリプトは用意されていません
なので systemd の設定ファイルから起動方法を見ます
/usr/lib/systemd/system/docker.service
こんな感じで dockerd を実行すれば良いみたいです
ただ containerd に依存していてこのサービスも必要みたいです
同じように設定ファイルを見て containerd を起動するコマンドを実行します
このコマンドはフォアグラウンドで実行すると終了せず次のコマンドを実行できません
なんかエラーが出そうな気がしたので WSL ウィンドウを複数用意して各サービスはフォアグラウンドで実行してます
次に Docker を起動します
これもバックグラウンドで実行しないと終了しません
これで動いてくれると良かったのですがエラーになりました
systemd で動かさないなら fd:// を unix:// にすればいいという情報を見かけたので置き換えて実行
これで次に進んだものの 今度はネットワークの初期化でエラーです
iptables コマンドに失敗してるみたいです
Ubuntu や Debian の WSL ディストリでもあった問題みたいなので iptables-legacy に切り替えます
デフォルトではインストールされていないのでインストールもします
これでもう一度 dockerd を起動しようとすると成功でした
あとは適当にコンテナを動かしてみます
適当にいくつかコマンドを実行して問題なく動いてました
ネット接続も問題なくできました
初回準備
(ディストリビューションのインストール後に一回だけ実行)
Docker サービスの起動
(ディストリビューションの起動のたびに実行)
基本は同じなのですが iptables-legacy のところでつまりました
AlmaLinux8 では iptables-legacy がありません
ググっていくつか試したのですが 結局解決できず諦めて
として iptables を使わないようにしてました
これで一応 dockerd が起動できるのでコンテナを起動できるのですが iptables が無効だからかコンテナからインターネットに繋がりません
その後 AlmaLinux9 用のパッケージで iptables-legacy があるのを見つけて無理やり AlmaLinux8 に入れてみようとはしたものの案の定依存関係で色々問題が出て諦めました
WSL で AlmaLinux9 があればいいのにと思って検索したらあったのでそっちにしたという感じです
そもそも RHEL って Docker みたいなコンテナツールを作ってたはずですし RHEL 系ディストリビューションではそっちが推奨で Docker は使うことをあまり想定してないのかもしれませんね
⇨ 使ってみた記事
バージョンは 9 です
Docker をインストールして動くようにするまでは Ubuntu より面倒でした
まずは Docker をインストールします
sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo dnf install docker-ce
Ubuntu なら service コマンドで起動できるのですが AlmaLinux では service コマンドで起動するためのスクリプトは用意されていません
なので systemd の設定ファイルから起動方法を見ます
/usr/lib/systemd/system/docker.service
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target docker.socket firewalld.service containerd.service
Wants=network-online.target
Requires=docker.socket containerd.service
[Service]
Type=notify
# the default is not to use systemd for cgroups because the delegate issues still
# exists and systemd currently does not support the cgroup feature set required
# for containers run by docker
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutSec=0
RestartSec=2
Restart=always
...略
こんな感じで dockerd を実行すれば良いみたいです
ただ containerd に依存していてこのサービスも必要みたいです
同じように設定ファイルを見て containerd を起動するコマンドを実行します
sudo /usr/bin/containerd
このコマンドはフォアグラウンドで実行すると終了せず次のコマンドを実行できません
なんかエラーが出そうな気がしたので WSL ウィンドウを複数用意して各サービスはフォアグラウンドで実行してます
次に Docker を起動します
これもバックグラウンドで実行しないと終了しません
sudo /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
これで動いてくれると良かったのですがエラーになりました
systemd で動かさないなら fd:// を unix:// にすればいいという情報を見かけたので置き換えて実行
sudo /usr/bin/dockerd -H unix:// --containerd=/run/containerd/containerd.sock
これで次に進んだものの 今度はネットワークの初期化でエラーです
iptables コマンドに失敗してるみたいです
Ubuntu や Debian の WSL ディストリでもあった問題みたいなので iptables-legacy に切り替えます
デフォルトではインストールされていないのでインストールもします
sudo dnf install epel-release
sudo dnf install iptables-legacy
sudo update-alternatives --set iptables /usr/sbin/iptables-legacy
これでもう一度 dockerd を起動しようとすると成功でした
あとは適当にコンテナを動かしてみます
sudo docker run -it fedora
適当にいくつかコマンドを実行して問題なく動いてました
ネット接続も問題なくできました
まとめ
実行するコマンドのまとめです初回準備
(ディストリビューションのインストール後に一回だけ実行)
sudo dnf install epel-release
sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo dnf install docker-ce iptables-legacy
sudo update-alternatives --set iptables /usr/sbin/iptables-legacy
Docker サービスの起動
(ディストリビューションの起動のたびに実行)
sudo /usr/bin/containerd > /dev/null 2>&1 &
sudo /usr/bin/dockerd -H unix:// --containerd=/run/containerd/containerd.sock > /dev/null 2>&1 &
AlmaLinux8
実は最初は AlmaLinux8 でやろうとしていました基本は同じなのですが iptables-legacy のところでつまりました
AlmaLinux8 では iptables-legacy がありません
ググっていくつか試したのですが 結局解決できず諦めて
sudo /usr/bin/dockerd -H unix:// --containerd=/run/containerd/containerd.sock --iptables=false
として iptables を使わないようにしてました
これで一応 dockerd が起動できるのでコンテナを起動できるのですが iptables が無効だからかコンテナからインターネットに繋がりません
その後 AlmaLinux9 用のパッケージで iptables-legacy があるのを見つけて無理やり AlmaLinux8 に入れてみようとはしたものの案の定依存関係で色々問題が出て諦めました
WSL で AlmaLinux9 があればいいのにと思って検索したらあったのでそっちにしたという感じです
そもそも RHEL って Docker みたいなコンテナツールを作ってたはずですし RHEL 系ディストリビューションではそっちが推奨で Docker は使うことをあまり想定してないのかもしれませんね
⇨ 使ってみた記事