2016-11-10 12 views
0

私はCapistranoでRailsアプリケーションを配備しています。 NginxとPassengerで通常どおり問題はありません。CapistranoをRailsとDockerで使用する方法を教えてください。

今、私はドッカーの作成を使用するように移動します。

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 

ドッキングウィンドウ-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: 

それはOKAY実行されます。

は、しかし、私はrelease_pathを変更したため、容器が後を展開、問題

ドッカー-コンが新しいネットワークグループ、ボリューム、イメージを作成します持っています。

修正方法?

答えて

0

DockerでCapistranoを使用しないでください。 Capistranoは既存のサーバーにアプリケーションを繰り返し展開するように設計されていますが、Dockerは展開されたコンテナにアプリケーションをバンドルするように設計されています。

私はDockerを個人的に使用していませんので、指示はできませんが、プロジェクトにDockerfileを追加してdocker build(またはそのようなもの)を実行してから、あなたのサーバー。

Docker Compose(私が正しく理解している場合)は、既存のコンテナのセットを組み立てる方法です。したがって、Docker Composeがサーバーコンテナを作成する前にアプリケーションコンテナを作成しておく必要があります。

+0

ありがとうございます。 Docker-composeはDockerfileを実行してコンテナを生成するのに役立ちます。 DockerとCapistranoの違いがあります。 多くのフォルダで同じコンテナを実行するときにdocker-composeを設定することができればOKです。 – NamLe

0

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

使用-pフラグをディレクトリ名の変更やネットワークが

EDITを再作成されていない場合、プロジェクト名が変更されないことを確認するには:これは非であると仮定すると、 prod envを実行して、コードをprodコンテナにマウントしたり、この設定をprodのために実行する必要はありません。

関連する問題