[英]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.