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 이미지 생성
- 프로젝트 디렉토리에서 Docker 이미지를 생성합니다.
$ docker build -t ${USER}/project-local .
- 이미지 생성 전 또는 후에 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