Dùng docker để build môi trường cho ứng dụng rails(mysql, redis, sidekiq)
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 ...
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ờ