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

読む時間の目安: 4 分

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

前提条件

OS 要件

Docker Engine をインストールするには保守対象の CentOS 7 または 8 が必要です。 古いバージョンはサポートもテストも行っていません。

centos-extrasリポジトリを有効にすることが必要です。 このリポジトリはデフォルトでは有効になっていますが、もし無効にしている場合は、もう一度有効に する必要があります。

overlay2ストレージドライバーの利用が推奨されます。

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

Docker のかつてのバージョンは、dockerあるいはdocker-engineと呼ばれていました。 これがインストールされている場合は、関連する依存パッケージも含めアンインストールしてください。

$ sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

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

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

インストール手順

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

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

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

  • テスト環境や開発環境向けに、自動化された便利なスクリプトを使って Docker のインストールを行うユーザーもいます。

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

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

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

yum-utilsパッケージをインストールします。 (このパッケージがyum-config-managerユーティリティーが提供されます。) そして 安定版(stable)リポジトリを設定します。

$ sudo yum install -y yum-utils

$ sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

任意の作業

最新版(nightly)または テスト版(test)リポジトリの有効化

このリポジトリは上記のdocker.repoファイルに含まれていますが、デフォルトで無効になっています。 このリポジトリを 安定版(stable)リポジトリとともに有効にします。 以下のコマンドは 最新版 リポジトリを有効にします。

$ sudo yum-config-manager --enable docker-ce-nightly

テスト版 チャネルを有効にする場合は、以下のコマンドを実行します。

$ sudo yum-config-manager --enable docker-ce-test

最新版 リポジトリ、 テスト版 リポジトリを無効にするにはyum-config-managerコマンドに--disableフラグをつけて実行します。 以下のコマンドは 最新版 リポジトリを無効にします。

$ sudo yum-config-manager --disable docker-ce-nightly

最新版テスト版 チャネルについて学ぶのはこちら

Docker Engine のインストール

  1. Docker Engine、containerd、Docker Compose の最新版をインストールします。 あるいは次の手順に行って、特定のバージョンをインストールします。

    $ sudo yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin
    

    GPG 鍵を受け入れるかどうか問われたら、鍵の指紋が060A 61C5 1B55 8A7F 742B 77AA C52F EB6B 621E 9F35に間違いないことを確認し、鍵を受け入れてください。

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

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

    このコマンドにより Docker がインストールされましたが、まだ起動はしていません。 グループdockerが生成されていますが、このグループには、デフォルトではまだユーザーが存在していない状態です。

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

    a. リポジトリ内にある利用可能なバージョンを並びかえて一覧表示します。 以下の例では出力結果をバージョン番号によりソートします。 一覧は最新のものが上に並びます。バージョンは簡略に表示されます。

    $ yum list docker-ce --showduplicates | sort -r
    
    docker-ce.x86_64  3:18.09.1-3.el7                     docker-ce-stable
    docker-ce.x86_64  3:18.09.0-3.el7                     docker-ce-stable
    docker-ce.x86_64  18.06.1.ce-3.el7                    docker-ce-stable
    docker-ce.x86_64  18.06.0.ce-3.el7                    docker-ce-stable
    

    この一覧内容は、どのリポジトリを有効にしているかによって変わります。 また利用している CentOS のバージョンに応じたものになります(この例では.e17というサフィックスにより示されるバージョンです)。

    b. 特定のバージョンをインストールする場合は、有効なパッケージ名を用います。 これはパッケージ名(docker-ce)に加えて、バージョン文字列(2項目め)の初めのコロン(:)から初めのハイフン(-)までを、ハイフンでつなげます。 たとえばdocker-ce-18.09.1となります。

    $ sudo yum install docker-ce-<バージョン文字列> docker-ce-cli-<バージョン文字列> containerd.io docker-compose-plugin
    

    このコマンドにより Docker がインストールされましたが、まだ起動はしていません。 グループdockerが追加されていますが、このグループには、デフォルトではまだユーザーが存在していない状態です。

  3. Docker を起動します。

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

     $ sudo docker run hello-world
    

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

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

Docker Engine のアップグレード

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

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

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

  1. https://download.docker.com/linux/centos/ にアクセスして、インストールしている CentOS のバージョンを選択します。 そしてx86_64/stable/Packages/を表示し、インストールしたい.rpmファイルをダウンロードします。

    メモ

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

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

    $ sudo yum install /path/to/package.rpm
    

    Docker はインストールされましたが、まだ起動はしていません。 グループdockerが追加されていますが、このグループにはまだユーザーが存在していない状態です。

  3. Docker を起動します。

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

    $ sudo docker run hello-world
    

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

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

Docker Engine のアップグレード

Docker Engine をアップグレードする場合は、新たなパッケージファイルをダウンロードして、インストール手順 をもう一度行います。 その際にはyum -y installでなくyum -y upgradeを実行します。 またパッケージには新しいものを指定します。

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

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、Docker Compose パッケージをアンインストールします。

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

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

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

次のステップ

requirements, apt, installation, centos, rpm, install, uninstall, upgrade, update