본문 바로가기
가상환경

Ruby Docker 세팅

by E_van 2020. 5. 28.

Docker FIle

FROM ubuntu:14.04

MAINTAINER Wonseok.Lee <wonsuc01@gmail.com>

ENV DEBIAN_FRONTEND noninteractive

RUN apt-get update
RUN apt-get -y upgrade

RUN apt-get -y install software-properties-common
RUN apt-get -y install apt-utils

## RVM install
RUN LC_ALL=C.UTF-8 add-apt-repository -y ppa:rael-gc/rvm
RUN apt-get -y update
RUN apt-get -y install rvm
RUN /bin/bash -c "source /usr/share/rvm/scripts/rvm"

## Default Packages
RUN apt-get -y install redis-server git nodejs curl nginx rdate sudo locales imagemagick vim libmysqlclient-dev mysql-server-5.6 mysql-client-5.6
RUN apt-get install -y -q ruby1.9.1 ruby1.9.1-dev build-essential
RUN apt-get install -y nano wget links rsync bc git git-core apt-transport-https libxml2 libxml2-dev libcurl4-openssl-dev openssl sqlite3 libsqlite3-dev
RUN apt-get install -y gawk libreadline6-dev libyaml-dev autoconf libgdbm-dev libncurses5-dev automake libtool bison libffi-dev

##Ruby install
ENV PATH /usr/local/rvm/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
RUN /bin/bash -l -c "rvm requirements"
RUN /bin/bash -l -c "rvm install 2.2.3"
RUN /bin/bash -l -c "rvm use 2.2.3"

## Bundler install
RUN /bin/bash -l -c "gem install bundler -v 1.17.3"

## Nodejs engine is used in many projects (e.g. execjs)
RUN apt-get install -y nodejs npm
RUN ln -s  /usr/bin/nodejs  /usr/bin/node

EXPOSE 3333

ADD html /var/www/html

# locale
RUN /usr/sbin/locale-gen en_US.UTF-8
ENV LANG en_US.UTF-8
ENV LANGUAGE en_US:en
ENV LC_ALL en_US.UTF-8

RUN ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/local-time
#RUN echo "daemon off;" >> /etc/nginx/nginx.conf

CMD redis-server
 

환경 설정

  • 개발용 PC hosts 등록
    project.local은 개인적인 테스트 용도로 사용합니다. /etc/hosts 파일에 아래와 같이 추가합니다.
127.0.0.1 localhost project.local
  • Ruby 및 Bundler 설정
    • Ruby 버전: 2.2.3
    • Bundler 버전: 1.17.3 (Ruby 2.3.0 이하에서는 Bundler 2를 지원하지 않음)

Docker 이미지 생성

  1. 프로젝트 디렉토리에서 Docker 이미지를 생성합니다.
$ docker build -t ${USER}/project-local .
  1. 이미지 생성 전 또는 후에 html 디렉토리 안에 admin 프로젝트를 Git으로 클론합니다.
$ git clone <프로젝트-URL> html/project

Docker 컨테이너 생성 및 실행

  • 컨테이너를 생성합니다. 기본적으로 -d 옵션을 사용합니다.Tip: 80번 포트를 사용하지 않는 경우 -p 80:80으로 실행 가능합니다.
$ docker run -d --name project-local --add-host=project.local:127.0.0.1 -p 3333:3333 -v "$PWD"/html:/var/www/html ${USER}/project-local
  • 컨테이너가 실행되지 않는 경우 -t 옵션으로 생성합니다.
$ docker run -t --name project-local --add-host=project.local:127.0.0.1 -p 3333:3333 -v "$PWD"/html:/var/www/html ${USER}/project-local
  • 컨테이너가 중지된 경우 자동으로 재시작되도록 설정합니다.
$ docker update --restart on-failure project-local

컨테이너 관리

작업명령어

컨테이너 Bash 실행 $ docker exec -it project-local /bin/bash --login
컨테이너 시작 $ docker start project-local
컨테이너 중지 $ docker stop project-local
컨테이너 재실행 $ docker restart project-local
정지된 컨테이너 삭제 $ docker rm project-local
컨테이너 강제 삭제 $ docker rm -f project-local

Rails 어드민 초기 설정

  • 컨테이너 내부로 이동 후 프로젝트 디렉토리로 이동합니다.
$ cd /var/www/html/project
  • 프로젝트 의존성을 설치합니다.
$ bundle install
  • Rails 서버를 실행합니다.이제 Rails 애플리케이션에 http://localhost:3333 또는 http://project.local:3333로 접근할 수 있습니다.
$ rails s -b 0.0.0.0 -p 3333