I was able to install it last time, so I want to move it ... Finally using Docker: Installation
By the way, the flow of how to use it I will write an article to explain the terms that appear and add an image
MacOS Docker version 19.03.12
-Install Docker on the host PC (your local PC)
(Docker for Mac)
・ ** Create a Docker image ** (game software)
→ Get from docker hub
-Create a ** container ** (** build, build ) using Docker Image ( image )
-Create a Docker Container ( container ) based on Docker Image and enable the virtual environment ( run, run **)
A container is like a Linux virtual machine
To put it simply ** Image **… Class (game software) ** Container **… Instance (save data)
You can also create it
** Write a Dockerfile **
→ A file of to describe the configuration information of the
container that runs on Docker.
Create ** Docker Image ** based on Dockerfile (** build, build **)
This time, from writing the Dockerfile!
It seems that it is OK to edit with a touch Dockerfile and an editor Edit with ** vim **
pwd
/Users/username/environment/rails
~/environment/rails
❯ ls
~/environment/rails
❯ touch Dockerfile
~/environment/rails
❯ ls
Dockerfile
~/environment/rails
❯ vi Dockerfile
environment/rails/Dockerfile
//Ruby repository 2.4.Point to the image of the 5 tag
FROM ruby:2.4.5
//Means a command to execute in a container
//Installation of required packages
// build-I have the essential and nodejs packages installed
RUN apt-get update -qq && apt-get install -y build-essential nodejs
//The app directory is created in the root directory. Rails app is created here
//Create and set working directory
RUN mkdir /app
//Point to working directory
WORKDIR /app
//Files on the host PC/Copying into the app
COPY Gemfile /app/Gemfile
COPY Gemfile.lock /app/Gemfile.lock
RUN bundle install
//All the contents of the app/Copying into the app
COPY . /app
→ The above contents are ** saved as a container **
You can also create this with the touch command in the same way.
pwd
/Users/username/environment/rails
~/environment/rails
❯ ls
~/environment/rails
❯ touch Gemfile
~/environment/rails
❯ touch Gemfile.lock
~/environment/rails
❯ ls
Dockerfile Gemfile Gemfile.lock
~/environment/rails
❯ vi Gemfile
Edit Gemfile
environment/rails/Gemfile
source 'https://rubygems.org'
gem 'rails', '5.0.0.1'
Next is Gemfile.lock, but you can leave the contents empty
environment/rails/Gemfile.lock
Usually after running the "bundle install" command instead of editing directly Because Gem is installed and ** automatically ** listed in Gemfile.lock **
".Yml" is a format often used in Rails
docker_compose.yml
// docker_compose.Represents the yml version
version: '3'
services:
//Rails container
web:
// docker-compose.Files in the same directory as yml
//Means to create and use an original image
build: .
//Set the command to be executed by default when the container is executed
// -You have set the IP address to bind with b
command: bundle exec rails s -p 3000 -b '0.0.0.0'
//The directory on the PC is the container "/Mounted in the "app" directory
//Docker on pc-compose.The folder where yml is located is on the container
// 「/Shared in the "app" directory
//In other words, the code modified on the PC is reflected in the container as well.
volumes:
- .:/app
//Set to expose the port number outside the container
//If you do not set it, you will not be able to communicate from your PC to Rails running in the container.
// <Port number to be published outside the container>:<Forwarding port number inside the container>
ports:
- 3000:3000
//Set the MySQL server to start first before Rails starts
depends_on:
- db
//"Tty" and "stdin"_"open" is a setting required when using "pry" with Rails
tty: true
stdin_open: true
//MySQL server container
db:
// app 5.Use version 7
image: mysql:5.7
// 「db-The area created on the PC with the name "volume"
//Container ":/var/lib/Mounted on "mysql"
//If not set, the data will be saved on the container
//Note that the data will be lost if you delete the container
volumes:
- db-volume:/var/lib/mysql
//Defines environment variables to be set in the container
//Set the password used by the root user
environment:
MYSQL_ROOT_PASSWORD: password
volumes:
→ "web" and "db" are here ** service name **
docker compose run web rails new . --force --database=mysql
" Docker compose run web
"... A container for web services, behind
** Command to execute command **
" Rails new. --force --database = mysql
"... with" rails new .
"
** Create a file ** on "/ app" which is the working directory ** on the container **
" --Force
"option… ** Used to overwrite existing fills **
Used to overwrite even if there is a Gem file etc.
** build **
docker-compose build
After build is complete, edit the DB configuration file used by Rails
vim config/database.yml
Specify the minimum password and host
config/database.yml
# MySQL. Versions 5.0 and up are supported.
#
# Install the MySQL driver
# gem install mysql2
#
# Ensure the MySQL gem is defined in your Gemfile
# gem 'mysql2'
#
# And be sure to use new-style password hashing:
# http://dev.mysql.com/doc/refman/5.7/en/old-client.html
#
default: &default
adapter: mysql2
encoding: utf8
pool: 5
username: root
// MYSQL_ROOT_PASSWORD environment variable`password`
password: password
//It is a container of MYSQL server`db`
host: db
Edit to
//"Docker" in the current directory-compose.Based on "yml"
//Command to start the container
docker-compose up -d
Rails server and MySQL server commands start It is running, but the DB for the development environment has not been created yet. Create next
docker-compose ps
docker-compose run web bundle exec rake db:create
Almost the same as before
The commands after docker-compose run web bundle exec
Commands executed inside the container
Rails rake task command, if DB does not exist Will create
Promised Access localhost: 3000 with a browser and confirm that the server has started.
If the screen appears safely, it's OK!
https://www.udemy.com/course/rails-kj https://qiita.com/gold-kou/items/44860fbda1a34a001fc1 https://qiita.com/azul915/items/5b7063cbc80192343fc0
Recommended Posts