【Rails】希望在Docker中实现Docker化

首先

因为我们正在开发的项目文件夹需要进行serverless deploy,所以我们使用了dind(docker-in-docker)来实现。以下是简要总结。

目录结构

sample-project
┣ backend(railsプロジェクト)
┣ Dockerfile
┣ entrypoint.sh
┣ docker-compose.yml

文件

FROM ruby:2.7.5 as base
RUN apt-get update && apt-get install -y build-essential make
RUN curl -fsSL https://deb.nodesource.com/setup_lts.x | bash - && apt-get install -y nodejs
RUN npm install --global yarn

RUN mkdir /app
WORKDIR /app

COPY ./backend/Gemfile /app/Gemfile
COPY ./backend/Gemfile.lock /app/Gemfile.lock
RUN bundle install
COPY ./backend /app
services:
  hoge:
    build:
      context: .
    tty: true
    init: true
    ports:
      - 8080:8080
      - アプリケーション毎に追加
    volumes:
      - ./:/app
    container_name: hoge

电前和电后的操作有什么不同。

过去,我们针对每个应用程序,例如Rails和React,都会创建一个容器,并根据需要在每个容器中进行操作。
现在,在进行无服务器部署时,需要在容器中创建更多的容器,因此我们将每个应用程序的容器合并为一个。用于创建此容器映像的Dockerfile将放置在项目的根目录中,而用于创建部署映像的Dockerfile将放置在后端中。

这是一个很有趣的问题,我喜欢与您讨论那个时期。

・每当容器启动时,应用程序的服务器也会启动。
・可以通过在容器中指定的端口访问对应的服务器。

在令人困惑之后

・在容器启动后进入容器内部
・启动每个应用程序的服务器
・确认可以通过容器指定的端口访问相应的服务器

确认行动

docker-compose build
docker-compose up

我将确认将其放入开发用容器。

docker exec -it hoge sh

确认能够启动Rails服务器,并通过8080端口进行访问。

rm -f tmp/pids/server.pid && yarn install && bundle exec rails s -p 8080 -b '0.0.0.0'
image.png

我还确认了可以进入 Rails 控制台。

image.png

本次我只对Rails服务器进行了运行确认,但每次通过命令启动不同应用程序的服务器很麻烦,因此将启动相关的命令整理到.sh文件中可能是一个不错的选择。

echo 'Run backend Server'

cd backend && bundle exec rails s -d -p 8080 -b '0.0.0.0'

echo 'Run frontend Server...'

cd react && yarn install && yarn start
docker exec -it hoge sh
sh run_local_server.sh

最后

我知道有很多地方被省略了解释,但现在我们已经可以尝试 serverless 部署了。
在进行 serverless 部署之前,有很多事情需要一一完成,但我将坚持下去,努力不折不挠。

广告
将在 10 秒后关闭
bannerAds