ruby-on-rails - 将 Rails 6 应用程序推送到 Docker Hub
问题描述
我试图让我的头脑围绕码头工人。我让它与我的 Rails 6 应用程序一起工作,它构建并运行成功。现在我想将应用程序推送到我的 docker hub 存储库中。
我不太确定如何做到这一点,因为我有 3 个容器,但在每个教程中,我读到的人都只是推一个。
那是的输出docker ps -a
:
那是我的docker-compose.yml
:
version: '3'
services:
db:
image: postgres
volumes:
- postgres:/var/lib/postgresql/data
env_file:
- .env
ports:
- "5432"
web:
build: .
command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
volumes:
- .:/webmenue
- bundler_gems:/bundle
- ./docker/database.yml:/webmenue/config/database.yml
- cache:/cache
ports:
- "3000:3000"
env_file:
- .env
environment:
- RAILS_ENV=development
- WEBPACKER_DEV_SERVER_HOST=webpacker
- SPROCKETS_CACHE=/cache
depends_on:
- db
webpacker:
build: .
command: ./bin/webpack-dev-server
volumes:
- .:/webmenue
ports:
- '3035:3035'
environment:
- NODE_ENV=development
- RAILS_ENV=development
- WEBPACKER_DEV_SERVER_HOST=0.0.0.0
volumes:
postgres:
bundler_gems:
cache:
我阅读了有关该--link
标志的信息,但这似乎已被弃用。那么:我需要推送所有容器还是有办法将它们放入一个容器中?
解决方案
简而言之,这很简单:如果您有多个图像,则需要多次推送;)
现在是有用的答案,您有 2 张图片:postgress
和您的current working directory
. Postgress 已经是你从 docker hub 下载的镜像,所以不需要推送它。
至于您的其他 2 个应用程序,它们当前位于一个 docker 文件中,因此只需一推。
在您的撰写文件中,他们都使用build: .
,因此他们共享 docker 图像。假设您使用 : 推送它docker push max-kirsch/my-cool-app:1.0.0
,您可以将 docker compose 文件更改为如下所示:
version: '3'
services:
db:
image: postgres
volumes:
- postgres:/var/lib/postgresql/data
env_file:
- .env
ports:
- "5432"
web:
image: max-kirsch/my-cool-app:1.0.0
command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
volumes:
- .:/webmenue
- bundler_gems:/bundle
- ./docker/database.yml:/webmenue/config/database.yml
- cache:/cache
ports:
- "3000:3000"
env_file:
- .env
environment:
- RAILS_ENV=development
- WEBPACKER_DEV_SERVER_HOST=webpacker
- SPROCKETS_CACHE=/cache
depends_on:
- db
webpacker:
image: max-kirsch/my-cool-app:1.0.0
command: ./bin/webpack-dev-server
volumes:
- .:/webmenue
ports:
- '3035:3035'
environment:
- NODE_ENV=development
- RAILS_ENV=development
- WEBPACKER_DEV_SERVER_HOST=0.0.0.0
volumes:
postgres:
bundler_gems:
cache:
我认为您很困惑,因为您的撰写文件中有 2 个应用程序共享同一个 docker 文件。这种混淆可能是正确的。在我个人看来,您应该在 docker 文件中创建它们,其中只安装您需要的组件。如果没有看到 docker 文件就很难确定,但作为一个例子,你的 webpacker 看起来不需要安装 ruby,并且可以从一个简单的节点映像作为基础开始,而不是在你的 ruby 映像中安装节点。
推荐阅读
- python - Pandas - 检查另一个数据框列中的系列值
- php - 如何在 laravel 5.5 中调用 PHPCap 外部包
- splunk - 如何将图表以及相应的搜索查询从 splunk 仪表板导出到 pdf?
- python - smtplib 无法在 Win 7 上使用 WinError 10013 连接到 python 中的套接字
- javascript - 将 Axios 方法转换为 Fetch
- c# - 在 Bingo 中跟踪选定的数字
- python - 如何使用 Python 3 编写一个不错的 try/except 组件,如果两个输入之一出错则停止
- javascript - 如果拖动,防止单击事件
- sql - 如何控制基于 DB2s 结构的 SQL 语句的执行?
- plugins - 此插件仅适用于页面