Debian への Docker Engine インストール

Debian 上での Docker Engine を使い始めるにあたっては、 前提条件 を満たしていることを確認した上で、以下の インストール手順 に従ってください。

前提条件

ファイアウォールの制限

警告

Docker をインストールするにあたっては、以下に示すセキュリティに関する影響やファイアウォールの互換性について確認してください。

  • ファイアウォール設定の管理に ufw または firewalld を利用している場合、Docker が利用するコンテナーポートが開放されていることを確認してください。 そのポートはファイアウォールルールをバイパスします。 詳しくは Docker と ufw を参照してください。
  • Docker との互換性があるのは iptables-nftiptables-legacy のみです。 nft によって生成されたファイアウォールルールは、Docker をインストールしたシステム上ではサポートされません。 したがって利用できるファイアウォールのルールセットは iptables または ip6tables によって生成されたものであり、それが DOCKER-USER チェーンに追加したものであることを確認してください。 詳しくは パケットフィルタリングとファイアウォール を参照してください。

OS 要件

Docker Engine をインストールするには、以下に示す 64 ビット Debian バージョンのいずれかであることが必要です。

  • Debian Bookworm 12 (stable)
  • Debian Bullseye 11 (oldstable)

Debian における Docker Engine は x86_64 (または amd64), armhf, arm64, ppc64le (ppc64el) の各アーキテクチャーに対応しています。

旧バージョンのアンインストール

Docker Engine をインストールするにあたっては、衝突しそうなパッケージをすべてアンインストールする必要があります。

この Linux ディストリビューションでは Docker の非公式パッケージが提供されているかもしれません。 これは Docker が提供する公式パッケージとの間で衝突を引き起こします。 したがって Docker Engine の公式バージョンをインストールするには、そういったパッケージはあらかじめアンインストールしておく必要があります。

アンインストールするべき非公式パッケージとは以下のものです。

  • docker.io
  • docker-compose
  • docker-doc
  • podman-docker

さらに Docker Engine は containerdrunc に依存しています。 Docker Engine にはバンドル製品として containerd.io が含まれています。 以前より containerd または runc をインストールしていた場合は、Docker Engine にバンドルされたバージョンとの衝突を回避するためにそれらをアンインストールします。

以下のコマンドを実行して、衝突が発生するパッケージすべてをアンインストールします。

$ for pkg in docker.io docker-doc docker-compose podman-docker containerd runc; do sudo apt-get remove $pkg; done

インストールされていないパッケージがあれば apt-get がその旨を表示します。

イメージ、コンテナー、ボリューム、ネットワークの各情報は /var/lib/docker/ に保存されますが、これらは Docker をアンインストールしても自動的には削除されません。 既存のデータもすべて削除した状態でクリーンインストールを始めようとする場合は、 Docker Engine のアンインストール の節を参照してください。

インストール方法

Docker Engine のインストール方法はいくつかあるので、必要に応じて選んでください。

  • Docker Engine には Linux 向け Docker Desktop にバンドルされて提供されています。 Docker Engine を始めるにはこれを利用するのが最も簡単な方法です。

  • Docker の apt リポジトリ から Docker Engine を入手してインストールすることができます。

  • 手動でのインストール を行い、アップグレードも手動で行うことができます。

  • 便利スクリプト を利用することができます。 これはテスト環境や開発環境向けに利用することが推奨されます。

apt リポジトリを利用したインストール

Docker Engine を初めてマシン上にインストールするには、Docker リポジトリの設定があらかじめ必要です。 これを行った後に、そのリポジトリから Docker のインストールやアップグレードを行います。

  1. Docker の apt リポジトリを設定します。

    # Docker の公式 GPG 鍵の追加
    sudo apt-get update
    sudo apt-get install ca-certificates curl
    sudo install -m 0755 -d /etc/apt/keyrings
    sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
    sudo chmod a+r /etc/apt/keyrings/docker.asc
    
    # Apt ソースへのリポジトリ追加
    echo \
      "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian \
      $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
      sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
    sudo apt-get update

    メモ

    Kali Linux のような派生ディストリビューションを利用している場合は、以下のコマンドにてバージョンコード名を適切に出力されるように、適切に修正する必要があるかもしれません。

    $(. /etc/os-release && echo "$VERSION_CODENAME")
    

    Debian リリースを表すコード名は bookworm などのように適切に書き換えてください。

  2. Docker パッケージをインストールします。


    最新バージョンをインストールするには以下を実行します。

    $ sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
    

    Docker Engine の特定バージョンをインストールするには、まずリポジトリ内の利用可能なバージョンを一覧表示します。

    # 利用可能なバージョンを一覧表示
    $ apt-cache madison docker-ce | awk '{ print $3 }'
    
    5:27.4.0-1~debian.12~bookworm
    5:27.3.1-1~debian.12~bookworm
    ...
    

    必要なバージョンを選んでインストールします。

    $ VERSION_STRING=5:27.4.0-1~debian.12~bookworm
    $ sudo apt-get install docker-ce=$VERSION_STRING docker-ce-cli=$VERSION_STRING containerd.io docker-buildx-plugin docker-compose-plugin
    

  3. インストールが成功したことを確認するために hello-world イメージを実行します。

    $ sudo docker run hello-world
    

    このコマンドを実行すると、テストイメージがダウンロードされてコンテナーとして実行します。 コンテナーが実行されると、確認メッセージが表示されて終了します。

