Ruby를 설치하지 않고 Docker를 사용하여 Rails 환경 구축
개시하다
몇 년에 한 번 액세스하는 PC 교체
매번 로컬 PC에 루비(rbenv 같은 것)를 설치하고 싶지 않은 것을 계기로 삼았다.
컨디션
macOS Mojava 10.14.6
Docker 19.03.5
Compose 1.25.4
Docker를 사용한 Rails 환경 구축 단계
적절한 항목 디렉토리를 만들고 Docker file을 구성합니다.$ mkdir project_name
$ cd project_name
Rails5 버전
DockerfileFROM ruby:2.6.3
ENV LANG C.UTF-8
ENV APP_ROOT /usr/src/app
RUN apt-get update -qq && \
apt-get install -y vim nodejs \
mariadb-client \
--no-install-recommends && \
rm -rf /var/lib/apt/lists/* /var/cache/apt/archives/* /tmp/* /var/tmp/*
WORKDIR $APP_ROOT
COPY Gemfile Gemfile.lock $APP_ROOT/
RUN \
echo 'gem: --no-document' >> ~/.gemrc && \
cp ~/.gemrc /etc/gemrc && \
chmod uog+r /etc/gemrc && \
bundle config --global build.nokogiri --use-system-libraries && \
bundle config --global jobs 4 && \
bundle install && \
rm -rf ~/.gem
COPY . $APP_ROOT
Rails6 버전
DockerfileFROM ruby:2.7.0
ENV LANG C.UTF-8
ENV DEBCONF_NOWARNINGS yes
ENV YARN_VERSION 1.22.4
ENV APP_ROOT /usr/src/app
RUN apt-get update -qq && \
apt-get install -y vim nodejs \
mariadb-client \
--no-install-recommends && \
rm -rf /var/lib/apt/lists/* /var/cache/apt/archives/* /tmp/* /var/tmp/*
WORKDIR $APP_ROOT
COPY Gemfile Gemfile.lock $APP_ROOT/
RUN curl -L --compressed "https://yarnpkg.com/downloads/$YARN_VERSION/yarn-v$YARN_VERSION.tar.gz" > /tmp/yarn.tar.gz && \
tar -xzf /tmp/yarn.tar.gz -C /opt && \
ln -s /opt/yarn-v$YARN_VERSION/bin/yarn /usr/local/bin/yarn && \
ln -s /opt/yarn-v$YARN_VERSION/bin/yarnpkg /usr/local/bin/yarnpkg && \
rm /tmp/yarn.tar.gz
RUN \
echo 'gem: --no-document' >> ~/.gemrc && \
cp ~/.gemrc /etc/gemrc && \
chmod uog+r /etc/gemrc && \
bundle config --global build.nokogiri --use-system-libraries && \
bundle config --global jobs 4 && \
bundle install && \
rm -rf ~/.gem
COPY . $APP_ROOT
나는 Docker file이 여러 방면에서 매우 신경을 쓰기 때문에 각자의 작법이 비교적 좋다고 생각한다.
다음은 docker-compose입니다.yml을 생성합니다.
docker-compose.ymlversion: '3'
services:
web:
build: .
environment:
RAILS_ENV: development
TZ: Asia/Tokyo
ports:
- '3000:3000'
volumes:
- .:/usr/src/app
depends_on:
- database
database:
image: mysql:8.0.14
environment:
MYSQL_ROOT_PASSWORD: password
ports:
- '3306:3306'
volumes:
- mysql-data:/var/lib/mysql
command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_bin --default-authentication-plugin=mysql_native_password
volumes:
mysql-data:
driver: local
나는 Compose 파일에도 많은 주의가 있다고 생각하기 때문에 각자의 문법에 따라 처리한다.
중점으로 삼다
macOS Mojava 10.14.6
Docker 19.03.5
Compose 1.25.4
Docker를 사용한 Rails 환경 구축 단계
적절한 항목 디렉토리를 만들고 Docker file을 구성합니다.$ mkdir project_name
$ cd project_name
Rails5 버전
DockerfileFROM ruby:2.6.3
ENV LANG C.UTF-8
ENV APP_ROOT /usr/src/app
RUN apt-get update -qq && \
apt-get install -y vim nodejs \
mariadb-client \
--no-install-recommends && \
rm -rf /var/lib/apt/lists/* /var/cache/apt/archives/* /tmp/* /var/tmp/*
WORKDIR $APP_ROOT
COPY Gemfile Gemfile.lock $APP_ROOT/
RUN \
echo 'gem: --no-document' >> ~/.gemrc && \
cp ~/.gemrc /etc/gemrc && \
chmod uog+r /etc/gemrc && \
bundle config --global build.nokogiri --use-system-libraries && \
bundle config --global jobs 4 && \
bundle install && \
rm -rf ~/.gem
COPY . $APP_ROOT
Rails6 버전
DockerfileFROM ruby:2.7.0
ENV LANG C.UTF-8
ENV DEBCONF_NOWARNINGS yes
ENV YARN_VERSION 1.22.4
ENV APP_ROOT /usr/src/app
RUN apt-get update -qq && \
apt-get install -y vim nodejs \
mariadb-client \
--no-install-recommends && \
rm -rf /var/lib/apt/lists/* /var/cache/apt/archives/* /tmp/* /var/tmp/*
WORKDIR $APP_ROOT
COPY Gemfile Gemfile.lock $APP_ROOT/
RUN curl -L --compressed "https://yarnpkg.com/downloads/$YARN_VERSION/yarn-v$YARN_VERSION.tar.gz" > /tmp/yarn.tar.gz && \
tar -xzf /tmp/yarn.tar.gz -C /opt && \
ln -s /opt/yarn-v$YARN_VERSION/bin/yarn /usr/local/bin/yarn && \
ln -s /opt/yarn-v$YARN_VERSION/bin/yarnpkg /usr/local/bin/yarnpkg && \
rm /tmp/yarn.tar.gz
RUN \
echo 'gem: --no-document' >> ~/.gemrc && \
cp ~/.gemrc /etc/gemrc && \
chmod uog+r /etc/gemrc && \
bundle config --global build.nokogiri --use-system-libraries && \
bundle config --global jobs 4 && \
bundle install && \
rm -rf ~/.gem
COPY . $APP_ROOT
나는 Docker file이 여러 방면에서 매우 신경을 쓰기 때문에 각자의 작법이 비교적 좋다고 생각한다.
다음은 docker-compose입니다.yml을 생성합니다.
docker-compose.ymlversion: '3'
services:
web:
build: .
environment:
RAILS_ENV: development
TZ: Asia/Tokyo
ports:
- '3000:3000'
volumes:
- .:/usr/src/app
depends_on:
- database
database:
image: mysql:8.0.14
environment:
MYSQL_ROOT_PASSWORD: password
ports:
- '3306:3306'
volumes:
- mysql-data:/var/lib/mysql
command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_bin --default-authentication-plugin=mysql_native_password
volumes:
mysql-data:
driver: local
나는 Compose 파일에도 많은 주의가 있다고 생각하기 때문에 각자의 문법에 따라 처리한다.
중점으로 삼다
$ mkdir project_name
$ cd project_name
FROM ruby:2.6.3
ENV LANG C.UTF-8
ENV APP_ROOT /usr/src/app
RUN apt-get update -qq && \
apt-get install -y vim nodejs \
mariadb-client \
--no-install-recommends && \
rm -rf /var/lib/apt/lists/* /var/cache/apt/archives/* /tmp/* /var/tmp/*
WORKDIR $APP_ROOT
COPY Gemfile Gemfile.lock $APP_ROOT/
RUN \
echo 'gem: --no-document' >> ~/.gemrc && \
cp ~/.gemrc /etc/gemrc && \
chmod uog+r /etc/gemrc && \
bundle config --global build.nokogiri --use-system-libraries && \
bundle config --global jobs 4 && \
bundle install && \
rm -rf ~/.gem
COPY . $APP_ROOT
FROM ruby:2.7.0
ENV LANG C.UTF-8
ENV DEBCONF_NOWARNINGS yes
ENV YARN_VERSION 1.22.4
ENV APP_ROOT /usr/src/app
RUN apt-get update -qq && \
apt-get install -y vim nodejs \
mariadb-client \
--no-install-recommends && \
rm -rf /var/lib/apt/lists/* /var/cache/apt/archives/* /tmp/* /var/tmp/*
WORKDIR $APP_ROOT
COPY Gemfile Gemfile.lock $APP_ROOT/
RUN curl -L --compressed "https://yarnpkg.com/downloads/$YARN_VERSION/yarn-v$YARN_VERSION.tar.gz" > /tmp/yarn.tar.gz && \
tar -xzf /tmp/yarn.tar.gz -C /opt && \
ln -s /opt/yarn-v$YARN_VERSION/bin/yarn /usr/local/bin/yarn && \
ln -s /opt/yarn-v$YARN_VERSION/bin/yarnpkg /usr/local/bin/yarnpkg && \
rm /tmp/yarn.tar.gz
RUN \
echo 'gem: --no-document' >> ~/.gemrc && \
cp ~/.gemrc /etc/gemrc && \
chmod uog+r /etc/gemrc && \
bundle config --global build.nokogiri --use-system-libraries && \
bundle config --global jobs 4 && \
bundle install && \
rm -rf ~/.gem
COPY . $APP_ROOT
version: '3'
services:
web:
build: .
environment:
RAILS_ENV: development
TZ: Asia/Tokyo
ports:
- '3000:3000'
volumes:
- .:/usr/src/app
depends_on:
- database
database:
image: mysql:8.0.14
environment:
MYSQL_ROOT_PASSWORD: password
ports:
- '3306:3306'
volumes:
- mysql-data:/var/lib/mysql
command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_bin --default-authentication-plugin=mysql_native_password
volumes:
mysql-data:
driver: local
caching_sha2_password
대응Gemfile
source 'https://rubygems.org'
gem 'rails', '5.2.3'
그림을 만들 준비가 되었습니다.$ docker-compose build
그림을 만든 후 new 명령을 사용하여 rails의 초기 모양을 만듭니다.$ docker-compose run --rm web rails new . --skip-test --skip-bundle --skip-turbolinks --skip-action-mailer --skip-coffee --skip-action-cable --skip-active-storage --database=mysql
Overwrite /usr/src/app/Gemfile? (enter "h" for help) [Ynaqdhm]
Gemfile의 Conflict가 감지되었으니 주저하지 말고 Y
를 입력하세요!rails의 초기 형태가 나타났기 때문에 기본적으로 설정된 DB 정보를 고칩니다.
database.yml
default: &default
adapter: mysql2
encoding: utf8
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
username: root
password: password
- host: localhost
+ host: database
Docker file의 끝에 rails 서버를 실행합니다.Dockerfile
CMD ["rails", "server", "-b", "0.0.0.0"]
마지막으로 구축을 진행하고 DB를 만들면 (Rails6이면 웹 패키지를 설치합니다) docker를 시작하면 끝납니다.$ docker-compose build
$ docker-compose run --rm web rails db:create
# Rails6以降はwebpackのインストールも実行
$ docker-compose run --rm web rails webpacker:install
$ docker-compose up -d
참고 문장
Docker를 사용하여 Rails 응용 프로그램을 개발하려면
Reference
이 문제에 관하여(Ruby를 설치하지 않고 Docker를 사용하여 Rails 환경 구축), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/fukushi_yoshikazu/items/c9beba97914d89ab4022
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(Ruby를 설치하지 않고 Docker를 사용하여 Rails 환경 구축), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/fukushi_yoshikazu/items/c9beba97914d89ab4022텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)