🐤
FinchのcomposeでRailsを動かしてみた
AWSよりFinchが公開されたのでcomposeでRailsを動かしてみました。
DockerDesktopのようにローカル環境でコンテナ開発をするためのソフトウェアのようです。
インストール
https://github.com/runfinch/finch#installing-finch の通り進めます。
自分はIntel Macを使ってるせいか、finch vm init
を実行したときにvmの起動でエラーになりました。
ERRO[0001] Finch virtual machine failed to start, debug logs: time="2022-11-27T15:13:35+09:00" level=info msg="Using the existing instance \"finch\""
time="2022-11-27T15:13:35+09:00" level=info msg="Attempting to download the nerdctl archive from \"https://github.com/containerd/nerdctl/releases/download/v1.0.0/nerdctl-full-1.0.0-linux-amd64.tar.gz\"" digest="sha256:b7f76a3bf1b8161eb94ebe885945feb2887dfc0d274f9da908a17bc0ef853eb9"
time="2022-11-27T15:13:35+09:00" level=info msg="Using cache \"/Users/2bo/Library/Caches/lima/download/by-url-sha256/86e8280c3d639367efe7a50660ecfc4eade10b1696a9deeba27fdbf086d11098/data\""
time="2022-11-27T15:13:37+09:00" level=error msg="[hostagent] failed to run [/Applications/Finch/lima/bin/qemu-system-x86_64 -M none -accel help]: stdout=\"\", stderr=\"dyld: Symbol not found: _vmnet_enable_isolation_key\\n Referenced from: /Applications/Finch/lima/bin/qemu-system-x86_64 (which was built for Mac OS X 11.0)\\n Expected in: /System/Library/Frameworks/vmnet.framework/Versions/A/vmnet\\n in /Applications/Finch/lima/bin/qemu-system-x86_64\\n\"" fields.level=fatal
time="2022-11-27T15:13:37+09:00" level=fatal msg="host agent process has exited: exit status 1"
以下のIssueコメントの通りqemu-system-x86_64
をすげ替えることでエラーを解消しました。
$ finch vm start
INFO[0000] Starting existing Finch virtual machine...
INFO[0115] Finch virtual machine started successfully
ComposeでRailsを動かす
finchコマンド
Railsを動かすための手順はクィックスタート: Compose と Railsのほぼそのままです。
docker-compose xxx
コマンドをfinch compose xxx
にコマンドに置き換えるだけです。
1点だけdocker-compose run web rails new . --force --database=postgresql
が単純な置き換えで実行できなかったため以下の通り実行しています。
$ finch compose run web bash
$ rails new . --force --database=postgresql
Dockerfileとdocker-compose.yml
Dockerfileとdocker-compose.ymlのファイル名はそのままです。
これらのファイルだけ以下に載せます。
Dockerfile
FROM ruby:3.1
RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - \
&& echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list
RUN apt-get update -qq && apt-get install -y nodejs postgresql-client yarn
RUN mkdir /myapp
WORKDIR /myapp
COPY Gemfile /myapp/Gemfile
COPY Gemfile.lock /myapp/Gemfile.lock
RUN bundle install
COPY . /myapp
# Add a script to be executed every time the container starts.
COPY entrypoint.sh /usr/bin/
RUN chmod +x /usr/bin/entrypoint.sh
ENTRYPOINT ["entrypoint.sh"]
EXPOSE 3000
# Start the main process.
CMD ["rails", "server", "-b", "0.0.0.0"]
docker-compose.yml
version: '3'
services:
db:
image: postgres
environment:
POSTGRES_PASSWORD: password
web:
build: .
command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
volumes:
- .:/myapp
ports:
- "3001:3000"
depends_on:
- db
Railsの起動
クイックスタートの手順どおり進めていき、最後にfinch compose up
で起動できました。
$ finch compose up
WARN[0000] build.config should be relative path, got "/Users/2bo/workspace/finch_rails"
WARN[0000] Ignoring: volume: Bind: [CreateHostPath]
INFO[0000] Ensuring image postgres
INFO[0000] Ensuring image finch_rails_web
INFO[0000] Creating container finch_rails_web_1
INFO[0000] Creating container finch_rails_db_1
INFO[0000] Attaching to logs
# 略
web_1 |=> Booting Puma
web_1 |=> Rails 7.0.4 application starting in development
web_1 |=> Run `bin/rails server --help` for more startup options
web_1 |Puma starting in single mode...
web_1 |* Puma version: 5.6.5 (ruby 3.1.3-p185) ("Birdie's Version")
web_1 |* Min threads: 5
web_1 |* Max threads: 5
web_1 |* Environment: development
web_1 |* PID: 1
web_1 |* Listening on http://0.0.0.0:3000
web_1 |Use Ctrl-C to stop
以上
Discussion