Create and run Rails app using Docker

Trong docker 1 image chỉ chứa 1 container. Đây là cách để thao tác đơn giản và dễ dàng lắp ghép với nhau hơn. Tuy nhiên, nếu yêu cầu 1 hệ thống gồm nhiều containers phức tạp và liên kết chặt chẽ với nhau về thứ tự, config, … thì docker là không đủ. Và thế là chúng ta có thêm docker-compose.

docker-compose cũng dùng file YML để định nghĩa, nên việc đọc hiểu là rất đơn giản.

1. Cài đặt Docker

  • Update apt sources
sudo apt-get update
sudo apt-get install apt-transport-https ca-certificates
  • Thêm GPG key
sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D
  • Thêm Docker repo vào source list
gedit /etc/apt/sources.list.d/docker.list
  • Update apt package Bạn có thể sử dụng Nano hoặc Vim thay Gedit. Xóa toàn bộ nội dung của tập tin docker.list ở trên nếu có và sau đó thêm dòng sau:
Với Ubuntu 12.04:
deb https://apt.dockerproject.org/repo ubuntu-precise main

Với Ubuntu 14.04:
deb https://apt.dockerproject.org/repo ubuntu-trusty main

Với Ubuntu 15.10:
deb https://apt.dockerproject.org/repo ubuntu-wily main

Với Ubuntu 16.04:
deb https://apt.dockerproject.org/repo ubuntu-xenial main

Lưu tập tin và thoát khỏi Gedit.
  • Cập nhật danh sách package cho Aptitude một lần nữa:
sudo apt-get update
  • Cài đặt docker-engine
sudo apt-get install docker-engine
  • Khởi động service cho docker
sudo service docker start

2. Cài đặt Compose

  • Cài đặt từ source
curl -L "https://github.com/docker/compose/releases/download/1.9.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
  • Thêm quyền executable cho docker-compose
chmod +x /usr/local/bin/docker-compose

3. Setup Docker Trong thư mục Rail project ta tạo Dockerfile có nội dung:

# Dockerfile
FROM ruby:2.3.1

RUN apt-get update -qq && apt-get install -y build-essential

RUN mkdir /demo_docker
WORKDIR /demo_docker

ADD Gemfile /demo_docker/Gemfile
ADD Gemfile.lock /demo_docker/Gemfile.lock
RUN bundle install

ADD . /demo_docker

Chỉ định image sử dụng để làm base cho container là ruby 2.3.1 Chạy câu lệnh apt-get update các thành phần liên quan Tạo thư mục /demo_docker và chuyển vào thư mục đó Copy Gemfile và Gemfile.lock vào thư mục Run bundle install

  • Compose file Tạo file docker-compose.yml, đây là file quan trọng nhất chứa đựng toàn bộ magic của compose có nội dung sau:
version: '2'
services:
  db:
    image: postgres
  web:
    build: .
    command: bundle exec rails s -p 3000 -b '0.0.0.0'
    volumes:
      - .:/demo_docker
    ports:
      - "3000:3000"
    depends_on:
      - db

Trong thư mục gốc của Rails, để bắt đầu build và khởi động container, chúng ta chạy lệnh:

docker-compose up
  • Kết nối database Default của Rails là chạy db trên localhost vì thế ta cần chỉnh sửa lại file config/database.yml
development: &default
  adapter: postgresql
  database: docker_development
  pool: 5
  username: postgres
  host: db

test:
  <<: *default
  database: docker_test

migrate database bằng lệnh: docker-compose run web rake db:create db:setup

  • Thế là đã xong Các bạn có thể tương tác với console: docker-compose run web rails console Và chạy lệnh: docker-compose run để buld app nhé

Chúc các bạn thành công ^.^