Closed2

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

hangedmanhangedman

[備忘録] 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: 【最重要】データのバックアップとサービスの停止

作業前に、万が一に備えて必ずデータのバックアップを取得します。

  1. 稼働中の全コンテナを停止します。

    sudo docker stop $(sudo docker ps -q)
    
  2. Docker関連のサービスを停止します。

    sudo systemctl stop docker.service
    sudo systemctl stop docker.socket
    
  3. Dockerのデータディレクトリを丸ごとバックアップします。
    データはデフォルトで/var/lib/dockerにあります。

    # ホームディレクトリにバックアップファイルを作成
    sudo tar -czf ~/docker-backup-$(date +%Y%m%d).tar.gz /var/lib/docker
    

手順2: 既存のdocker.ioパッケージを完全にアンインストール

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

手順4: 公式docker-ceのインストール

リポジトリ設定後、公式パッケージをインストールします。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クライアントが参照しようとして発生します。

解決策

  1. 古いプラグインディレクトリを削除します。

    rm -rf ~/.docker/cli-plugins/
    
  2. Docker設定ファイルから古いパスの記述を削除します。
    ~/.docker/config.json を開き、cliPluginsExtraDirs という項目があれば、その行を丸ごと削除します。

    修正前 (config.jsonの例):

    {
      "cliPluginsExtraDirs": [
        "/home/your_user/.docker/cli-plugins"
      ],
      "credsStore": "desktop"
    }
    

    修正後(docker desktop使う場合のみ):

    {
      "credsStore": "desktop"
    }
    

これで、Dockerはシステムに正しくインストールされた新しいプラグインを参照するようになります。


手順6: 最終確認

最後に、すべてが正しく移行できたかを確認します。

  1. Dockerのバージョンを確認します。

    docker --version
    # -> Docker version 26.1.4, build ... のように新しいバージョンが表示される
    
  2. インストールされたパッケージ名を確認します。

    dpkg -l | grep docker
    # -> docker-ce, docker-ce-cli などが表示され、docker.ioが消えていることを確認
    
  3. 既存のデータが残っていることを確認します。

    sudo docker images
    sudo docker ps -a
    sudo docker volume ls
    

    以前のイメージやコンテナが表示されていれば、移行は成功です。

hangedmanhangedman

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

このスクラップは1ヶ月前にクローズされました