CentOS8にDocker & Docker Composeをインストール

CentOS8にDocker & Docker Composeをインストール

RHEL8からコンテナーの構築/実行/管理をpodman、buildah、skopeo、runcコマンドを推奨しているようで、Docker、Docker Composeは標準インストールされていません。そのクローンOSであるCentOS8も同様となっています。

まずはよく目にするDockerでコンテナーの構築をしようと準備していたところ、既に用意しているCentOS8はこのような仕様だったので、インストールから始めたのでその手順をメモしておきます。

この後、DockerでDjango環境を構築をしているとpythonのインストール時にパッケージがインストールできずハマってしまいました。原因はDockerで作成した環境内で名前解決できずpip installでパッケージを見つけに行けなかったようです。最後に対応方法を記載しています。

作業環境

Virtualox 6.1.4
CentOS 8.1.1911

pondmanをアンインストール

デフォルトでCentoOS8にインストールされているpondmanをアンインストールします。残しておくとDockerと競合してしまうようです。

$ sudo dnf -y remove podman

Dockerをインストール

Dockerインストールエラー

そのままDockerをインストールしようとしてもパッケージが見つからないとエラーになります。

$ sudo dnf -y install --nobest docker-ce docker-ce-cli

一致した引数がありません: docker-ce
一致した引数がありません: docker-ce-cli
エラー: 一致するものが見つかりません: docker-ce docker-ce-cli

リポジトリを追加

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

Dockerをインストール

リポジトリの追加が出来たらDockerをインストールしますが、普通にインストールすると依存関係の問題でエラーとなるので、「--nobest」オプションを指定して依存関係のチェックをせずインストールします。

$ sudo dnf -y install --nobest docker-ce doccker-ce-cli

# 結果抜粋
 問題: package docker-ce-3:19.03.8-3.el7.x86_64 requires containerd.io >= 1.2.2-3, but none of the providers can be installed
  - cannot install the best candidate for the job
  - package containerd.io-1.2.10-3.2.el7.x86_64 is excluded
  - package containerd.io-1.2.13-3.1.el7.x86_64 is excluded
  - package containerd.io-1.2.2-3.3.el7.x86_64 is excluded
  - package containerd.io-1.2.2-3.el7.x86_64 is excluded
  - package containerd.io-1.2.4-3.1.el7.x86_64 is excluded
  - package containerd.io-1.2.5-3.1.el7.x86_64 is excluded
  - package containerd.io-1.2.6-3.3.el7.x86_64 is excluded

====================================================================================================
 パッケージ             Arch            バージョン                  リポジトリー              サイズ
====================================================================================================
インストール:
 docker-ce              x86_64          3:18.09.1-3.el7             docker-ce-stable           19 M
 docker-ce-cli          x86_64          1:19.03.8-3.el7             docker-ce-stable           40 M
依存関係のインストール:
 libcgroup              x86_64          0.41-19.el8                 BaseOS                     70 k
 containerd.io          x86_64          1.2.0-3.el7                 docker-ce-stable           22 M
壊れた dependencies のパッケージをスキップします:
 docker-ce              x86_64          3:19.03.8-3.el7             docker-ce-stable           25 M

2020/4/10時点での追加したリポジトリの関係で、docker-ceの最新バージョン19.03.8はスキップされています。それに伴い、containerd.ioは1.2.0-3がインストールされています。

containerd.ioとdocker-ceをアップデート

そのまま「dnf upgrade」コマンドを実行するとエラーになるので、順番にアップデートしていきます。

containerd.ioアップデート

まずはCentOS7のリポジトリを利用してcontainerd.ioをアップデートします。

$ sudo dnf -y update https://download.docker.com/linux/centos/7/x86_64/stable/Packages/

.
.
アップグレード済み:
  containerd.io-1.2.10-3.2.el7.x86_64

docker-ceアップデート

次にdocker-ceをアップデートします。

$ sudo dnf -y update docker-ce

.
.
アップグレード済み:
  docker-ce-3:19.03.8-3.el7.x86_64

Dockerの起動と自動起動を有効化

osを起動したときにdockerも起動するように設定しておきます。

# 自動起動の有効化
$ sudo systemctl enable docker
# サービスの再起動
$ sudo systemctl reload

dockerのバージョンを確認してみます。

$ docker --version

Docker Comoseインストール

Docker Composeのリリースノートから最新バージョンをインストールします。

リリースされている最新バージョンを確認

githubにアクセスして「Latest releae」と書かれたバージョンを見つけます。見つけたらインストールに必要なコマンドが記載されているのでコピーします。

「docker-composeのインストール」と「パーミッションの変更」の2つのコマンドが記載されています。

Docker Composeをインストール

先ほどコピーしたコマンドを実行してインストールします。

# 2020.4.10時点での最新バージョン1.25.4をインストール
$ curl -L https://github.com/docker/compose/releases/download/1.25.4/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

RHEL/CentOSの場合はバイナリファイルをダウンロードしてきます。ダウンロード先は/usr/local/binです。

パーミッションの変更

ダウンロードしたバイナリファイルに実行権限を付与します。

$ chmod +x /usr/local/bin/docker-compose

Docker Composeのバージョン確認

動作確認の為にバージョン確認をしてみます。

# バージョン確認
$ docker-compose --version

最後にfirewallの変更

CentOSの場合、Docker内の環境で名前解決が出来ません。実際にDjangoの環境を構築しようとした際にPythonのpip installでパッケージをインストールするところでエラーとなり、暫くはまってしまいました。

参考までにエラーの一部を載せておきます。

# pip installでエラー発生
Step 6/7 : RUN pip install -r requirements.txt
 ---> Running in 2e0fa1ece9e0
WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno -3] Temporary failure in name resolution',)': /simple/django/

firewallでホスト側のIPアドレスを共有しておくことで回避できるそうです。ここでは詳しい説明はしません。興味があれば「NAPTやIPマスカレード」で調べてみてください。

$ sudo firewall-cmd --add-masquerade --permanent
# サービスを再起動
$ sudo firewall-cmd --reload

これでCentOS8にDocker & Docker Composeの環境ができました。

Commentsこの記事のコメント

メールアドレスが公開されることはありません。お気軽にコメントどうぞ。

人気記事