Docker Engine インストール(Debian 向け)

読む時間の目安: 5 分

Debian 向けに Docker Engine を始めるには、前提条件を満たしているかを確認してから、インストール手順 に進んでください。

前提条件

OS 要件

Docker Engine をインストールするには、Debian か Raspbian の 64 ビットバージョンが必要です。

  • Debian Bullseye 11 (安定版)
  • Debian Buster 10 (古い安定版)
  • Raspbian Bullseye 11 (安定版)
  • Raspbian Buster 10 (古い安定版)

Docker Engine はx86_64(またはamd64)、armhfarm64の各アーキテクチャーをサポートします。

古いバージョンのアンインストール

Docker のかつてのバージョンは、dockerdocker.iodocker-engineと呼ばれていました。 これがインストールされている場合はアンインストールしてください。

$ sudo apt-get remove docker docker-engine docker.io containerd runc

apt-getを実行したときに、上のパッケージがインストールされていないと表示されれば OK です。

/var/lib/docker/にはイメージ、コンテナー、ボリューム、ネットワークが含まれていて、それは保持されたまま残ります。 なお Docker Engine パッケージは、今はdocker-ceと呼ばれます。

インストール手順

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

  • たいていのユーザーは Docker のリポジトリをセットアップして、そこからインストールしています。 インストールやアップグレードの作業が簡単だからです。 この方法をお勧めします。

  • ユーザーの中には DEB パッケージをダウンロードし、手動でインストールしている方もいます。 アップグレードも完全に手動となります。 この方法は、インターネットにアクセスできない環境で Docker をインストールするような場合には有用です。

  • テスト環境や開発環境向けに、自動化された便利なスクリプトを使って Docker のインストールを行うユーザーもいます。 これを対象としているのは、現在 Raspbian のみです。

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

新しいホストマシンに Docker Engine を初めてインストールするときは、その前に Docker リポジトリをセットアップしておくことが必要です。 これを行った後に、リポジトリからの Docker のインストールやアップグレードができるようになります。

Raspbian ユーザーはこの方法を使えません!

Raspbian において、リポジトリからインストールする方法はサポートされていません。 かわりに convenience script を使うことになります。

リポジトリのセットアップ

  1. aptのパッケージインデックスを更新します。 そしてaptが HTTPS 経由でリポジトリにアクセスしパッケージをインストールできるようにします。

    $ sudo apt-get update
    
    $ sudo apt-get install \
        apt-transport-https \
        ca-certificates \
        curl \
        gnupg \
        lsb-release
    
  2. Docker の公式 GPG 鍵を追加します。

     $ curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
    
  3. 以下のコマンドを使って安定版(stable)リポジトリをセットアップします。 最新版(nightly)、テスト版(test)の各リポジトリを追加する場合は、以下のコマンドにおけるstableの文字に続けてnightlytestの文字を加えてください。 最新版テスト版チャンネルを学ぶにはこちら

    メモ

    サブコマンドlsb_release -csは Debian ディストリビューションの名前、たとえばheliumといったものを返します。 BunsenLabs Linux のようなディストリビューションなどでは、$(lsb_release -cs)とする必要があります。 たとえばBunsenLabs Linux Heliumを使っている場合、stretchを利用することになります。 テスト対象外、サポート対象外の Debian ディストリビューションに対して Docker は何ら動作保証しません。

    $ echo \
      "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian \
      $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
    

Docker Engine のインストール

