在Docker中使用Docker Compose部署Rails应用也是一个常见的实战场景。下面是一个基本的docker-compose.yml
文件示例,用于配置和管理包含Rails应用、数据库和其他依赖服务(如Redis或PostgreSQL)的环境:
version: '3.8'
services:
db:
image: postgres:13-alpine
environment:
POSTGRES_USER: your_db_user
POSTGRES_PASSWORD: your_db_password
POSTGRES_DB: your_rails_db
volumes:
- dbdata:/var/lib/postgresql/data
web:
build: .
command: bundle exec rails s -p 3000 -b '0.0.0.0'
ports:
- "3000:3000"
volumes:
- .:/app
environment:
RAILS_ENV: development
DATABASE_URL: postgres://your_db_user:your_db_password@db:5432/your_rails_db
depends_on:
- db
volumes:
dbdata:
在这个例子中:
db
服务代表了PostgreSQL数据库。web
服务基于当前目录下的Dockerfile构建Rails应用,并且设置了启动命令来运行Rails服务器监听所有接口的3000端口。- 使用卷将宿主机的项目源码挂载到容器内的/app路径下,以便于实时同步代码更改。
- 环境变量
DATABASE_URL
设置为连接到数据库的服务名称(这里是db)以及正确的凭据和数据库名。 depends_on
指定了web服务依赖于db服务,确保在启动web服务前先启动数据库服务。
要构建并启动这个Docker Compose环境,请在包含docker-compose.yml
文件的Rails项目根目录下执行以下命令:
docker-compose build
docker-compose up -d
这将会构建所需的镜像并启动所有服务。如果你想进入容器内进行迁移或者创建数据库等操作,可以这样执行:
docker-compose run web bundle exec rails db:create
docker-compose run web bundle exec rails db:migrate
请注意,以上内容是针对开发环境的一个基本模板。在生产环境中,你可能需要调整设置以适应安全性和性能要求,例如使用更专业的Nginx或Apache作为反向代理,同时配置Unicorn、Puma或其他适合生产的Web服务器。此外,生产环境下通常不直接挂载宿主机的代码卷,而是通过编译后的镜像提供应用程序。