1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Macとsystemd-nspawnで普通の開発環境を作るまで(4)~実践編~

Last updated at Posted at 2017-11-20

前回: Macとsystemd-nspawnで普通の開発環境を作るまで(3)~ファイル共有設定~

今回は実践編として、Railsの開発環境を作ってみます

概要

以下のようにDBコンテナを作って連携させてみます
Webコンテナについては前回まで使っていたコンテナを流用します

dbn.png

DBコンテナの作成

今回は気分を変えて、Docker Hubから取得したDebianをDBコンテナとして立ててみます

ホストUbuntuサーバにログイン後rootになって以下のコマンドを実行します

# 必要パッケージインストール
apt update
apt install docker.io
# DockerからDebianのイメージを持ってくる
docker export $(docker create debian) > /tmp/debian.tar
machinectl import-tar /tmp/debian.tar
cd /var/lib/machines/
systemd-nspawn -D debian/
# ↓ここからコンテナ内
apt update
apt install -y systemd dbus postgresql
systemctl enable postgresql systemd-networkd
exit
# ↑ここまでコンテナ内
# ネットワーク設定
echo -e "nameserver 8.8.8.8\nnameserver 8.8.4.4" > debian/etc/resolv.conf
curl -L https://goo.gl/2SDUwi > debian/etc/systemd/network/80-container-host0.network
machinectl enable debian

Rails環境の準備

これでコンテナができたので後はpostgresqlの設定をするだけです

debianコンテナ側

DBサーバ側は外部接続の許可を行います
ubuntu-hostにrootで入ってから以下のコマンドで準備します

# DBコンテナに入る
machinectl start debian
machinectl shell debian /bin/bash
# ↓ここからコンテナ
# 外部接続の許可設定
perl -i -ple 's#^host.*127.0.0.1/32.*#host all all 0.0.0.0/0 md5#' /etc/postgresql/9.6/main/pg_hba.conf
perl -i -ple "s/^#listen_address.*/listen_addresses = '\*'/" /etc/postgresql/9.6/main/postgresql.conf
systemctl restart postgresql
# DBとユーザを作成
echo "create user nspawnapp password 'nspawnapp'" | su -c psql - postgres
su -c 'createdb nspawnapp -O nspawnapp' - postgres
# コンテナから抜ける
exit

ubuntuコンテナ側

こちらにはRailsをインストールします
(今回はあくまで動作確認なのでdebパッケージでRailsをインストールしてしまいます)

# ubuntuコンテナに入る
machinectl shell ubuntu /bin/bash
# ↓ここからコンテナ
# 必要パッケージインストール
apt update
apt install -y ruby-pg ruby-rails curl
# appユーザでrails new
su - app
cd /mnt
rails new nspawnapp --database=postgresql
cd nspawnapp
# DB設定とテーブル作成
curl -L https://goo.gl/yXWcRd > config/database.yml
rails generate scaffold Comment name:string message:string
./bin/rake db:migrate
# railsサーバ起動
rails s -b 0.0.0.0

確認

これでMacから http://192.168.56.3:3000/comments を開けば先ほど作ったHTMLが見れると思います
DBもつながっているので登録もできますし、Mac側(/Users/yamasita/mnt)から編集もできるはずです

表示されるRails画面

rails.png

今回はほとんどsystemd-nspawn関係ない話でしたが、要するにDocker等のコンテナイメージをmachinectl import-tarコマンドで取り込んであとは普通のサーバのように設定すればそのまま動きますよーという事です
便利ですね

まとめ

というわけで、Rails環境が作れました。
systemd-nspawnはまるで通常サーバのように(コンテナ内であることを意識しないで)使えるのがメリットなんじゃないかなと思いました。

個人的には、

  • Docker→オーケストレーション等の多くのコンテナを使った管理
  • systemd-nspawn→もともと普通のサーバとして動いているものの動作確認、開発環境を作りたい

こんな感じにDockerは一個一個が単一のプロセスで動くコンテナを管理したいときに、systemd-nspawnはサーバと同じように複数のプロセスが動くコンテナを作るときに使用するのが便利なんじゃないかなと思いました。
簡単に試せるので是非使ってみて欲しいです

1
0
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
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?