簡體   English   中英

如何將Capistrano與Rails和Docker-compose結合使用?

[英]How to use Capistrano with Rails and Docker-compose?

我正在用Capistrano部署Rails應用程序。 Nginx和Passenger正常情況下沒有任何問題。

現在,我將使用docker-compose。

Capfile

# Load DSL and set up stages
require "capistrano/setup"
require "capistrano/deploy"
Dir.glob("lib/capistrano/tasks/*.rake").each { |r| import r }

deploy.rb

namespace :deploy do
  desc "docker compose task"
  task docker_compose: :updated do
    on roles(:web, :app), in: :groups, limit: 3, wait: 10 do
      within release_path do
        execute "cd #{release_path} && docker-compose up --build -d"
      end
    end
  end
  after 'deploy:updated', 'deploy:docker_compose'
end

docker-compose.yml

version: '2'

services:
  db:
    image: mysql/mysql-server:5.7
    environment:
      - MYSQL_ROOT_PASSWORD=myapp12345

  redis:
    image: 'redis:3.2-alpine'
    command: redis-server
    ports:
      - '6379:6379'
    volumes:
      - 'redis:/var/lib/redis/data'

  website:
    depends_on:
      - 'redis'
      - 'db'
    build: .
    image: namle/myapp_api
    ports:
      - '3001:3000'
    volumes:
      - '.:/myapp_ruby'
    environment:
      - REDIS_URL=redis://redis
    env_file:
      - '.env'

  sidekiq:
    depends_on:
      - 'redis'
      - 'db'
    build: .
    command: bundle exec sidekiq
    environment:
      - REDIS_URL=redis://redis
    volumes:
      - '.:/myapp_ruby'
    env_file:
      - '.env'

  nginx-proxy:
    image: jwilder/nginx-proxy
    container_name: nginx-proxy
    ports:
      - 80:80
    volumes:
      - /var/run/docker.sock:/tmp/docker.sock:ro

volumes:
  redis:
  website:
  sidekiq:
  nginx-proxy:

它運行正常。

但是我有問題

由於release_path更改 ,Docker-compose將在部署后創建新的網絡組,卷,映像,容器。

如何解決?

不要將Capistrano與Docker一起使用。 Capistrano旨在將應用程序重復部署到現有服務器,而Docker旨在將應用程序捆綁到已部署的容器中。

我個人不使用Docker,因此無法給您說明,但是總而言之,您將Dockerfile添加到項目中,運行docker docker build (或類似的東西),然后將生成的容器部署到服務器上。

Docker Compose(如果我理解正確的話)是一種組裝一組現有容器的方法。 因此,您需要已經創建了應用程序容器,然后Docker Compose將運行該容器以及其他容器來創建服務器環境。

請參考docker-compose cli Compose文檔

Define and run multi-container applications with Docker.

Usage:
  docker-compose [-f=<arg>...] [options] [COMMAND] [ARGS...]
  docker-compose -h|--help

Options:
  -f, --file FILE             Specify an alternate compose file (default: docker-compose.yml)
  -p, --project-name NAME     Specify an alternate project name (default: directory name)
  ...

使用-p標志可確保在目錄名稱更改且未重新創建網絡時項目名稱不會更改

編輯:假設這是一個非產品環境,並且您不希望在產品容器中裝載代碼或為產品運行此安裝程序...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM