Docker로 Rails6 환경 만들기
상용으로 사용하는 것은 아니고, development 환경에서 밖에 사용하지 않기 때문에, 여러가지 부족할지도 모른다.
환경은 WSL2이며 사전에 ruby2.7.2, docker 및 docker-compose를 설치했습니다.
Docker 공식 페이지 에 있는 entrypoint.sh 는 사용하지 않는다.
그리고 개인적인 취향으로 Docker Compose를 사용한다.
파일 준비
준비는 다음 4가지 파일
Dockerfile
apt-key 는 곧 사용할 수 없게 되지만, 지금은 신경쓰지 않는다.
nodejs 의 디폴트의 버젼이 10.x 입니다만, 이것이라면 이후의 Webpack 의 컴파일로 실패하는 모양.
따라서 추가로 14.x를 설치합니다.
DockerfileFROM ruby:2.7.2
RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add -\
&& echo 'deb http://dl.yarnpkg.com/debian/ stable main' > /etc/apt/sources.list.d/yarn.list
RUN apt update -qq && apt install -y build-essential postgresql-client yarn \
curl dirmngr apt-transport-https lsb-release ca-certificates
RUN curl -sL https://deb.nodesource.com/setup_14.x | bash -
ENV APP_ROOT /app
RUN mkdir ${APP_ROOT}
WORKDIR ${APP_ROOT}
ADD ./Gemfile ${APP_ROOT}/Gemfile
ADD ./Gemfile.lock ${APP_ROOT}/Gemfile.lock
RUN bundle install
ADD . ${APP_ROOT}
Gemfile
Gemfilesource 'https://rubygems.org'
gem 'rails'
Gemfile.lock
빈 파일을 만듭니다.
Gemfile.lock
docker-compose.yml
docker-compose.yml
version: '3'
services:
db:
image: postgres:13.4
volumes:
- ./tmp/db:/var/lib/postgresql/data
environment:
- POSTGRES_PASSWORD=postgres
- POSTGRES_USER=postgres
web:
build: .
environment:
RAILS_ENV: development
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
Rails 앱 만들기
$ docker-compose build
$ docker-compose run --rm --no-deps web rails new . --force --database=postgresql
권한 재기록
私の場合、Dockerグループの設定などをしていないので、 rails new でファイルを作ると全部 root 権限になってしまう。
そこで sudo chown -R でファイルの所有者を自分に書き換えている。
$ sudo chown -R me.me *
Rails 설정
config/database.yml
default: &default
adapter: postgresql
encoding: unicode
host: db # 追加(docker-compose.ymlのserviceに設定したのと同じ名前にする)
username: postgres # 追加(docker-compose.ymlのPOSTGRES_USERに設定したのと同じ値にする)
password: postgres # 追加(docker-compose.ymlのPOSTGRES_PASSWORDに設定したのと同じ値にする)
# For details on connection pooling, see Rails configuration guide
# https://guides.rubyonrails.org/configuring.html#database-pooling
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
host, username, password の 3 行を追加する。username と password は docker-compose.yml で設定したものと合わせる。
いつ頃からか password を設定しないと怒られるようになった。
DB 생성
$ docker-compose run --rm web rake db:create
시작
$ docker-compose up
DB 마이그레이션
Scaffold
$ docker-compose run --rm web rails g scaffold User name:string height:integer weight:integer
ここでも出来るファイルは root 権限になってしまうので、sudo chown -R でファイルの所有者を自分に書き換える。
Migration
$ docker-compose run --rm web rake db:migrate
Permission denied 오류가 발생하면
db_1 | 2021-08-22 10:35:11.953 UTC [31] WARNING: could not open statistics file "pg_stat_tmp/global.stat": Permission denied
みたいな感じで Permission denied のエラーが出ることがある。
そのときは sudo chown -R me.me * で権限を自分に書き換える。
めんどうなのですべてのファイルの権限を書き換えている。
OCI runtime create failed 오류가 발생하면
ERROR: for rails_db_1 Cannot start service db: OCI runtime create failed: container_linux.go:380: starting container process caused: process_linux.go:545: container init caused: rootfs_linux.go:76: mounting "/run/desktop/mnt/host/wsl/docker-desktop-bind-mounts/Ubuntu-20.04/b90b8fe5c1b58941ad8f1d946593e332a8ad2a209d955b5b9babc4dea8a62ea9" to rootfs at "/var/lib/postgresql/data" caused: mount through procfd: no such file or directory: unknown
理由は分からないがこのエラーが出たら WSL を再起動すると直るようだ。
Webpacker::Manifest::MissingEntryError가 나오면
Webpacker::Manifest::MissingEntryError in Users#index
같은 에러가 나왔을 때에 다음을 하면 고친다.
$ docker-compose run --rm web rake webpacker:install
$ docker-compose run --rm web rake webpacker:compile
Rails7의 환경도 만들었다
Reference
이 문제에 관하여(Docker로 Rails6 환경 만들기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/mkt1234/items/70cdb2cfcc9a051d3385
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
FROM ruby:2.7.2
RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add -\
&& echo 'deb http://dl.yarnpkg.com/debian/ stable main' > /etc/apt/sources.list.d/yarn.list
RUN apt update -qq && apt install -y build-essential postgresql-client yarn \
curl dirmngr apt-transport-https lsb-release ca-certificates
RUN curl -sL https://deb.nodesource.com/setup_14.x | bash -
ENV APP_ROOT /app
RUN mkdir ${APP_ROOT}
WORKDIR ${APP_ROOT}
ADD ./Gemfile ${APP_ROOT}/Gemfile
ADD ./Gemfile.lock ${APP_ROOT}/Gemfile.lock
RUN bundle install
ADD . ${APP_ROOT}
source 'https://rubygems.org'
gem 'rails'
docker-compose.yml
version: '3'
services:
db:
image: postgres:13.4
volumes:
- ./tmp/db:/var/lib/postgresql/data
environment:
- POSTGRES_PASSWORD=postgres
- POSTGRES_USER=postgres
web:
build: .
environment:
RAILS_ENV: development
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
Rails 앱 만들기
$ docker-compose build
$ docker-compose run --rm --no-deps web rails new . --force --database=postgresql
권한 재기록
$ docker-compose build
$ docker-compose run --rm --no-deps web rails new . --force --database=postgresql
私の場合、Dockerグループの設定などをしていないので、 rails new でファイルを作ると全部 root 権限になってしまう。
そこで sudo chown -R でファイルの所有者を自分に書き換えている。
$ sudo chown -R me.me *
Rails 설정
config/database.yml
default: &default
adapter: postgresql
encoding: unicode
host: db # 追加(docker-compose.ymlのserviceに設定したのと同じ名前にする)
username: postgres # 追加(docker-compose.ymlのPOSTGRES_USERに設定したのと同じ値にする)
password: postgres # 追加(docker-compose.ymlのPOSTGRES_PASSWORDに設定したのと同じ値にする)
# For details on connection pooling, see Rails configuration guide
# https://guides.rubyonrails.org/configuring.html#database-pooling
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
default: &default
adapter: postgresql
encoding: unicode
host: db # 追加(docker-compose.ymlのserviceに設定したのと同じ名前にする)
username: postgres # 追加(docker-compose.ymlのPOSTGRES_USERに設定したのと同じ値にする)
password: postgres # 追加(docker-compose.ymlのPOSTGRES_PASSWORDに設定したのと同じ値にする)
# For details on connection pooling, see Rails configuration guide
# https://guides.rubyonrails.org/configuring.html#database-pooling
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
host, username, password の 3 行を追加する。username と password は docker-compose.yml で設定したものと合わせる。
いつ頃からか password を設定しないと怒られるようになった。
DB 생성
$ docker-compose run --rm web rake db:create
시작
$ docker-compose up
DB 마이그레이션
Scaffold
$ docker-compose run --rm web rails g scaffold User name:string height:integer weight:integer
$ docker-compose run --rm web rake db:create
$ docker-compose up
DB 마이그레이션
Scaffold
$ docker-compose run --rm web rails g scaffold User name:string height:integer weight:integer
$ docker-compose run --rm web rails g scaffold User name:string height:integer weight:integer
ここでも出来るファイルは root 権限になってしまうので、sudo chown -R でファイルの所有者を自分に書き換える。
Migration
$ docker-compose run --rm web rake db:migrate
Permission denied 오류가 발생하면
db_1 | 2021-08-22 10:35:11.953 UTC [31] WARNING: could not open statistics file "pg_stat_tmp/global.stat": Permission denied
db_1 | 2021-08-22 10:35:11.953 UTC [31] WARNING: could not open statistics file "pg_stat_tmp/global.stat": Permission denied
みたいな感じで Permission denied のエラーが出ることがある。
そのときは sudo chown -R me.me * で権限を自分に書き換える。
めんどうなのですべてのファイルの権限を書き換えている。
OCI runtime create failed 오류가 발생하면
ERROR: for rails_db_1 Cannot start service db: OCI runtime create failed: container_linux.go:380: starting container process caused: process_linux.go:545: container init caused: rootfs_linux.go:76: mounting "/run/desktop/mnt/host/wsl/docker-desktop-bind-mounts/Ubuntu-20.04/b90b8fe5c1b58941ad8f1d946593e332a8ad2a209d955b5b9babc4dea8a62ea9" to rootfs at "/var/lib/postgresql/data" caused: mount through procfd: no such file or directory: unknown
ERROR: for rails_db_1 Cannot start service db: OCI runtime create failed: container_linux.go:380: starting container process caused: process_linux.go:545: container init caused: rootfs_linux.go:76: mounting "/run/desktop/mnt/host/wsl/docker-desktop-bind-mounts/Ubuntu-20.04/b90b8fe5c1b58941ad8f1d946593e332a8ad2a209d955b5b9babc4dea8a62ea9" to rootfs at "/var/lib/postgresql/data" caused: mount through procfd: no such file or directory: unknown
理由は分からないがこのエラーが出たら WSL を再起動すると直るようだ。
Webpacker::Manifest::MissingEntryError가 나오면
Webpacker::Manifest::MissingEntryError in Users#index
같은 에러가 나왔을 때에 다음을 하면 고친다.
$ docker-compose run --rm web rake webpacker:install
$ docker-compose run --rm web rake webpacker:compile
Rails7의 환경도 만들었다
Reference
이 문제에 관하여(Docker로 Rails6 환경 만들기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/mkt1234/items/70cdb2cfcc9a051d3385텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)