Alpine Linuxのパッケージ管理システムapkについて理解を深める

APK is 何?

apk = Alpine Linux package management

Alpine Linuxのパッケージ管理システム

パッケージって何?

Linuxが採用しているアプリケーションの配布形態。アプリケーションによっては、正常に動作させるためには「ライブラリ」と呼ぶ別のプログラムを必要とすることがある。パッケージは、こうした動作に必要な各種プログラムやファイルをまとめたものである

xtech.nikkei.com

Alpine Linux に標準でインストールできるパッケージ

ここで調べられる

pkgs.alpinelinux.org

主なコマンド

apk update

利用可能パッケージのインデックスを更新

  • これを実行しても、インストールされたパッケージは更新されない
  • これから取ってくるパッケージの参照先を最新にする
  • Docker で使う場合、最初の方に書く

apk upgrade

現在インストールされているパッケージをアップグレード

  • 別のパッケージ管理システムの話ではあるが、 Docker ではなるべく使わずに、親 image に upgrade を依頼することを推奨している
親イメージの「必須」パッケージの多くは、権限のないコンテナ内ではアップグレードできないため、apt-get アップグレードや dist-upgrade を実行しないようにしてください。

qiita.com

apk add ${パッケージ名}

パッケージの追加

  • apk add curl gcc のように複数指定も可能

以下で各種オプションの解説をする

--no-cache

パッケージをキャッシュしなくするオプション

通常、ダウンロードされたパッケージは /var/cache/apk にキャッシュされる

DockerでImageサイズを削減するために RUN rm -rf /var/cache/apk とかしなくて良いので便利

--update-cache

apk update を実行するオプション

-U も同義

最初に、apk update を実行してるならば不要

  • 古いweb記事を見ると --update オプションを使用していることがあるが、公式ドキュメントの間違いらしい

qiita.com

--virtual ${名前}

インストールした複数のパッケージと依存関係を一つの仮想パッケージとして 名前 で保存

これを使うことで、--virtual で名前をつけたパッケージをまとめて削除できる

Dockerで bundle install するときだけ使うパッケージ(gccとか)を、これを使ってインストール後にまとめて削除することで、imageサイズを削減できる

apk del

パッケージの削除

--virtual

apk add --virtual で追加した仮想パッケージを削除

--purge

関連ファイルも削除してくれるらしい

参考

👇 公式の解説ドキュメント

wiki.alpinelinux.org