zaki work log

作業ログやら生活ログやらなんやら

古いバージョンのDockerをインストールする

事情によりクローズドな環境などで古いバージョンのDockerを運用で使い続けている中で、その調査・検証用に同じバージョンのシステムを構築したくなった、とか。

基本的には、古いパッケージファイルを探してきて手動(rpmdpkg)でインストールすれば良い。

Dockerのパッケージファイル

Dockerのサイトにアーカイブがある。

download.docker.com

OS・ディストリビューション毎のパッケージファイルがダウンロードサイトにある。
ディストリビューションのバージョン毎に、その時期のDockerバージョンがアーカイブされている。
時間差があるような(新しいFedoraに古いDockerを入れる、みたいな)場合は、プラットフォームバージョン側のバージョンを落として探してみると良い。

以下はディレクトリ例。他のバージョンはディレクトリを上下して探す。

例えばFedora 40にDocker 20.10.17をインストールする場合であれば、必要なパッケージは以下 (Fedora 40向けにDocker 20.xは無いので36用のパッケージを使う)

  • docker-ce-20.10.17-3.fc36.x86_64.rpm
  • docker-ce-cli-20.10.17-3.fc36.x86_64.rpm
  • docker-ce-rootless-extras-20.10.17-3.fc36.x86_64.rpm
  • containerd.io-1.6.4-3.1.fc36.x86_64.rpm

Ubuntu 24.04にDocker 20.10.24をインストールするには以下のパッケージ (Ubuntu 24.04向けにDocker 20.xは無いのでry)

※ バージョン番号がそろってないcontainerd.ioは適当。再現したい環境のバージョンやダウンロードサイトのタイムスタンプなどから判断する。

足りないパッケージがある場合は以下のようにエラーが出力されるので、それに従ってdnfaptで追加すればよい。

[zaki@fedora40-dev docker-20]$ ls
containerd.io-1.6.4-3.1.fc36.x86_64.rpm  docker-ce-cli-20.10.17-3.fc36.x86_64.rpm
docker-ce-20.10.17-3.fc36.x86_64.rpm     docker-ce-rootless-extras-20.10.17-3.fc36.x86_64.rpm
[zaki@fedora40-dev docker-20]$ sudo rpm -ivh *
warning: containerd.io-1.6.4-3.1.fc36.x86_64.rpm: Header V4 RSA/SHA512 Signature, key ID 621e9f35: NOKEY
error: Failed dependencies:
        libcgroup is needed by docker-ce-3:20.10.17-3.fc36.x86_64
        slirp4netns >= 0.4 is needed by docker-ce-rootless-extras-0:20.10.17-3.fc36.x86_64

Docker Composeのインストール

現在はdockerプラグイン(サブコマンド)として使えるDocker Composeは以前は専用コマンドだったので別途入れる必要があった。
GitHubに過去バージョン含めて残っているので、そこから取得すればOK

例えば1.29.2であれば以下から直接バイナリをダウンロードし、/usr/local/bin/docker-composeあたりに配置し実行権限を付与する。

https://github.com/docker/compose/releases/tag/1.29.2

sudo curl -L https://github.com/docker/compose/releases/download/1.29.2/docker-compose-Linux-x86_64 -o /usr/local/bin/docker-compose
sudo chmod 755 /usr/local/bin/docker-compose 

Fedoraで発生したけど、libcryptのエラーが出る場合

$ docker-compose version
[21740] Error loading Python lib '/tmp/_MEIy05DAM/libpython3.7m.so.1.0': dlopen: libcrypt.so.1: cannot open shared object file: No such file or directory

Fedoraであれば

$ sudo dnf search libxcrypt

これで動く

[zaki@fedora40-dev docker-20]$ docker-compose version
docker-compose version 1.29.2, build 5becea4c
docker-py version: 5.0.0
CPython version: 3.7.10
OpenSSL version: OpenSSL 1.1.0l  10 Sep 2019

毎回言ってはいるんだけどね。「運用にバージョンアップを組み込め」と。。