A memorandum when building a Docker environment with rails. Docker for mac installed
rails
|--Dockerfile
|--Gemfile
|--Gemfile.lock
|--docker-compose.yml
Dockerfile.
FROM ruby:2.4.5
RUN apt-get update -qq && apt-get install -y build-essential nodejs
RUN mkdir /app
WORKDIR /app
COPY Gemfile /app/Gemfile
COPY Gemfile.lock /app/Gemfile.lock
RUN bundle install
COPY . /app
Build a Dockerfile and Docker Image (a template for a container virtual environment is created)
Gemfile.
source 'https://rubygems.org'
gem 'rails', '5.0.0.1'
Gemfile (define the gem you want to install) → execute bundle install command → gem is installed → installed gem is described in Gemfile.lock
docker-compose.yml
version: '3'
services:
web: #Rails container definition
build: . #Creating and using an image based on the Dockerfile
command: bundle exec rails s -p 3000 -b '0.0.0.0' #Rails start command
volumes:
- .:/app
ports:
- 3000:3000 #<Port number to publish>:<Transfer destination port number inside the container>
depends_on:
- db #Set the MySQL server to start first before Rails starts
tty: true
stdin_open: true
db: #MySQL server container definition
image: mysql:5.7
volumes:
- db-volume:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: password
volumes:
db-volume: #By this definition db on PC-A volume (data holding area) is created with the name volume
After completing the above settings, create a Rails project in the terminal
terminal.
rails$ docker-compose run web rails new . --force --database=mysql
docker-compose run web </ code> is a command to execute the following command in the web service container
--force </ code> is an option to overwrite existing files
-databace = mysql </ code> is an option to put settings to use MySQL
After the build is complete, edit the database file used by Rails
config/database.yml
#abridgement
default: &default
adapter: mysql2
encoding: utf8
pool: 5
username: root
password: password #Edit
host: db #Edit
#abridgement
After completing the settings, enter the following command in the terminal
terminal.
rails$ docker-compose up -d
The above is the command to start the container (virtual environment) based on docker-compose.yml in the current directory
Next, since the database for the development environment has not been created, create it with the following command
terminal.
rails$ docker-compose run web bundle exec rake db:create
The bundle exec rake </ code> part executes the rake command installed in the Rails environment.
rake db: create </ code> creates a database for Rails on the MySQL server
Enter localhost: 3000 in your browser and when the Rails screen appears, you're done!
Recommended Posts