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この記事のコメント
メールアドレスが公開されることはありません。お気軽にコメントどうぞ。