Docker Engine のインストールと起動が正常に行われました。

情報

非 root ユーザーでの実行時にエラーが発生したら?

ユーザーグループ docker は存在していてもユーザーが一切含まれていない状態の場合、Docker コマンドの実行にあたっては sudo の利用を求められることになります。 Linux インストール後の作業 を確認して、Docker コマンドやその他の設定作業を非特権ユーザーにも許可する手順を進めてください。

Docker Engine のアップグレード

Docker Engine をアップグレードする場合は インストール作業 の手順 2 に従います。 そこではインストールしたい新バージョンを選びます。

パッケージからのインストール

Docker Engine のインストールにあたって Docker の apt リポジトリを利用したくない場合は、対象となるリリースの deb ファイルをダウンロードして手動でインストールします。 Docker Engine のアップグレード時には、その都度、新しいファイルをダウンロードしてくることになります。

  1. https://download.docker.com/linux/debian/dists/ にアクセスします。

  2. 一覧の中から Debian バージョンを選びます。

  3. pool/stable/ を開いて、適用可能なアーキテクチャー (amd64, armhf, arm64, s390x) を選びます。

  4. Docker Engine、CLI、containerd、Docker Compose パッケージを表す以下の deb ファイルをダウンロードします。

    • containerd.io_<version>_<arch>.deb
    • docker-ce_<version>_<arch>.deb
    • docker-ce-cli_<version>_<arch>.deb
    • docker-buildx-plugin_<version>_<arch>.deb
    • docker-compose-plugin_<version>_<arch>.deb
  5. .deb パッケージをインストールします。 以下に例におけるパス指定では、Docker パッケージ類をダウンロードしたパスに置き換えてください。

    $ sudo dpkg -i ./containerd.io_<version>_<arch>.deb \
      ./docker-ce_<version>_<arch>.deb \
      ./docker-ce-cli_<version>_<arch>.deb \
      ./docker-buildx-plugin_<version>_<arch>.deb \
      ./docker-compose-plugin_<version>_<arch>.deb
    

    Docker デーモンは自動的に起動します。

  6. インストールが成功したことを確認するために hello-world イメージを実行します。

    $ sudo service docker start
    $ sudo docker run hello-world
    

    このコマンドを実行すると、テストイメージがダウンロードされてコンテナーとして実行します。 コンテナーが実行されると、確認メッセージが表示されて終了します。

Docker Engine のインストールと起動が正常に行われました。

情報

非 root ユーザーでの実行時にエラーが発生したら?

ユーザーグループ docker は存在していてもユーザーが一切含まれていない状態の場合、Docker コマンドの実行にあたっては sudo の利用を求められることになります。 Linux インストール後の作業 を確認して、Docker コマンドやその他の設定作業を非特権ユーザーにも許可する手順を進めてください。

Docker Engine のアップグレード

Docker Engine をアップグレードするには、新たなパッケージファイルをダウンロードして インストール手順 に従います。 対象ファイルは新しいものに置き換えてください。

便利スクリプトを使ったインストール

Docker では https://get.docker.com/ において便利なスクリプトを提供しています。 これは Docker を開発マシンに対話形式をとらずにすばやくインストールするものです。 このスクリプトを本番環境において利用することはお勧めしませんが、環境に適したプロビジョニングを行うサンプルとして活用することはできます。 また リポジトリを利用したインストール における作業手順に従うことで、パッケージリポジトリを利用したインストール手順を身につけることができます。 このスクリプトのソースコードはオープンソースであり、 GitHub 条の docker-install リポジトリ から入手可能です。

