2016-11-10 3 views
0

Ich bin eine Rails-Anwendung mit Capistrano bereitstellen. Es hat normalerweise kein Problem mit Nginx und Passenger.Wie Capistrano mit Rails und Docker-Compose verwenden?

Jetzt ziehe ich, um docker-compose zu verwenden.

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: 

Es läuft OKAY.

Aber ich habe PROBLEM

Docker-compose neue Netzwerkgruppen schaffen, Volumen, Bilder, Container nach bereitstellen wegen release_path geändert.

Wie es zu beheben?

Antwort

0

Verwenden Sie Capistrano nicht mit Docker. Capistrano wurde entwickelt, um eine Anwendung wiederholt auf einem vorhandenen Server bereitzustellen, während Docker eine Anwendung in einem bereitgestellten Container bündeln soll.

Ich benutze Docker nicht persönlich, also kann ich Ihnen keine Anweisungen geben, aber kurz gesagt, fügen Sie Ihrem Projekt eine Dockerfile hinzu, führen Sie docker build (oder so ähnlich) aus, und stellen Sie dann den resultierenden Container bereit dein Server.

Docker Compose (wenn ich es richtig verstehe) ist eine Möglichkeit, einen Satz bestehender Container zusammenzustellen. Daher müssen Sie Ihren Anwendungscontainer bereits erstellen, bevor Docker Compose diesen und andere Container ausführen wird, um Ihre Serverumgebung zu erstellen.

+0

Vielen Dank für Ihre Informationen. Docker-compose kann Ihnen helfen, eine Dockerfile auszuführen und Container zu generieren. Docker und Capistrano haben unterschiedliche Zwecke. Wenn ich docker-compose konfigurieren kann, um den gleichen Container zu aktualisieren, wenn es in vielen Ordnern ausgeführt wird, wird es OKAY. – NamLe

0

Bitte beachten Sie docker-compose cliCompose docs:

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) 
    ... 

Verwendung -p Flag Projekt-Namen ändern, wenn Änderungen und Netzwerke Verzeichnisnamen nicht

EDIT neu nicht gewährleisten: Unter der Annahme, dies eine nicht ist prod env und Sie erwarten nicht, Code in Prod-Containern zu mounten oder führen Sie dieses Setup für ...

Verwandte Themen