Alpine linux
Alpine linux (https://alpinelinux.org) は、省サイズながらソフトウェアパッケージのインストールが容易なリナックスディストリビューションとして注目されています。
特に、コンテナ用のベース OS として利用されています。
以下に、主だったベースディストリビューションとDockerイメージのサイズを挙げます。
ディストリビューション | サイズ |
---|---|
BusyBox | 0.8M |
Alpine | 2.8M |
Ubuntu | 27.8M |
CentOS | 74.2M |
BusyBox は、ソフトウェアパッケージのインストールが容易でないので、拡張するのに手間がかかります。
Ubuntu や CentOS は、広く普及しており、拡張性もあるのですが、省サイズでは、Alpine にかないません。
Alpine は、apk という alpine package manager を使って、ソフトウェアパッケージを管理できます。
Linux の基本コマンドには BusyBox を用い、省サイズ化を図っています。
標準Cライブラリとして、musl を利用しており、他の多くのディストリビューションが利用している glibc とは異なっています。musl は、静的リンクなのに対し、glibc は動的リンクです。これは乱暴に言えば、musl で構築したアプリケーションの方が、様々なディストリビューションで動作しやすいということになります(gcc -static オプションを付けた場合)。
apk パッケージ管理
Alpine では、apk でソフトウェアパッケージを管理します。
apk について詳しくは、以下などを参照して下さい。
https://wiki.alpinelinux.org/wiki/Alpine_Linux_package_management
Alpine で利用できるソフトウェアパッケージは、https://pkgs.alpinelinux.org/ を参照してください。
リポジトリは、/etc/apk/repositories に書かれています。
主な、apk コマンドのオプションを挙げます。
apk オプション | 内容 |
---|---|
update | リポジトリの内容更新 |
upgrade | インストール済みパッケージ更新 |
list | パッケージ一覧表示 |
info | インストー済みのパッケージ一覧表示 |
stats | パッケージ数などの情報表示 |
info -W FILE | ファイルの属しているパッケージ表示 |
search PACKAGE | パッケージを検索 |
info PACKAGE | パッケージ情報表示 |
info -L PACKAGE | パッケージに含まれるファイル表示 |
add PACKAGE | パッケージ追加 |
del PACKAGE | パッケージ削除 |
-sv fix | インストール済みパッケージの修復 |
cache clean | ローカルキャッシュのクリア |
Singularity での環境構築の流れ
Singularity で alpine の環境を構築する場合、典型的には以下の様な流れになります。
Docker hub から、alpine のベースとなるディストリビューションをダウンロードして、サンドボックスを作成します。
$ sudo singularity build --fix-perms --sandbox alpine docker://alpine
サンドボックスを書き込み可能で起動します。
$ sudo singularity shell --writable alpine
必要な環境設定を行い、動作確認を行います。
Singularity> apk update
Singularity> apk upgrade
Singularity> apk add tzdata
Singularity> cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
Singularity> date
Singularity> exit
サンドボックスをイメージファイルに変換します。
$ sudo singularity build alpine.sif alpine
実行は、管理者でなくユーザ権限でも行えます。
$ singularity shell alpine.sif
Singularity> date
サンドボックスは、利用しなければ $ sudo rm -rf alpine などとして削除することができます。
イメージファイルから、サンドボックスを作ることも可能です。
$ sudo singularity build --sandbox alpine alpine.sif
構築をやり直したい場合は、イメージファイルを削除すればよいです。
環境構築の手順はファイルにして、一気に実行することができます。
上述手順と同じ内容を定義ファイル例(alpine.def)として作成します。
Bootstrap: docker
From: alpine
%post
apk update
apk upgrade
apk add tzdata
cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
構築は、fakeroot を使って、ユーザ権限で実行可能です。
$ singularity build --fakeroot alpine.sif alpine.def
$ singularity shell alpine.sif
Singularity> date
環境構築の部分を変えれば、様々な環境向けのシステムが容易に作成できます。
Alpine linux での構築例
以下、環境構築例の定義ファイルを挙げます。
[C 言語で SDL の開発環境例]
Bootstrap: docker
From: alpine
%post
apk add alpine-sdk
apk add linux-headers
apk add xeyes
apk add sdl-dev
[Jupyter notebook と Jupyter-lab の実行環境例]
Bootstrap: docker
From: alpine
%post
apk add build-base
apk add python3 py3-pip
apk add python3-dev
apk add libffi-dev
pip install notebook
pip install jupyterlab
$ singularity shell jupyterlab.sif
Singularity> jupyter notebook
Singularity> jupyter-lab