Dùng docker để build môi trường cho ứng dụng rails(mysql, redis, sidekiq)
Bài đăng này đã không được cập nhật trong 3 năm
Bài viết này sẽ hướng dẫn sử dụng Docker Compose để cài đặt và chạy một ứng dụng rails / mysql / redis/ sidekiq. (nếu ta chưa install Docker và Docker Compose thì tham khảo tại đây )
Tạo Dockerfile Dockerfile cho ruby 2.3.1 được định nghĩa như sau:
FROM ruby:2.3.1
RUN apt-get update -qq && apt-get install -y build-essential nodejs
RUN mkdir /my_app
WORKDIR /my_app
ADD Gemfile /my_app/Gemfile
ADD Gemfile.lock /my_app/Gemfile.lock
RUN bundle install
ADD . /my_app
Tạo Gemfile
source 'https://rubygems.org'
gem 'rails', '5.0.0.1'
Tạo Gemfile.lock
File Gemfile.lock để trống.
Cuối cùng là tạo file docker-compose.yml. Đây là file quan trọng nhất, chứa đựng toàn bộ môi trường của application. Miêu tả các services cần cho app (1 database và 1 web app). Ở đây là db và web. Cách thức để các images của các services hoạt động với nhau (database thì chạy từ 1 image của mysql còn web app thì chạy từ thư mục hiện tại bằng build). Các config cần thiết Port của web app
version: '2'
services:
db:
image: mysql
ports:
- "3307:3307"
environment:
MYSQL_ROOT_PASSWORD: 123123
MYSQL_USER: root
MYSQL_PASSWORD: 123123
MYSQL_DATABASE: 123123
redis:
image: redis
environment:
- REDIS_URL=redis://redis:6379
sidekiq:
build: .
volumes:
- .:/my_app
links:
- db
- redis
command: bundle exec sidekiq
environment:
- REDIS_URL=redis://redis:6379
web:
build: .
command: bundle exec rails s -p 3000 -b '0.0.0.0'
volumes:
- .:/my_app
ports:
- "3000:3000"
depends_on:
- db
Build the project
bundle
rails new . --force --database=mysql --skip-bundle
Tạo images
docker-compose build
ta sẽ có được các images Connect the database
Edit file config/database.yml
default: &default
adapter: mysql2
encoding: utf8
pool: 5
username: root
password: 123123
host: db
development:
<<: *default
database: my_app
Boot the app Quá trình config và build. Giờ ta sẽ khởi động các containers lên để xem kết quả :
docker-compose up
nếu không có lỗi gì xảy ra chúng ta sẽ thu được kết quả bất ngờ
Cuối cùng bạn cần tạo database
docker-compose run web rails db:create
Ứng dụng web gờ sẽ được chạy trên Docker deamon của bạn. (http://localhost:3000/)
All rights reserved