Pu sh Rails 6 приложение к Docker Hub - PullRequest
0 голосов
/ 16 апреля 2020

Я пытаюсь разобраться docker. Я работал с моим приложением Rails 6, оно успешно собирается и запускается. Теперь я хочу добавить sh приложение в мой docker репозиторий-концентратор.

Я не совсем уверен, как это сделать, потому что у меня есть 3 контейнера, но в каждом уроке я читаю людей просто пу sh один.

Это вывод docker ps -a:

enter image description here

Это мой 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, но это кажется устаревшим. Итак: мне нужно собрать все контейнеры sh или есть способ собрать их в один контейнер?

1 Ответ

0 голосов
/ 16 апреля 2020

Это просто вкратце так же просто, как: если у вас есть несколько изображений, вам нужно набрать sh несколько раз;)

Теперь полезный ответ, у вас есть 2 изображения: postgress и ваш current working directory. Postgress уже является изображением, которое вы загружаете из docker hub, так что нет необходимости в pu sh it.

Что касается двух других ваших приложений, они в настоящее время находятся в одном файле docker, поэтому только один файл pu sh необходимо.

В вашем файле композиции они оба используют build: ., поэтому они совместно используют изображение docker. Допустим, вы нажали: docker push max-kirsch/my-cool-app:1.0.0, вы изменили бы файл компоновки docker, чтобы он выглядел следующим образом:

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, но, например, он не выглядит так, как будто ваш веб-упаковщик нуждается в ruby, установленном и может начинаться с простого образа узла в качестве базы вместо установки узла в вашем ruby изображение.

...