インターネットからスクリプトをダウンロードしたら、まず内容を十分確認してからローカル実行してください。 インストールにあたっては、この便利スクリプトの潜在的リスクや制限について、よく理解してください。

  • スクリプトを実行するには root 権限か sudo が必要です。
  • スクリプトは自動的に情報取得を行い、利用している Linux ディストリビューション、そのバージョン、そしてパッケージ管理システムの設定を行います。
  • このスクリプトは、インストール時にパラメーターを受け渡すような設定はできないものになっています。
  • スクリプトは依存パッケージや推奨パッケージをすべてインストールします。 その際にはインストールして良いかどうかを問いません。 したがって相当数のパッケージがインストールされることもあります。 これはホストマシンのその時点での設定によります。
  • このスクリプトはデフォルトでは、最新版の Docker、containerd、runc をインストールします。 このスクリプトを使ってマシンをプロビジョニングした場合、Docker のメジャーバージョンへのアップグレードにより、予期しない結果を引き起こすことがあります。 本番環境へのデプロイを行う際には、必ず (メジャーバージョンへの) アップグレードをテスト環境においてテストしておいてください。
  • このスクリプトは、既にインストールされている Docker をアップグレードするように設計されていません。 このスクリプトを利用して既存インストールをアップデートする際には、依存パッケージが思いどおりにアップデートされない場合があります。 それによって古いバージョンのまま利用する状況となる場合があります。

情報

スクリプト実行前にインストールステップを確認します。 本スクリプトの実行にあたって --dry-run オプションを指定すると、このスクリプトのインストールステップを確認することができます。

$ curl -fsSL https://get.docker.com -o get-docker.sh
$ sudo sh ./get-docker.sh --dry-run

以下は、このスクリプトを https://get.docker.com/ からダウンロードして実行することで、Linux 上に最新安定版をインストールする例です。

$ curl -fsSL https://get.docker.com -o get-docker.sh
$ sudo sh get-docker.sh
Executing docker install script, commit: 7cae5f8b0decc17d6571f9f52eb840fbc13b2737
<...>

Docker が正常にインストールされます。 Debian ベースのディストリビューションでは docker サービスが自動的に開始されます。 CentOS、Fedora、RHEL、SLES といった RPM ベースの場合は手動での実行が必要となるため、systemctlservice のいずれか適当なものを実行します。 上の出力メッセージに示されているように、デフォルトでは非 root ユーザーによる Docker コマンド実行はできません。

非特権ユーザーでの Docker 利用、rootless モードでのインストール?

このインストールスクリプトでは、Docker をインストールして利用するために root あるいは sudo を用いた権限が必要です。 非 root ユーザーに Docker の利用を許可する場合は、 Linux インストール後の作業 を参照してください。 Docker は root 権限がなくてもインストールできます。 つまり rootless モードにより実行することができます。 rootless モードにより Docker を実行する手順については root ユーザー以外による Docker デーモン起動(rootless モード) を参照してください。

プレリリース版のインストール

Docker ではこの便利スクリプトを https://test.docker.com/ からも提供しています。 これを使って Linux 上にプレリリース版の Docker をインストールできます。 このスクリプトは get.docker.com から入手するものと同等であり、パッケージマネージャーを使って Docker パッケージリポジトリのテストチャネルが利用できるように設定されています。 テストチャネルには Docker の安定版とプレリリース版 (ベータ版、リリース候補版) の双方が含まれています。 このスクリプトを利用すれば、新規リリース向けの早期アクセスが利用できます。 これにより安定版として提供されるよりも前に、テスト環境においてそれらを評価することができます。

Linux への Docker 最新版のインストールをテストチャネルから行うには、以下を実行します。

$ curl -fsSL https://test.docker.com -o test-docker.sh
$ sudo sh test-docker.sh

便利スクリプトを使った後の Docker のアップグレード

便利スクリプトを使って Docker をインストールした場合、Docker のアップグレードはパッケージマネージャーを直接使って行ってください。 便利スクリプトは再実行する意味はありません。 ホストマシンにリポジトリが追加されているところに、このスクリプトを再実行したとすると、そのリポジトリを再度追加してしまうため、問題になることがあります。

Docker Engine のアンインストール

  1. Docker Engine, CLI、containerd、Docker Compose パッケージをアンインストールするには以下を行います。

    $ sudo apt-get purge docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras
    
  2. イメージ、コンテナー、ボリューム、独自の設定ファイルは自動的には削除されません。 イメージ、コンテナー、ボリュームを削除するには以下を行います。

    $ sudo rm -rf /var/lib/docker
    $ sudo rm -rf /var/lib/containerd
    
  3. ソースリストとキーリングを削除します。

    $ sudo rm /etc/apt/sources.list.d/docker.list
    $ sudo rm /etc/apt/keyrings/docker.asc
    

独自に編集した設定ファイルは手動で削除する必要があります。

次のステップ