LoginSignup
1
3

More than 3 years have passed since last update.

Docker on Alpine Linux on VirtualBox

Last updated at Posted at 2020-06-11

TikZ で作図したくて。

TeX Live を homebrew 🍺 でいれるのは時間かかりそうだし、環境汚くなりそうだし、なんだかなー。たぶん Docker 🐳 が楽なんだろうなー。

VirtualBox で適当な Linux 立ち上げて、その中でやろうかな。できたファイルはホスト側で確認すればいいんだから、どうせ GUI あってもしかたねーべ? と Alpine Linux を選択。

今回は後述の通り若干問題点も出てきたが、せっかく使ったことないディストリビューションのインストール作業をしてみたので、備忘録がてらまとめてみた。

Alpine Linux のインストール

準備

Alpine Linux のダウンロードページからイメージをダウンロードします。

VirtualBox で仮想マシンを作成し、設定のストレージから仮想ドライブにダウンロードした iso イメージを選択します。

起動。

インストール

root でログインします。

setup-alpine を実行して初期設定、インストールを行います。

setup-alpine

キーボードの設定。使っているものにあわせて設定します。ここでは us / us-mac

Available keyboard layouts:
af     be     cn     fi     hu     it     lk     mm     pl     sy     uz
al     bg     cz     fo     id     jp     lt     mt     pt     th     vn
am     br     de     fr     ie     ke     lv     my     ro     tj
ara    brai   dk     gb     il     kg     ma     ng     rs     tm
at     by     dz     ge     in     kr     md     nl     ru     tr
az     ca     ee     gh     iq     kz     me     no     se     tw
ba     ch     epo    gr     ir     la     mk     ph     si     ua
bd     cm     es     hr     is     latam  ml     pk     sk     us
Select keyboard layout [none]: us
Available variants: us-alt-intl us-altgr-intl us-chr us-colemak us-dvorak-alt-intl us-dvorak-classic us-dvorak-intl us-dvorak-l us-dvorak-r us-dvorak us-dvp us-euro us-hbs us-intl us-mac us-norman us-olpc2 us-rus us-workman-intl us-workman us 
Select variant []: us-mac

ホストネームの設定。

Enter system hostname (short form, e.g. 'foo') [localhost]: 

ネットワーク設定。アドレス固定がいい場合などは適宜設定。

Available interfaces are: eth0.
Enter '?' for help on bridges, bonding and vlans.
Which one do you want to initialize? (or '?' or 'done') [eth0] 
Ip address for eth0? (or 'dhcp', 'none', '?') [dhcp] 
Do you want to do any manual network configuration? [no] 

root のパスワードの設定。

Changing password for root
New password: 
Retype password: 
passwd: password for root changed by root

タイムゾーンは Asia/Tokyo

Which timezone are you in? ('?' for list) [UTC] Asia/Tokyo

プロキシはなし。 NTP は chrony 。

HTTP/FTP proxy URL? (e.g. 'http://proxy:8080', or 'none') [none] 
Which NTP client to run? ('busybox', 'openntpd', 'chrony' or 'none') [chrony] 

リポジトリのサーバ。 f だと全ミラーの接続速度を計測して一番速いところが選択されます。

Available mirrors:
1) dl-cdn.alpinelinux.org
2) uk.alpinelinux.org
3) dl-2.alpinelinux.org
(略)
49) mirror.reenigne.net

r) Add random from the above list
f) Detect and add fastest mirror from above list
e) Edit /etc/apk/repositories with text editor

Enter mirror number (1-49) or URL to add (or r/f/e/done) [1]: f

sshd は openssh 。

Which SSH server? ('openssh', 'dropbear' or 'none') [openssh] 

インストール先として VirtualBox の仮想ディスクが割り当てられている sda を選択します。

Available disks are:
  sda   (8.6 GB ATA      VBOX HARDDISK   )
Which disk(s) would you like to use? (or '?' for help or 'none') [none] sda
How would you like to use it? ('sys', 'data', 'lvm' or '?' for help) [?] sys

最後に y を選択すると、選択したディスクの中身を消去し、 Alpine Linux がインストールされます。 N だとインストール作業は実行されません。

WARNING: Erase the above disk(s) and continue? [y/N]: y

一旦終了します。

poweroff

VirtualBox の設定より、仮想マシンの仮想ドライブから iso イメージを取り外しておきます。

環境を整える

vim

apk add vim

community リポジトリの追加

Docker などは community リポジトリにあるらしい。

vim /etc/apk/repositories
#/media/cdrom/apks
http://sjc.edge.kernel.org/alpine/v3.12/main
#http://sjc.edge.kernel.org/alpine/v3.12/community
#http://sjc.edge.kernel.org/alpine/edge/main
#http://sjc.edge.kernel.org/alpine/edge/community
#http://sjc.edge.kernel.org/alpine/edge/testing

となっているので、 community リポジトリを有効に。

http://sjc.edge.kernel.org/alpine/v3.12/community
apk update
apk upgrade

Docker

apk add docker docker-compose
service docker start
rc-update add docker boot

便利に使うために

VirtualBox の共有フォルダ

あらかじめ、設定で共有フォルダを指定しておきます。ここでは vbox_shared という名前で設定してあるとします。

apk add virtualbox-guest-additions virtualbox-guest-modules-virt
rc-update add virtualbox-guest-additions default
modprobe -a vboxsf

VirtualBox の共有フォルダの設定のところに自動マウントのチェックオプションがあるけど、うまく機能しない? /etc/fstab を修正し、自動マウントするようにします。

mkdir -p /mnt/vbox_shared

vim /etc/fstab
vbox_shared /mnt/vbox_shared vboxsf defaults 0 0

ユーザの追加

VirtualBox だし、ついつい root を使いがちですが、あんまりよくないので一般ユーザを追加します。

sudo の許可

apk add sudo
visudo
# %wheel ALL=(ALL) ALL

%wheel ALL=(ALL) ALL

ユーザの追加

adduser alpine
adduser alpine wheels
adduser alpine vboxsf
adduser alpine docker

ssh ログイン

仮想コンソールなので、コピペがうまくできないためローカルマシンから ssh ログイン。

ssh alpine@xxx.xxx.xxx.xxx

Docker で TeX Live

docker pull paperist/alpine-texlive-ja

docker グループに所属していてもパーミッションエラーがでる場合、いったんリブートかけてみる。

Docker コンテナ内のコマンドを直接使うには

docker run -v $(pwd):/workdir --rm paperist/alpine-texlive-ja:latest platex example.tex

めんどうなので、エイリアスを設定しておく。

alias platex='docker run -v $(pwd):/workdir --rm paperist/alpine-texlive-ja:latest platex'

Alpine Linux のシェルは ash 。エイリアスの設定などは ~/.profile に記述すればよいようだ。

問題点

共有フォルダのパーミッションがうまく設定できない

alpine ユーザは vboxsf グループに所属しているが、 /mnt/vbox_shared に書き込めない。

ディレクトリの所有者を変えてみたり、 /etc/fstabuid を指定してマウントしてみても、マウントされると root でマウントされてしまう。よくわからん。

と、ここまで作業したあと、別に Alpine Linux じゃなくてもよかったんじゃね?

ふつうに Docker for Mac かデフォルトで GUI ありの Ubuntu / Fedora あたりで。

作業はコマンドラインベースがよいけど、 LaTeX (TikZ) だとどうしても都度コンパイルして結果を確認して修正。ってサイクルなので。

いや、共有フォルダへのアクセスがすんなりいけば別によかったんだけど。パスワードなしで sudo できるようにするか、 root で作業するか、諦めて他の環境使うか。

参考

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3