Linux / コマンド / apk - Alpine Linux パッケージのインストール・削除とリポジトリの更新

apkはAlpine Linuxのパッケージ管理コマンドです。リポジトリのパッケージ検索・追加・削除およびアップグレードに使われ、Alpineのインストール方法によって変更点の保持手順が異なる場合があります。

apkはAlpine Package Keeperの略です。/etc/apk/worldには利用者が要求する最上位のパッケージ制約が記録され、依存関係として入るすべてのパッケージの一覧ではありません。addは制約を追加し、delは外して必要な変更を反映します。ディスクレス構成では、変更の保存・次回起動時の復元方法も確認します。

基本的な文法

apk [グローバルオプション] コマンド [パッケージ ...]

インストールされている実装とオプションは、配布版によって異なる場合があります。man apkで現在のシステムの説明を確認してください。

使用例

パッケージ検索

リポジトリで名前が一致する候補を探します。

apk search nginx

パッケージのインストール

以下のsudoは、sudoが導入・設定済みの一般ユーザー向けです。Alpineにsudoがあるとは限らず、正規の管理用rootシェルならsudoを外して実行します。先にapk add --simulate nginxで予定を確認し、必要な依存関係も含めて追加内容を判断してください。

sudo apk add nginx

リポジトリ情報の更新とアップグレード

updateで情報を取得し、成功を確認してからapk upgrade --simulateで予定を調べます。その後に実際のupgradeを実行します。2行を無条件にまとめて実行しないでください。apkは既定で非対話的に動作するため、実行後に必ず承認を求められるとは考えないでください。

sudo apk update
sudo apk upgrade

インストールの有無とリポジトリ更新の区別

apk info -eは、指定したパッケージがインストールされているかどうかを名前で確認します。Alpineの基本環境でbusyboxがインストールされている場合、次のように表示されます。

apk info -e busybox

例の出力:

busybox

apk updateはリポジトリのインデックスを更新するだけで、インストールされたパッケージのバージョンは変更しません。インストール済みパッケージを実際にアップグレードするにはapk upgradeが必要です。disklessモードや使い捨てコンテナでは、パッケージの変更が再起動・再生成後にも残るかどうかを運用方法に応じて確認してください。

主なオプションと形式

オプション・形式 説明
search / info リポジトリのパッケージを検索したり、詳細情報を表示します。
add / del 希望するパッケージ制約を追加または削除します。
update リポジトリインデックスを更新します。
upgrade インストール済みパッケージを可能な限りバージョンアップします。
--no-cache ローカルキャッシュを使用しない指定です。対応する指定は手元のヘルプで確認します。

使用する際の注意点

apk updateは情報取得だけです。apk delでは、指定したもの以外に不要になった依存パッケージも削除され得るため、変更予定を先に確認します。コンテナを作り直しても再現するにはイメージのビルド定義へ反映し、ディスクレス構成ではその構成に応じた保存手順に従います。

よくある質問

apk addとapk updateは何が違うのですか?

addは希望するパッケージをインストールし、updateはリポジトリのインデックスを更新します。インストール済みパッケージのバージョン更新はupgradeです。

公式ドキュメント

オプションの正確な動作や実装ごとの差異は、apk関連の公式ドキュメントで確認できます。