この手順はx86_64amd64armhfarm64上における Debian と Raspbian 向けです。

  1. aptのパッケージインデックスを更新し、最新版の Docker をインストールします。 Engine and containerd, or go to the next step to install a specific version:

    $ sudo apt-get update
    $ sudo apt-get install docker-ce docker-ce-cli containerd.io
    

    複数リポジトリからの取得?

    Docker リポジトリを複数有効にしていて、バージョン指定をせずにapt-get install によるインストール、またはapt-get updateによるアップデートを行うと、入手可能な最新版がインストールされます。 安定した版が必要である場合には、適切でない場合があります。

  2. 特定バージョンの Docker Engine をインストールする場合は、リポジトリにある利用可能なバージョンの一覧を確認し、いずれかを選んでインストールします。

    a. リポジトリ内にある利用可能なバージョンを一覧表示します。

    $ apt-cache madison docker-ce
    
      docker-ce | 5:18.09.1~3-0~debian-stretch | https://download.docker.com/linux/debian stretch/stable amd64 Packages
      docker-ce | 5:18.09.0~3-0~debian-stretch | https://download.docker.com/linux/debian stretch/stable amd64 Packages
      docker-ce | 18.06.1~ce~3-0~debian        | https://download.docker.com/linux/debian stretch/stable amd64 Packages
      docker-ce | 18.06.0~ce~3-0~debian        | https://download.docker.com/linux/debian stretch/stable amd64 Packages
    

    b. 特定のバージョンをインストールする場合は、2 項目めにあるバージョン文字列を使ってインストールします。 たとえば5:18.09.1~3-0~debian-stretchとなります。

    $ sudo apt-get install docker-ce=<VERSION_STRING> docker-ce-cli=<VERSION_STRING> containerd.io
    
  3. Docker Engine が正しくインストールされているのを確認するため、hello-worldイメージを実行します。

    $ sudo docker run hello-world
    

    このコマンドはテスト用イメージをダウンロードし、コンテナー内で実行します。 コンテナーが起動すると、メッセージを表示して終了します。

Docker Engine がインストールされ、実行できました。 グループdockerが生成されていますが、このグループにはまだユーザーが存在していない状態です。 Docker コマンドの実行にはsudoが必要になります。 続いて Linux のインストール後 に進み、非特権ユーザーでも Docker コマンドが実行できるように、またその他の追加の設定について見ていきます。

Docker Engine のアップグレード

Docker Engine をアップグレードするには、まずsudo apt-get updateを実行します。 そしてインストール手順 に従って、インストールしたい新たなバージョンを選んでください。

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

Docker リポジトリを利用した Docker Engine のインストールができない場合は、目的とするリリースの.debファイルをダウンロードして、手動でインストールする方法があります。 この場合 Docker をアップグレードするには、毎回新たな.debファイルをダウンロードして利用することになります

  1. https://download.docker.com/linux/debian/dists/ にアクセスして、インストールしたい Debian バージョンを選びます。 そしてpool/stable/にアクセスし、amd64armhfarm64のいずれかを選び、インストールしたいバージョンの Docker Engine に対応する.debファイルをダウンロードします。

    メモ

    最新版(nightly)や テスト版(test)パッケージをインストールする場合は、 URL 内のstablenightlytestに変更してください。 最新版テスト版 チャンネルを学ぶにはこちら

  2. Docker Engine をインストールします。 以下に示すパス部分は、Docker パッケージをダウンロードしたパスに書き換えます。

    $ sudo dpkg -i /path/to/package.deb
    

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

  3. Docker Engine が正しくインストールされているのを確認するためhello-worldイメージを実行します。

    $ sudo docker run hello-world
    

    このコマンドはテスト用イメージをダウンロードし、コンテナー内で実行します。 コンテナーが起動すると、メッセージを表示して終了します。

Docker Engine がインストールされ、実行できました。 グループdockerが生成されていますが、このグループにはまだユーザーが存在していない状態です。 Docker コマンドの実行にはsudoが必要になります。 続いて Linux のインストール後 に進み、非特権ユーザーでも Docker コマンドが実行できるように、またその他の追加の設定について見ていきます。

Docker Engine のアップグレード

Docker Engine をアップグレードするには、インストール手順 に従って、インストールしたい新たなバージョンを選んでください。

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

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

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

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

ヒント: スクリプト実行前のインストールステップ確認

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

$ curl -fsSL https://get.docker.com -o get-docker.sh
$ DRY_RUN=1 sh ./get-docker.sh

以下は、このスクリプトを 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 ではこの便利スクリプトを test.docker.com からも提供しています。 これを使って Linux 上にプレリリース版の Docker をインストールできます。 このスクリプトはget.docker.comから入手するものと同等ですが、パッケージリポジトリ内の「テスト」チャネルから、パッケージマネージャーがインストールするものとして設定されています。 このスクリプトには 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 パッケージをアンインストールします。

    $ sudo apt-get purge docker-ce docker-ce-cli containerd.io
    
  2. ホスト上のイメージ、コンテナー、ボリューム、カスタマイズした設定ファイルは自動的に削除されません。 イメージ、コンテナー、ボリュームをすべて削除するには、以下を実行します。

    $ sudo rm -rf /var/lib/docker
    $ sudo rm -rf /var/lib/containerd
    

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

次のステップ

requirements, apt, installation, debian, install, uninstall, upgrade, update