[備忘録] Debian/Ubuntuでdocker.ioから公式docker-ceへ安全に移行する手順

[備忘録] Debian/Ubuntuでdocker.ioから公式docker-ceへ安全に移行する手順
はじめに
Linuxディストリビューション(特にDebianやUbuntu)の公式リポジトリからapt
でインストールできるdocker.io
は、手軽ですがDocker社公式のパッケージではありません。
最新の機能やセキュリティパッチを迅速に受け取るために、Docker社が提供する公式パッケージdocker-ce
(Community Edition) へ移行することが推奨されています。実際Debianでパッケージのインストールを行っていると、開発メモ その337 古い docker で apt update が The following signatures couldn't be verified because the public key is not availableで書かれているような現象に遭遇しました。
この記事では、既存のコンテナやイメージなどのデータを保持したまま、docker.io
からdocker-ce
へ安全に移行し、その過程で発生しがちなCLIプラグインのエラーを解決するまでの手順をまとめます。
手順1: 【最重要】データのバックアップとサービスの停止
作業前に、万が一に備えて必ずデータのバックアップを取得します。
-
稼働中の全コンテナを停止します。
sudo docker stop $(sudo docker ps -q)
-
Docker関連のサービスを停止します。
sudo systemctl stop docker.service sudo systemctl stop docker.socket
-
Dockerのデータディレクトリを丸ごとバックアップします。
データはデフォルトで/var/lib/docker
にあります。# ホームディレクトリにバックアップファイルを作成 sudo tar -czf ~/docker-backup-$(date +%Y%m%d).tar.gz /var/lib/docker
docker.io
パッケージを完全にアンインストール
手順2: 既存のapt
を使い、docker.io
と関連パッケージを、設定ファイルも含めて完全に削除 (purge
) します。
sudo apt-get purge docker.io docker-doc docker-compose docker-compose-v2 containerd runc
sudo apt-get autoremove -y
手順3: Docker公式リポジトリのセットアップ
apt
がDocker公式リポジトリを参照するように設定します。以下の手順はDebianの例です。Ubuntuの場合はdebian
の部分をubuntu
に置き換えてください。
# 1. 必要なツールをインストール
sudo apt-get update
sudo apt-get install -y ca-certificates curl gnupg
# 2. Docker公式GPGキーを追加
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL [https://download.docker.com/linux/debian/gpg](https://download.docker.com/linux/debian/gpg) | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
# 3. APTにリポジトリ情報を追加
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] [https://download.docker.com/linux/debian](https://download.docker.com/linux/debian) \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
docker-ce
のインストール
手順4: 公式リポジトリ設定後、公式パッケージをインストールします。docker-compose-plugin
なども同時にインストールすることで、docker compose
コマンドが使えるようになります。
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
手順5: 【トラブルシューティング】CLIプラグインのエラーを解決
docker-ce
インストール後、docker buildx
などのコマンドを実行した際に以下のようなエラーが出ることがあります。
fork/exec /home/your_user/.docker/cli-plugins/docker-buildx: no such file or directory
これは、古いdocker.io
がユーザーのホームディレクトリに作成したプラグイン設定の残骸を、Dockerクライアントが参照しようとして発生します。
解決策
-
古いプラグインディレクトリを削除します。
rm -rf ~/.docker/cli-plugins/
-
Docker設定ファイルから古いパスの記述を削除します。
~/.docker/config.json
を開き、cliPluginsExtraDirs
という項目があれば、その行を丸ごと削除します。修正前 (
config.json
の例):{ "cliPluginsExtraDirs": [ "/home/your_user/.docker/cli-plugins" ], "credsStore": "desktop" }
修正後(docker desktop使う場合のみ):
{ "credsStore": "desktop" }
これで、Dockerはシステムに正しくインストールされた新しいプラグインを参照するようになります。
手順6: 最終確認
最後に、すべてが正しく移行できたかを確認します。
-
Dockerのバージョンを確認します。
docker --version # -> Docker version 26.1.4, build ... のように新しいバージョンが表示される
-
インストールされたパッケージ名を確認します。
dpkg -l | grep docker # -> docker-ce, docker-ce-cli などが表示され、docker.ioが消えていることを確認
-
既存のデータが残っていることを確認します。
sudo docker images sudo docker ps -a sudo docker volume ls
以前のイメージやコンテナが表示されていれば、移行は成功です。

家のパソコンでdocker.ioが混ざり込んだ理由はよくわからないが、問題は解消した。