在Mac上利用systemd-nspawn创建普通的开发环境(第四部分)-实践篇

上次:使用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文件。
因为数据库也连接上了,您还可以进行注册,而且应该可以从Mac的路径(/Users/yamasita/mnt)进行编辑。

显示的Rails界面

rails.png

这次几乎没有涉及到systemd-nspawn相关的话题,总结起来,就是通过machinectl import-tar命令导入Docker等容器镜像,然后像普通服务器一样进行配置,就可以直接运行了呢。很方便哦。

总结

因此,我成功地建立了Rails环境。
我认为systemd-nspawn的优点在于它能够像普通服务器一样(不需要意识到它是在容器内)使用。

就我个人而言,

    • Docker→オーケストレーション等の多くのコンテナを使った管理

 

    systemd-nspawn→もともと普通のサーバとして動いているものの動作確認、開発環境を作りたい

当我们想要以类似服务器的方式创建能够同时运行多个进程的容器时,systemd-nspawn是一种便利的选择。Docker在管理单个进程的容器方面很好用,而当我们需要管理能够同时运行多个进程的容器时,我认为systemd-nspawn非常方便。而且它还可以轻松进行简单的尝试,希望你们能尝试一下。

广告
将在 10 秒后关闭
bannerAds