前回: Macとsystemd-nspawnで普通の開発環境を作るまで(2)~起動設定~
今回はファイルの共有設定を行い、Mac側からファイルを編集できるようにしてみます。
概要
今回はこんな感じにします。
Mac側に/Users/yamasita/mnt
というディレクトリを作り、そのディレクトリとVituralbox Ubuntu(host)内の/mnt
にvboxsfで繋げます。
さらにそのディレクトリをコンテナ側にマウントしてつなげることでMacからコンテナ内のファイルを触れるようにします。
Ubuntu(host)とのファイル共有設定
まずvirtualbox guest additionsをインストールします。
ubuntu(host)にログイン後、rootで以下を実行します
# multiverseのパッケージなのでリポジトリを追加します
curl -L https://goo.gl/qsE7A8 > /etc/apt/sources.list
# インストール
apt update
apt install -y virtualbox-guest-dkms
# シャットダウン
shutdown -h now
次に、Virtualboxの設定から共有フォルダーを選び以下のように共有するディレクトリと名前を指定します。
設定後、起動し、Ubuntu(host)のrootで以下のようにしてmountしてみます
# mount設定を追記、uid,gidを指定してアプリケーションユーザが触れるようにする
echo 'mnt /mnt vboxsf defaults,uid=1000,gid=1000 0 0' >> /etc/fstab
echo vboxsf >> /etc/modules
mount /mnt
これで、ubuntu(host)の/mnt
とMacの/Users/yamasita/mnt
がつながったと思います
Ubuntu(host)とコンテナを繋ぐ
最後にUbuntu(host)の/mnt
とコンテナの/mnt
を繋げます
Ubuntu(host)のrootから
# コンテナ停止
machinectl poweroff ubuntu
# nspawnファイルを作成
mkdir /etc/systemd/nspawn
curl -L https://goo.gl/3n6QkG > /etc/systemd/nspawn/ubuntu.nspawn
# コンテナ起動
machinectl start ubuntu
.nspawnファイルはコンテナ個別に設定するためのファイルです
[コンテナ名].nspawnファイルという名前で保存すれば、特定のコンテナだけに有効な設定を追加できます
今回は/mnt同士を繋げるのでBind=/mnt
を書いておきます
これで、Ubuntu(host)の/mnt
とコンテナの/mnt
が繋がりましたので最終的にMacの/Users/yamasita/mnt
とコンテナの/mnt
が繋がっているということになります。
Mac側から編集
本当にMac側で編集したファイルがコンテナ内から見えるかテストしてみます
# コンテナに入る
machinectl shell ubuntu /bin/bash
# appユーザの追加 ※おそらく最初のユーザなのでuid=1000,gid=1000のアカウントが作られます
useradd -m app
# 例としてmojoliciousを使います
apt update
apt install -y libmojolicious-perl
# appユーザになってWebアプリを作成
su - app
cd /mnt
mojo generate lite_app example.pl
morbo -l http://0.0.0.0:3000 example.pl
http://192.168.56.3:3000/ にアクセスするとmojoliciousが作るHTMLが見えると思います
Mac側で/Users/yamasita/mnt/example.pl
を編集してブラウザをリロードすると表示が変わります
このようにして、コンテナ内のファイルを編集できるようになります
次回は実際にDBコンテナを作ってRailsの開発環境を作ってみます
次回: Macとsystemd-nspawnで普通の開発環境を作るまで(4)~実践編~