개인적으로 Cloud9 에서 작성한 Ruby On Rails 어플리케이션을 Docker로 돌려보기 위해 작업했던 내용들을 작성해봅니다.


사전에 Cloud9 에서 작업한 Ruby On Rails 프로젝트를 Bitbucket 으로 연결하여 git으로 형상관리를 하였습니다.


본 작업에서는 Docker Image 에서 Bitbucket에 올라간 Ruby On Rails 프로젝트를 clone 하여 사용하는 구조로 만들기로 합니다.

아래 Docker Image를 사용하려 하였으나, Deprecated 라는 내용 때문에 직접 Docker Image를 만들어 쓰기로 하였습니다.


https://github.com/docker-library/rails


1. 먼저 Docker Image를 만들기 위해 Dockerfile을 생성합니다.


FROM ubuntu
 
ENV PATH "~/.rbenv/bin:$PATH"
ENV PATH "~/.rbenv/versions/2.3.0/bin:$PATH"
ENV RAILS_ENV development
EXPOSE 3000
 
# Run upgrades
RUN apt-get -y update
 
# Install basic packages
RUN apt-get -y install git-core curl zlib1g-dev build-essential libssl-dev libreadline-dev libyaml-dev libsqlite3-dev sqlite3 libxml2-dev libxslt1-dev libcurl4-openssl-dev python-software-properties libffi-dev
 
RUN apt-get install nano
 
#RUN cd
WORKDIR ~
RUN git clone git://github.com/sstephenson/rbenv.git ~/.rbenv 
 
RUN git clone git://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build 
 
RUN ls ~/.rbenv
RUN ~/.rbenv/bin/rbenv init -
 
# 루비 설치
RUN ~/.rbenv/bin/rbenv install -v 2.3.0 
RUN ~/.rbenv/bin/rbenv global 2.3.0
 
RUN ~/.rbenv/versions/2.3.0/bin/ruby -v
 
# gem 설정, bundler 설치
RUN echo "gem: --no-document" > ~/.gemrc
RUN ~/.rbenv/versions/2.3.0/bin/gem install bundler
 
# 레일즈 설치
RUN ~/.rbenv/versions/2.3.0/bin/gem install rails -v 4.2.5
RUN ~/.rbenv/bin/rbenv rehash
RUN ~/.rbenv/versions/2.3.0/bin/rails -v
 
# node js 설치
RUN apt-get -y install nodejs
 
# 프로젝트 소스 clone
WORKDIR /app
RUN git clone https://id:pwd@bitbucket.org/<<아이디>>/<<프로젝트>>
 
# bunde install
WORKDIR /app/testror
RUN ~/.rbenv/versions/2.3.0/bin/bundle install
RUN ~/.rbenv/versions/2.3.0/bin/bundle exec rake db:migrate
 
# rails 서버 start
CMD ~/.rbenv/versions/2.3.0/bin/rails s -b 0.0.0.0 -p 3000

위 내용을 간단히 설명하자면 아래와 같습니다.

  1. ubuntu 이미지 기반
  2. 환경변수 설정 후 3000포트 사용 정의
  3. 기본 패키지 업데이트 및 설치
  4. ruby 설치
  5. gem 설정, bundler 설치
  6. rails 설치
  7. node js 설치
  8. Rails 어플리케이션 clone
  9. bundle install 및 db migrate
  10. CMD 명령으로 컨테이너 실행시마다 rails 서버 시작

2. Dockerfile 작성 후 Docker Image 빌드를 합니다.


Dockerfile이 있는 경로에서 아래 커맨드를 실행합니다.

docker build -t ror .


위 커맨드를 간단히 설명하자면 아래와 같습니다.

  1. Docker Image를 build 하겠다.
  2. -t로 이름과 태그 지정(name/tag식으로 tag 안 쓸 경우는 name만). 이름은 ror로 지정
  3. . 으로 빌드 대상 경로 지정. Dockerfile 있는 경로로
  4. 완료 후 docker images 로 이미지 생성 완료 확인
  5. 실패시 docker rmi ≪image name≫ 으로 실패한 이미지 삭제

실행시 아래와 같은 결과를 확인할 수 있습니다.



$ docker build -t ror .
Sending build context to Docker daemon  16.38kB
Step 1/28 : FROM ubuntu
 ---> 20c44cd7596f
...
Successfully built 840df28a7759
Successfully tagged ror:latest

$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ror                 latest              840df28a7759        2 hours ago         842MB


3. Docker Container를 생성 및 실행합니다.


Docker Image 생성 완료 후 아래 커맨드로 컨테이너를 생성 및 실행합니다.


docker run -d --name ror -p 60005:3000 ror


위 커맨드를 간단히 설명하자면 아래와 같습니다.

  1. Docker Image를 build 하겠다.
  2. Docker Container를 run 하겠다.
  3. -d 옵션으로 컨테이너를 백그라운드에서 실행
  4. --name 으로 컨테이너 이름 설정. ror로 설정함
  5. -p 로 호스트에 연결된 컨테이너의 특정 포트를 외부에 노출(<호스트 포트>:<컨테이너 포트>)
  6. ror 이미지로 생성
  7. 실패시 docker rm ror 로 컨테이너 삭제
실행시 아래와 같은 결과를 확인할 수 있습니다.


$ docker run -d --name ror -p 60005:3000 ror
0431b06b76a1978898d3f0cdf44ebda94.......
$ docker logs ror
[2017-12-28 10:40:46] INFO  WEBrick 1.3.1
[2017-12-28 10:40:46] INFO  ruby 2.3.0 (2015-12-25) [x86_64-linux]
[2017-12-28 10:40:46] INFO  WEBrick::HTTPServer#start: pid=6 port=3000

$ docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                   PORTS                     NAMES
0431b06b76a1        ror                 "/bin/sh -c '~/.rb..."   2 hours ago         Up 2 hours               0.0.0.0:60005->3000/tcp   ror


위와 같이 하신 후 브라우저에서 locahost:60005 로 연결하시면 Ruby On Rails 프로젝트 동작을 확인할 수 있습니다.


참고로 위 작업을 마친 후 아래 링크도 찾게 되었네요;; 그런데 안해봐서 아래 링크대로는 아직 확인을 못해봤습니다.


https://docs.docker.com/compose/rails/


위 링크를 따라하시다 안되시면 제 포스팅 내용을 참고하시면 될 거 같습니다.

'IT > 각종 환경설정' 카테고리의 다른 글

C9 VNC 사용시 한글 세팅  (0) 2018.03.12
DokuWiki 설정하기  (0) 2018.03.12
TISTORY 포스팅에서 코딩 스타일 입히기  (0) 2017.12.12

+ Recent posts