Alpine LinuxをベースにしたDockerイメージを構築するためのDockerfile
を持っています。このDockerfile
の一部としてパッケージをインストールする必要があります
現在、私は持っています
RUN apk update && \
apk upgrade && \
apk add git
どうやら、結果が非決定論的になるので、これは良くない考えのようです。その代わり、イメージをビルドした時点でどのバージョンのgit
がインストールされているかに依存します
正しいやり方とは?
updated
, upgrade
, add
のどのバージョンを使えばいいのか教えてあげないといけないと思うのですが、どうすればいいのでしょうか?
apk
がリポジトリのピン留めをサポートしているのを見たことがありますが、リポジトリではなくパッケージをピン留めしたいので、それは私が望むものではありません(少なくとも私はそう思っています)
言い換えればgit
がnpm
を経由してインストールできれば、実行できるのに
npm install git@1.9.2
(または私が欲しいバージョン)。アルパインリナックスの場合はこれに相当するものがあるのでしょうか?
124 Golo Roden 2016-03-20
こんな感じで「べたべた」バージョンを設定できます
# 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 パッケージレポの “edge” ブランチのパッケージをピン留めしないでください。(pkgs.alpinelinux.org/packages で “edge” をクリックして、使用している alpine イメージのバージョンに変更してから、再度 “search” をクリックしてください)
カウリネーターによる追加情報です
パッケージを正確なバージョンに固定すると、そのパッケージが レポから削除され、あなたの Dockerfile
が将来ビルドに失敗するリスクがあります。公式勧告はここで読むことができます
あるいは、正確なバージョンではなく、パッケージの最小バージョンを設定することもできます
現在のところ、ビルドされたすべてのパッケージをインフラスに無期限に保存するリソースを持っていません。そのため、現在は各安定版ブランチの最新版のみを保存しており、これまでもそのようにしてきました
…
将来的には、すべてのパッケージに Alpine というタグを付けておくという議論がありましたが、これはまだ「進行中」です。しかし、これはまだ「進行中」です。公式な推奨事項としては、あなた自身のミラー/リポジトリに、あなたが使いたいと思うすべての特定のパッケージとそのバージョンを保存しておくことです
– ティモ・テラース、@fabled(アルペン)
Alpine Linuxの完全な組織リポジトリは、このセルフホスティングされたGitLabインスタンスで見つけることができます
116 kaiser 2016-03-29
現在のところ、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
20 Vlad Frolov 2016-03-25
alpineパッケージをapkでピン留めするための構文はapk add packageName=x.y.z
です
最小バージョンを設定するには、apk add packageName>x.y.z
を使用します
Example:
FROM alpine:3.3
RUN apk update && apk upgrade
RUN apk add --no-cache \
git=2.8.6-r0 \
bash=4.3.42-r6 \
python3=3.5.1-r0
しかし、アルパインの公式パッケージレポは、どのブランチからでもパッケージのバージョンを落とすことができますつまり、Dockerfileでパッケージを正確なバージョンにピン留めしてしまうと、将来的にDockerfileが動作しなくなる可能性があるということです
正確なパッケージのバージョンを固定するための公式な推奨事項は、使用したいと思われるすべての特定のパッケージとそのバージョンのミラー/リポジトリを自分のものにしておくことです
別の方法として、正確なピン留めされたパッケージのバージョンではなく、最小のパッケージのバージョンを使用することもできます
5 cowlinator 2020-02-14
ヴラド・フロロフはすでに答えを出しています。私はdockerソリューションを書いています。私はv3.8リポジトリからいくつかのパッケージを追加しようとしていました
- http://dl-cdn.alpinelinux.org/alpine/ 古いアーカイブを参照して、あなたのソフトウェアの特定のリポジトリのバージョンを取得します
- リポジトリのバージョンを取得したら、dockerファイルにバージョンを追加します
リポジトリからパッケージの正確なバージョンを指定します
RUN echo 'http://dl-cdn.alpinelinux.org/alpine/v3.8/main' >> /etc/apk/repositories RUN apk update RUN apk --no-cache add ca-certificates=20190108-r0 gettext=0.19.8.1-r2 postfix=3.3.0-r4 rsyslog=8.34.0-r1 libsasl=2.1.26-r15
3 maruf571 2020-02-26
testing
のレポを使っていたので結局自分で作ることになりました。ステップです
パッケージの詳細へ例
コミットをクリックして、APKBUILDファイルのリンクをクリックし、メニューの「ログ」をクリックすると、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
エラーを把握して依存関係をインストールする必要があるかもしれません。私の例では、既存のDockerイメージをroot
として、これを行う必要がありました
apk add python-dev
packager
としてビルドに成功したら、root
としてインストールしてください
apk add /home/packager/packages/<something...>/watchman-4.7.0-r0.apk --allow-untrusted
--allow-untrusted
の部分を削除する方法はわかりませんが、手順は私のために機能しました
2 s12chung 2018-08-21