Docker를 사용한 Ruby on Rails + MySQL 환경 구축 절차
9337 단어 MySQLRailsdocker-for-windows도커루비
Docker, Rails, MySQL 환경 구축 절차 기록
Rails의 기본 홈 화면을 표시하는 곳까지.
환경
1. Docker for Windows 설치
htps : // 후 b. 도 c r. 코 m / 에이 치온 s / こむに ty / 도 c 케 루세로 sk와 p ぃんど ws /
위 링크에 액세스하여 설치합니다.
설치가 완료되면 한 번 다시 시작한 다음 Docker를 시작합니다.
2. 필요한 파일 만들기
원하는 위치에 디렉토리를 만듭니다.
그런 다음 VScode에서 만든 디렉토리를 엽니다.
설치가 계속되면 아래 링크에서 설치
htps : // 오즈레. 미 c 로소 ft. 코 m / 쟈 jp / p 로즈 cts /
VScode에서 디렉토리를 열면 디렉토리에
Dockerfile
를 만들고,이하와 같이 기술한다.
FROM ruby:2.7
RUN apt-get update -qq && apt-get install -y nodejs yarnpkg
RUN ln -s /usr/bin/yarnpkg /usr/bin/yarn
RUN mkdir /app
WORKDIR /app
COPY Gemfile /app/Gemfile
COPY Gemfile.lock /app/Gemfile.lock
RUN bundle install
COPY . /app
# Add a script to be executed every time the container starts.
COPY entrypoint.sh /usr/bin/
RUN chmod +x /usr/bin/entrypoint.sh
ENTRYPOINT ["entrypoint.sh"]
EXPOSE 3000
# Start the main process.
CMD ["rails", "server", "-b", "0.0.0.0"]
다음으로 같은 계층에
Gemfile
를 작성해, 이하와 같이 기술한다.source 'https://rubygems.org'
gem 'rails', '~>6'
또 다른
Gemfile.lock
라는 파일을 만듭니다.내용은 하늘에서 OK.
그런 다음
Dockerfile
에서 ENTRYPOINT
로 정의 된 entrypoint.sh
를 만듭니다.entrypoint.sh
#!/bin/bash
set -e
# Remove a potentially pre-existing server.pid for Rails.
rm -f /app/tmp/pids/server.pid
# Then exec the container's main process (what's set as CMD in the Dockerfile).
exec "$@"
마지막으로
docker-compose.yml
라는 파일을 같은 계층에 작성해, 이하를 기술.docker-compose.yml
version: '3'
services:
db:
image: mysql:8.0
volumes:
- ./tmp/db:/var/lib/mysql
environment:
- MYSQL_ALLOW_EMPTY_PASSWORD=1
web:
build: .
command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
volumes:
- .:/app
ports:
- "3000:3000"
depends_on:
- db
MYSQL_ALLOW_EMPTY_PASSWORD
를 설정하면 비밀번호가 비어 있더라도 루트로 연결할 수 있습니다.3. Rails new/docker-compose 빌드
VScode의 터미널을 열고 만든 디렉토리의 계층 구조에 있는지 확인하면,
다음을 수행한다.
$ docker-compose run web bundle exec rails new . --force --database=mysql
--force
는 기존 파일을 덮어쓰고 --database
에서 MySQL을 지정합니다.실행이 완료되면 빌드를 수행합니다.
$ docker-compose build
4, DB의 호스트명의 변경 / docker-compose up를 실시한다
현재 상태이면 데이터베이스에 연결할 수 없으므로,
처음에 만든 디렉토리에서 만든
config/database.yml
의 host
값을 db
값으로 바꿉니다.database.yml
default: &default
adapter: mysql2
encoding: utf8mb4
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
username: root
password:
host: db
development:
<<: *default
database: app_development
test:
<<: *default
database: app_test
여기서
db
는 컨테이너 이름입니다.이것이 가능하면
docker-compose build
를 다시 한 다음 docker-compose up
를 수행하십시오.이 상태에서
localhost:3000
에 접속하면 아마 에러가 나온다.웹 컨테이너가 mysql8.0의
caching_sha2_password認証方式
에 대응하고 있지 않기 때문에.다음 절차에 따라 인증 방법을
mysql_native_password
로 변경합니다.5. MySQL 인증 체계 변경
먼저 DB 컨테이너에 들어갑니다.
(VScode에서
docker-compose up
를 수행하고 있다고 생각하므로 powershell을 사용하여 해당 디렉토리를 엽니 다.)그래서 bash를 시작합니다.
docker-compose exec db bash
그런 다음 mysql 명령으로 연결합니다.
mysql -u root
장소가
mysql>
가 되어 있는 것을 확인하면,다음 쿼리를 실행합니다.
mysql> select User,Host,plugin from mysql.user;
그러면 다음과 같은 사용자 목록과 인증 방법이 나옵니다.
+------------------+-----------+-----------------------+
| User | Host | plugin |
+------------------+-----------+-----------------------+
| root | % | caching_sha2_password |
| mysql.infoschema | localhost | caching_sha2_password |
| mysql.session | localhost | caching_sha2_password |
| mysql.sys | localhost | caching_sha2_password |
| root | localhost | caching_sha2_password |
+------------------+-----------+-----------------------+
5 rows in set (0.00 sec)
위에서 나온
root
의 plugin
에 있는 caching_sha2_password
를 mysql_native_password
로 변경합니다.이번 대상 루트 @ %의 사용자 설정을
ALTER USER
를 사용하여 변경합니다.다음 쿼리를 실행합니다.
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '';
할 수 있으면 다시
select User,Host,plugin from mysql.user;
를 실행하면,+------------------+-----------+-----------------------+
| User | Host | plugin |
+------------------+-----------+-----------------------+
| root | % | mysql_native_password |
| mysql.infoschema | localhost | caching_sha2_password |
| mysql.session | localhost | caching_sha2_password |
| mysql.sys | localhost | caching_sha2_password |
| root | localhost | caching_sha2_password |
+------------------+-----------+-----------------------+
5 rows in set (0.00 sec)
위와 같은 표시로 바뀌고 있다.
그런 다음
exit
를 두 번 실행하여 원래 계층으로 돌아갑니다.계층이 작성한 디렉토리인 것을 확인할 수 있으면 이하를 실행.
$ docker-compose exec web bundle exec rails db:prepare
6. Rails 홈 화면으로 이동
DB를 만들고
localhost:3000
그러면 Rails 홈 화면에 액세스 할 수 있습니다.종료.
Reference
이 문제에 관하여(Docker를 사용한 Ruby on Rails + MySQL 환경 구축 절차), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/yamaoka_egird/items/64c40920a7f78ccc1978텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)