🐤

FinchのcomposeでRailsを動かしてみた

2022/11/27に公開

AWSよりFinchが公開されたのでcomposeでRailsを動かしてみました。
DockerDesktopのようにローカル環境でコンテナ開発をするためのソフトウェアのようです。

https://github.com/runfinch/finch

インストール

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をすげ替えることでエラーを解消しました。
https://github.com/runfinch/finch/issues/53#issuecomment-1326992544

$ 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