メインコンテンツまでスキップ

CentOS に Docker をインストールする

· 約7分

昨今のコンテナ技術の流行に伴い、Docker のインストール方法を学ぶことも極めて重要になっています。

Docker 公式ドキュメントのインストール手順自体は複雑ではありませんが、中国国内のネットワーク環境でそのまま実行すると、ダウンロード速度がボトルネックになりがちです。また、本番環境では通常 Docker のバージョンを固定したり、イメージの保存場所を調整したりする必要がありますが、こうした細かい点は公式ドキュメントでは分散して書かれています。この記事では、私が CentOS に Docker をインストールした一連の流れを、インストール後のよく使う設定も含めて整理しておきます。今後の再インストール時にそのまま打ち込めるようにするためです。

インストール手順

1)対応する yum ツールパッケージをインストールする

# yum-utils は yum-config-manager ツールを提供し、後でリポジトリを追加するのに使う
# device-mapper-persistent-data と lvm2 は devicemapper ストレージドライバの依存パッケージ
sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2

このステップでインストールするのはすべて基本ツールです。yum-config-manager は次のステップでリポジトリを追加するのに使うコマンドで、残りの 2 つのパッケージはストレージドライバ関連の依存です。まとめて入れておけば後でエラーになる心配がありません。

2)国内ミラーソースを設定し、Docker のダウンロードを高速化する

# アリババクラウドの docker-ce リポジトリを追加し、公式ソースの代わりにする
sudo yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

Docker の公式ソースは中国国内からのダウンロードが非常に遅く、タイムアウトすることさえあります。アリババクラウドのミラーリポジトリに切り替えると、パッケージのダウンロード速度がかなり正常になります。このコマンドは実際には repo ファイルを /etc/yum.repos.d/ ディレクトリに書き込むもので、以降 yum はこのリポジトリから docker 関連のパッケージを検索できるようになります。

3)利用可能なバージョンのパッケージを一覧表示する

# リポジトリ内の利用可能な docker-ce の全バージョンを、バージョン番号の降順で一覧表示
yum list docker-ce --showduplicates | sort -r

--showduplicates パラメータを付けると、最新版だけでなくリポジトリ内のすべての過去バージョンが一覧表示されます。出力の 2 列目がバージョン文字列で、次のステップでバージョン指定インストールをするときに使います。

4)指定バージョンの Docker をインストールする

# <VERSION_STRING> を前のステップで調べたバージョン文字列に置き換える
sudo yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io

例:対応する Docker バージョンを指定する場合。

# 20.10.9 バージョンを指定してインストール。docker-ce と docker-ce-cli のバージョンは揃える
sudo yum install docker-ce-20.10.9-3.el7 docker-ce-cli-20.10.9-3.el7 containerd.io

ここでは一度に 3 つのパッケージをインストールしており、それぞれ役割が異なります。docker-ce はデーモン(dockerd)、docker-ce-cli はコマンドラインクライアント、containerd.io は下層のコンテナランタイムで、コンテナの作成とライフサイクル管理を実際に担います。バージョンを指定せずに yum install docker-ce を実行すると、リポジトリの最新版がインストールされます。本番環境ではバージョンを固定し、マシンごとにバージョンが揃わないことによる差異を避けることをおすすめします。

5)Docker サービスを起動する

sudo systemctl start docker

起動後は docker info または docker version を実行してデーモンが正常に動いていることを確認できます。ここまででインストールは完了です。

発展的な知識

1)Docker のデフォルトイメージ保存先の変更、イメージダウンロード元の変更

Docker はデフォルトでイメージやコンテナのデータを /var/lib/docker ディレクトリに保存します。多くのサーバーではルートパーティションの容量が限られており、イメージをたくさん pull するとルートパーティションを埋め尽くしがちなので、通常は保存ディレクトリを容量の大きいデータディスクに移します。同時に、Docker Hub からのイメージ取得も中国国内では遅めなので、国内のレジストリミラーのアドレスを設定すると明らかに改善します。この 2 つはどちらも daemon.json で設定します。

1、vim で /etc/docker/daemon.json ファイルを編集する

# このファイルはデフォルトでは存在せず、vim で開いて保存すれば作成される
vim /etc/docker/daemon.json

2、data-root に対応する値を入力してイメージ保存先を変更し、registry-mirrors に対応する値を入力してイメージダウンロード元を変更します。配列なので複数のアドレスを設定でき、カンマで区切ります。

{
"data-root": "/home/docker-data",
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn/"]
}

ここのミラーアドレスには中国科学技術大学のミラーサイトを使っています。registry-mirrors は配列で複数のアドレスを設定でき、Docker はイメージ取得時に順番に試行します。

daemon.json ファイルの編集が完了したら、Docker の再起動コマンドを実行します。

service docker restart

その後 docker info コマンドを実行して、変更した設定が反映されているか確認します。反映されていれば、docker info の出力の Docker Root Dir に新しい保存パスが表示され、Registry Mirrors の欄に設定したミラーアドレスが列挙されます。

2)Docker サービスを自動起動に登録する

# システムサービスとして登録し、サーバー再起動後に docker が自動起動するようにする
systemctl enable docker

サーバーの再起動は避けられないものです。このステップを忘れると、再起動後にコンテナが全部立ち上がらず、手動で Docker サービスを起動しに行く羽目になります。インストールが終わったらついでに自動起動を設定しておきましょう。

ハマりどころと注意点

  • daemon.json は厳格な JSON フォーマットです。カンマが 1 つ多い、引用符が 1 つ足りないだけで Docker の起動が失敗します。設定変更後の再起動でエラーが出たら、まずこのファイルの構文をチェックしてください。
  • data-root の変更は新しいディレクトリに切り替えるだけで、元の /var/lib/docker 配下にある既存のイメージやコンテナのデータは自動では移行されません。必要な場合は自分でコピーしてから再起動してください。
  • バージョン指定インストールでは、docker-cedocker-ce-cli のバージョン文字列を揃える必要があります。混在させるとクライアントとデーモンの非互換の警告が出ることがあります。
  • インストール前にマシンに旧バージョンの Docker(パッケージ名が dockerdocker-engine の古いパッケージなど)がある場合は、競合を避けるため、先にきれいにアンインストールしてから docker-ce をインストールすることをおすすめします。

まとめ

インストールの流れ全体は、ツールパッケージのインストール、国内ソースへの切り替え、バージョンの確認、指定バージョンのインストール、サービスの起動、という 5 ステップにまとめられます。インストールが終わってもすぐに使い始めず、まずイメージ保存パス、レジストリミラー、自動起動の 3 項目を設定しておきましょう。どれも一度設定すれば長く恩恵を受けられるものです。今後新しいマシンを初期化するときは、このノートに沿って上から順に実行すれば OK です。

COMMENTS