最終更新日 2022年1月28日
docker-installリポジトリで配布されているスクリプトを使えば、CentOS 8では簡単に Docker Engine をセットアップできました。同じように、派生ディストリビューションである Rocky Linux や AlmaLinux でも、このスクリプトが使えるかどうかを調べたところ、あるファイルの編集で、対応できるのが分かりました。
「便利なスクリプト」を使う方法
Docker をセットアップする手順は、大きく2つあります。それは、 dnf
や yum
を使う「丁寧な」インストール手順と、GitHub の docker-install リポジトリで公開されている 「便利なスクリプト」 を使う方法です1公式ドキュメントには “convenience script” としてインストール方法のページで紹介 https://docs.docker.com/engine/install/centos/#install-using-the-convenience-script。
CentOS 8 や CentOS Stream 8 でセットアップをするには、丁寧なインストール方法が、ネット上で散見されるような設定手順やメモだけでなく、ちょっとした書籍でも紹介されていますので、こちらの手順がデフォルトの様に思われがち。
ですが、ちょっと Docker を入れてみたい、簡単に使いたい場合であれば、後者の便利なスクリプトを使う方法のほうが手軽でお勧めです。ちなみに、このスクリプトは Debian、 Ubuntu、Fedora に対応しています。
この便利なスクリプトを使うには、 get.docker.com というホスト名を覚えておくだけ。セットアップ用のドキュメントを書かなくても、ウェブブラウザや curl
コマンドで https://get.docker.com/ を開くと、そのまま手順が画面に出ます。
このように、8~9行目にかけて、「get.docker.comをcurlでget-docker.shに出力」、シェルスクリプトとして「sh get-docker.shを実行」しなさい、と画面に出ています。
ですので、実際に Linux 上での操作としては
$ curl https://get.docker.com | head
(ここで画面に表示されたスクリプトを確認)
$ sudo sh ./get-docker.com
$ sudo systemctl enable docker.service
$ sudo systemctl start docker.service
これだけで済みます。1行目、 curl
をパイプして head
を付けているのは、冒頭のインストール手順だけを確認したいからです。get.docker.com の表示結果そのものが、スクリプト全体を表示してしまいます。
ウェブブラウザであれば気に掛ける必要はないでしょうが、コマンドラインで crul
を実行すると、冒頭の手順は上のほうに流れてしまい、画面をスクロールさせるという手間が出てしまうからです。
注意点
注意点は、常に最新の安定版 Docker Engine を自動インストールするところ。
最近は安定版のリリース間隔が1年くらいと長いため、あまり気にしなくても良いかもしれませんが、どうしても特定のバージョンで動かさなくてはいけない場合には気にかけておいたほうが良いでしょう2以前は公式ドキュメント内で、本番環境での利用は推奨しないといった書き方がありました。過去の Docker Engine の頻繁なリリースを受けてと思われますが、最近では、リリースまでの間隔が長くなったり、非推奨となる機能はあまり見なかったりしますので、厳密な環境構築が必要なければ、気にしなくてもよいでしょう。。
DRY_RUN オプション
ちなみに、DRY_RUN
(試運転)オプションもあり、インストール前に正常にスクリプトが実行できるかどうかを確認できます。
DRY_RUN=1 sh ./get-docker.sh
このコマンドを実行すると、インストールされないものの、実際にインストールする手順が画面に表示されます。
# Executing docker install script, commit: 93d2499759296ac1f9c510605fef85052a2c32be
yum install -y -q yum-utils
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum makecache
yum install -y -q docker-ce
yum install -y -q docker-ce-rootless-extras
もし、1つ1つの手順を手作業で進めたい、そのほうが安心できるという場合であれば、ここで表示された yum
コマンドを実行するのも、一つの手でしょう。
Rocky Linux や Alma Linux では?
さて、この Docker のインストールに便利なスクリプトですが、対応しているのは CentOS Stream 8 または CentOS 7.x 系および8.x 系3CentOS 8 は 2021年12月31日で EOL(End of Life)であり、以降の開発が終了しています https://www.centos.org/centos-linux-eol/のみです。
そのため、Rocky Linux や AlmaLinux でスクリプトを実行しようとしても、次のように「Unsupported distribution ‘rocky’」(サポート外のディストリビューション)とメッセージが表示され、自動セットアップはできません。
# DRY_RUN=1 sh ./get-docker.sh
# Executing docker install script, commit: 93d2499759296ac1f9c510605fef85052a2c32be
ERROR: Unsupported distribution 'rocky'
このようにスクリプトは対応していないというエラーメッセージを表示し、処理は終了します。
ですが、基本的に Rocky や Alma は CentOS 8 の派生ですから、Docker Engine をインストールする手順も共通です。
そうであれば、スクリプトも Rocky や Alma にも対応できるはず……そう思い、スクリプトの中を見ていると、それらしい場所がありました。
get_distribution() {
lsb_dist=""
# Every system that we officially support has /etc/os-release
if [ -r /etc/os-release ]; then
lsb_dist="$(. /etc/os-release && echo "$ID")"
fi
# Returning an empty string here should be alright since the
# case statements don't act unless you provide an actual value
echo "$lsb_dist"
}
ちょうどこのあたりです。
スクリプトが対象ディストリビューションかどうかを判別しているのは、ファイル「/etc/os-release」の中身にある「ID=”xxx”」の場所。つまり、このように「centos」であると認識できれば、スクリプトは実行できます。
$ echo $(. /etc/os-release && echo "$ID")
centos
/etc/os-release を編集して対応
ここまで分かれば、あとは簡単です。vi /etc/os-release
などを実行してファイルを編集し、3行目の「ID=」を「centos」に書き換えるだけです。
以下は Rocky Linux のファイルを書き換えた場合。
NAME="Rocky Linux"
VERSION="8.5 (Green Obsidian)"
#ID="rocky"
ID="centos"
(以下省略)
ファイルを保存後、実行する前にまずはドライランを走らせます。 DRY_RUN=1 sh ./get-docker.sh
の実行です。
# DRY_RUN=1 sh ./get-docker.sh
# Executing docker install script, commit: 93d2499759296ac1f9c510605fef85052a2c32be
yum install -y -q yum-utils
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum makecache
yum install -y -q docker-ce
yum install -y -q docker-ce-rootless-extras
この通り、先ほどとは違ってエラーも出ません。
あとは、普通に sh ./get-docker.sh
を実行するだけです。
# sh ./get-docker.sh
# Executing docker install script, commit: 93d2499759296ac1f9c510605fef85052a2c32be
+ sh -c 'yum install -y -q yum-utils'
インストール済み:
yum-utils-4.0.21-3.el8.noarch
(省略)
+ return 0
+ sh -c 'yum install -y -q docker-ce-rootless-extras'
================================================================================
To run Docker as a non-privileged user, consider setting up the
Docker daemon in rootless mode for your user:
dockerd-rootless-setuptool.sh install
Visit https://docs.docker.com/go/rootless/ to learn about rootless mode.
To run the Docker daemon as a fully privileged service, but granting non-root
users access, refer to https://docs.docker.com/go/daemon-access/
WARNING: Access to the remote API on a privileged Docker daemon is equivalent
to root access on the host. Refer to the 'Docker daemon attack surface'
documentation for details: https://docs.docker.com/go/attack-surface/
================================================================================
このように見慣れた表示が行われました。
あとは、自動起動の設定を済ませるだけです。
$ sudo systemctl enable docker.service
$ sudo systemctl start docker.service
これで Docker Engine のセットアップが終わり、 docker
コマンドが自由に使えます。
最後に /etc/os-release ファイルを戻す
インストールが終わったあとは、 編集したファイル /etc/os-relase
ファイルの記述を元に戻します。Rocky Linux であれば、 ID="rocky"
としておきます。AlmaLinux は ID="almalinux"
です。
NAME="Rocky Linux"
VERSION="8.5 (Green Obsidian)"
ID="rocky"
(以下省略)
あくまでも、スクリプトに一時的に対応させるだけですから、必ず元に戻すのを忘れないようにする必要があります。
Enjoy!
- 1公式ドキュメントには “convenience script” としてインストール方法のページで紹介 https://docs.docker.com/engine/install/centos/#install-using-the-convenience-script
- 2以前は公式ドキュメント内で、本番環境での利用は推奨しないといった書き方がありました。過去の Docker Engine の頻繁なリリースを受けてと思われますが、最近では、リリースまでの間隔が長くなったり、非推奨となる機能はあまり見なかったりしますので、厳密な環境構築が必要なければ、気にしなくてもよいでしょう。
- 3CentOS 8 は 2021年12月31日で EOL(End of Life)であり、以降の開発が終了しています https://www.centos.org/centos-linux-eol/