今、Docker界隈ではAlpine Linuxへの注目が急速に高まってきています。

Alpine Linuxは非常に軽量なディストリビューションであり、軽量なDockerイメージを作るために必要不可欠な要素になりつつあります。Alpine Linuxの有用性については、この間行われたJAWS-UGコンテナ支部 #4 - connpassでもお話させてもらったので、詳細はスライドをご覧あれ。
お前のDockerイメージはまだ重い💢💢💢 // Speaker Deck
Alpineデビューする障壁
Alpineが軽いからといって、そうホイホイとDockerにalpineなイメージを簡単に作れるかというとそうではありません。最初はDockerfileを作るだけで相当消耗してしまうでしょう。そうならないためにも、Alpineの特性を抑えておく必要があります。
Alpineはデフォルトではかなり機能が制限されています。自らで色々なツールやパッケージをインストールしていく必要があるわけですが、alpineは独自のパッケージ管理システムapkを持っています。yumやapt-getはとてもポピュラーですが、このシステムはかなりマイナーなものと言わざるを得ません。この辺りの仕組みを抑えてからの方が理解のスピードが格段に違ってきます。
本エントリの趣旨は、まず好き勝手遊べるAlpine Linuxの環境を作ってAlpine学習の足がかりをつくることにあります。
VirtualBoxでAlpine Linuxを構築してみる
Dockerfileを修正して都度トライアンドエラーするのも良いですが、やはり純粋なAlpine Linuxの仮想環境を検証用に持っておくと良いでしょう。
というわけで、VirtualBox上にAlpine Linuxの環境を作ってみることにします。VirtualBoxの導入については省略しますので適当に入れてください。
Vagrant Shareにもalpineのboxが公開されていますが、今回は敢えてゼロから3.3系のAlpineを作ります。
Alpineのイメージを用意
AlpineのisoファイルをAlpine公式からダウンロードしておきます。
それぞれの環境にあったものをダウンロードします。自分はMacなので alpine-3.3.1-x86_64.iso
ですね。
仮想マシンをつくる
VirtualBoxの仮想マシン作成ウィザードで進めます。名前はとりあえずalpineにしましょう。OSですがLinux2.6を選択します。

メモリーサイズを設定します。まあデフォルトで良いでしょう。

新規なので、仮想ハードディスクを新たに作成します。

ファイルタイプはVDIでOKです。

ストレージは可変にしておきましょう。

ディスクの上限サイズもよしなにどうぞ。

これで仮想マシンの作成完了です。

ネットワークの設定
作成したalpineの設定変更をします。仮想マシンの設定からネットワークタブを開きます。
アダプター1にはデフォルトでNATが設定されていますが、新たにアダプター2を設定し「ブリッジアダプター」を設定します。

ストレージのタブで、alpineのISOファイルをディスクに設定します。

システムタブではブートローダー順を光学->ハードディスクの順に変更します。これでマウントしたalpineのISOで起動できます。これで設定は完了。

起動してセットアップしてみる
起動すると黒い画面が出てきます。ログインを求められるのでrootでログインします(パス無し)。

何やらwelcomeメッセージみたいなのが表示されて、setup-alpine
をしろというのが表示されます。この時点では仮想ディスクにはまだインストールされていない状態で、setup-alpineすることでISO無しで利用できるようになります。

対話的に色々と聞かれますが、ほとんどデフォルト回答です。rootのパスワードを聞かれたりします。

ここが重要。Which disk(s) would you like to use? (or '?' for help or 'none') [none] という問ではsda
を入力します。これで仮想ドライブにalpineがインストールされます。

続いて、Hou would you like to use it? ('sys', 'data, 'lvm' or '?' for help) [?] と聞かれます。ここではsys
を入力します。

インストールが開始されます。

** Installation is Complete. Please reboot.** が表示されればインストール完了。いったんrebootが必要となります。

仮想ディスクにインストールされたので、一度仮想マシンを停止してブートローダー順を「ハードディスク->光学」に変えておきましょう。

仮想マシンにsshできるようにする
Alpineは構築できましたが、VirtualBoxの黒い画面で色々入力しないといけないのはタルいです。これを脱却するために、Alpine側でリモートから(事実上ホストから)sshできるようにします。
ポートフォワードの設定をする
再びalpine仮想マシンのネットワーク設定を開き、アダプター1のNATにおいてポートフォワードの設定をします。ここではホストを2222、ゲストを22にしています(ホストのポートは衝突を回避できるポートを設定する)。

alpine側でsshd_configをいじる
リモートでのrootログインを許可するために、alpine側の/etc/ssh/sshd_config
を修正します。PermitRootLoginがコメントアウトされているので、yesにしてコメントアウトを解除します。
PermitRootLogin yes
sshしてみる
ホスト側からゲストのalpineに対してsshします。
$ ssh -p 2222 root@localhost
root@localhost's password:
Welcome to Alpine!
The Alpine Wiki contains a large amount of how-to guides and general
information about administrating Alpine systems.
See <http://wiki.alpinelinux.org>.
You can setup the system with the command: setup-alpine
You may change this message by editing /etc/motd.
localhost:~#
これで自分のターミナルからalpineに対してsshできるようになりましたね。ここまでくればVirtualBoxの黒い画面は不要なので、次回からはヘッドレス起動にしましょう。
さて、これでAlpine Linuxを学ぶ準備ができましたので、次回は実際にapkを使ったパッケージのインストール等について解説しまする。