我们有一个 Rails 6 应用程序,几天前我们刚刚对其进行了 Docker 化(目前用于开发环境)。我们设法修复了镜像的一些问题,现在整个应用程序运行顺利,并且 Docker 一切正常。
我们遇到的唯一问题是现在 webpacker 编译花费了太多时间。在使用 Docker 之前可能需要 30 秒,但现在最多需要 5 分钟,最少需要 3 分钟。
我们尝试在卷的帮助下缓存包文件夹:
- ./public/packs:/app_name/public/packs:cached
但好像并没有改变什么。
我们还有其他解决方案吗?
正如 @β.εηοιτ.βε 提到的,对于开发,您可以使用本地安装的卷(直接在您的文件系统上)。
您可以在下面找到一个示例,添加使用方法组合,考虑
docker compose
和 Dockerfile
来利用 多阶段(请记住,我提出的是通用解决方案):
docker-compose.yml
version: '3.9'
services:
api: # or whatever name you use
build:
dockerfile: Dockerfile
context: .
# use just the development stage
target: development
command: <command to start in dev mode>
expose:
- ${PORT}
ports:
- ${PORT}:${PORT}
env_file:
- .env
volumes:
# use the local folder mapped to `/app` in container volume
- .:/app
- <directory_you_want_to_include_in_volume>:/app/<target_in_volume>
volumes:
<directory_you_want_to_include_in_volume>:
driver: local
Dockerfile
FROM <your_image> as development
# Create app directory
WORKDIR /app
# Copy source files
COPY . .
# Install with options as needed
RUN bundle install
# Build API
RUN <any command to build/bundle your app>
# here the development build will stop,
# and the start command of the docker compose file will take care.
FROM <your_image> as production
# Create app directory
WORKDIR /app
# Copy necessary files to run the app
COPY --from=development /app/<whatever_needed> ./
# Install only production dependencies
RUN <specific_production_bundler>
EXPOSE 80
CMD ["bundle", "exec", "rails"]