首页 > 解决方案 > 将 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标志的信息,但这似乎已被弃用。那么:我需要推送所有容器还是有办法将它们放入一个容器中?

标签: ruby-on-railsdockerdockerhub

解决方案


简而言之,这很简单:如果您有多个图像,则需要多次推送;)

现在是有用的答案,您有 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​​ 映像中安装节点。


推荐阅读