Alpine LinuxをベースにしたDockerイメージを構築するためのDockerfile
があります。今度はこのDockerfile
の一部としてパッケージをインストールする必要があります。
現在私は持っています:
RUN apk update && \
apk upgrade && \
apk add git
結果は非決定的なので、どうやらこれは悪い考えです。代わりに、それは私がイメージを構築した時点、どのバージョンのgit
がインストールされようとしているかに依存します。
これを行う正しい方法は何ですか?
updated
、upgrade
、add
のどのバージョンを使用するのかを指示する必要があると思いますが、どうすればよいでしょうか。
私はapk
がリポジトリの固定をサポートしていることを見ましたが、リポジトリを固定するのではなくパッケージを固定したいので、それは私が望んでいることではありません(少なくともそう思う)。
言い換えれば、git
がnpm
経由でインストールできれば、私は実行することができるでしょう:
npm install [email protected]
(または私が欲しいどんなバージョンでも)。 Alpine Linuxのこれと同等のものは何ですか?
あなたはこのような "スティッキー"バージョンを設定することができます:
# Both are equal
apk add packagename=1.2.3-suffix
apk add 'packagename<1.2.3-suffix'
指定されたバージョンまでパッケージをアップグレードします。あなたはその後安全に使用することができます…
apk upgrade
すべてのパッケージをアップグレードしますが、バージョンのあるパッケージはそのバージョンのままになります。 最小バージョンを設定するには、単に…を使ってください。
apk add "packagename>1.2.3-suffix"
パッケージが見つからない場合は、AlpineパッケージのUIに表示されますが、ソース/パッケージデータベースを更新してください。
apk update
パッケージリポジトリはここで見つけることができます:
https://pkgs.alpinelinux.org/packages
現在、Alpine Linuxの公式リポジトリから任意の古いバージョンのパッケージをインストールする方法はありません。あなたが達成できる最善のことは、以前のリリースのリポジトリを使うことです。
# cat /etc/Alpine-release
3.3.3
# echo 'http://dl-cdn.alpinelinux.org/Alpine/v3.2/main' >> /etc/apk/repositories
# apk update
fetch http://dl-cdn.alpinelinux.org/Alpine/v3.3/community/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/Alpine/v3.3/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/Alpine/v3.2/main/x86_64/APKINDEX.tar.gz
# apk add bash==4.3.33-r0
(1/1) Updating pinning bash (4.3.33-r0)
OK: 13 MiB in 17 packages
# apk add bash==4.3.42-r3
(1/2) Upgrading bash (4.3.33-r0 -> 4.3.42-r3)
Executing bash-4.3.42-r3.post-upgrade
(2/2) Purging ncurses5-libs (5.9-r1)
Executing busybox-1.24.1-r7.trigger
OK: 13 MiB in 16 packages
私はtesting
リポジトリを使っていたからです。私は自分でコピーを作った。ステップ:
パッケージの詳細に行きます。例:
https://pkgs.alpinelinux.org/package/Edge/testing/armhf/watchman
コミットをクリックし、APKBUILDファイルのリンクをクリックし、メニューの "Log"をクリックしてAPKBUILDファイルのコミットログを取得します。次に、APKBUILDファイルのコミットを選択してダウンロードします。例:
ビルドツールをインストールします。
apk -U add Alpine-sdk
root
ユーザーではない必要があるので、パスワードを使用してpackager
ユーザーを作成します。
adduser -D packager && addgroup packager abuild
passwd packager
それからAPKBUILDファイルと同じディレクトリにpackager
としてそれを構築します。
su - packager
abuild-keygen -a -i
abuild -r
エラーを見つけて依存関係をインストールする必要があるかもしれません。私の例では、root
として私の既存のDockerイメージにこれをする必要がありました:
apk add python-dev
packager
としてビルドが成功したら、root
としてインストールします。
apk add /home/packager/packages/<something...>/watchman-4.7.0-r0.apk --allow-untrusted
--allow-untrusted
部分を削除する方法がわからないが、手順は私のために働いた。