Lovetoken

저는 개발 취향을 가진 데이터 분석가 Jr. 입니다.

Navigation
 » Home
 » About Me
 » Github

Docker 를 이용해 Rstudio server 띄워보기 (on Mac OSX)

28 Jan 2017 » R, Docker



가상머신보다 경량화된 Docker 기술을 이것저것 만져보며 차차 공부중에 있다.
Docker가 왜 가상머신보다 가볍고 빠른지 지금은 논리적으로 설명하지 못한다.
가상머신상에서 실험했을 당시 불편한 점들과 만족스럽지 못한 성능을 대체할만한 기술 중 Docker 라는 것이 있다는 소문을 듣고 추천을 받았으며 인기가 매우 높다는 정도만 알고 있다.

우선 본 글은 Docker를 이용해 Rstudio server를 띄움으로써 “Hello Docker!” 를 외치는 것이 목표라 하겠다.



Docker 준비

Docker 을 OSX 에서 설치하는 방법은 다양하다.
Docker 공식홈페이지의 튜토리얼 대로 설치하는 것이 가장 정석의 방법이고,
Homebrew 를 통해서도 설치할 수 있으며,
Docker Toolbox 를 이용해 큰 고민 없이 설치할 수도 있다.

필자는 정석방법대로 하다가 진도가 중간에 막히게 되어 Docker Toolbox 를 overwrite 한 시행착오가 있었는데, 현재로썬 Docker Toolbox 로 설치하는 것이 가장 간단한 방법이라 추측된다.1
아래 사진은 Docker Toolbox 로 접속했을 때 모습이다.



왼쪽 맥용 다운로드 링크를 누르면 .pkg 파일이 다운로드 된다.
실행하여 설치를 진행하면 된다.











다른 곳은 특이사항 없이 설치를 진행하면 되는데 이곳에서 무언가를 선택하라고 나온다.
오른쪽의 Kitematic (Beta) 는 Docker 를 GUI 방식으로 이용할 수 있는 것이고,
왼쪽은 터미널을 이용해서 빠르게 사용하겠다는 것이다.
나는 왼쪽을 눌러 사용하는 터미널을 선택 후 계속 버튼을 눌렀다.



설치가 성공되면 터미널에서 docker, boot2docker 가 실행 가능하다.
설치가 잘 되었는지 실험삼아 각각의 버전을 확인해보는 커맨드를 입력 해 보았다.

docker --version
boot2docker version



boot2docker 로 docker VM 준비하기

“boot2docker” 이름대로 docker 를 이용하기 전에 수행되어야 한다.

boot2docker

boot2docker 의 사용법을 살펴보면 많은 기능이 있는 것을 볼 수 있는데, 이 중에서 지금은 init, up, ssh 만 알고 넘어가도 되겠다.
아래와 같이 입력해 실행한다.

boot2docker init
boot2docker up

boot2docker init 로 docker daemon 에 대한 VM 을 처음으로 준비한다.
그다음 boot2docker up 로 docker daemon VM 을 실행시키는데 수십초 정도가 걸린다.2
그 이후에

$ boot2docker ssh

를 실행하여 접속하면

$ boot2docker ssh

                        ##         .
                  ## ## ##        ==
               ## ## ## ## ##    ===
           /"""""""""""""""""\___/ ===
      ~~~ {~~ ~~~~ ~~~ ~~~~ ~~~ ~ /  ===- ~~~
           \______ o           __/
             \    \         __/
              \____\_______/
 _                 _   ____     _            _
| |__   ___   ___ | |_|___ \ __| | ___   ___| | _____ _ __
| '_ \ / _ \ / _ \| __| __) / _` |/ _ \ / __| |/ / _ \ '__|
| |_) | (_) | (_) | |_ / __/ (_| | (_) | (__|   <  __/ |
|_.__/ \___/ \___/ \__|_____\__,_|\___/ \___|_|\_\___|_|
Boot2Docker version 1.8.0, build master : 7f12e95 - Tue Aug 11 17:55:16 UTC 2015
Docker version 1.8.0, build 0d03096
docker@boot2docker:~$

docker VM 에 접속되며 호스트 OS 가 아닌 bash 인것을 확인할 수 있다.
저 고래의 모습이 터미널에 출력되면 docker를 본격적으로 이용할 수 있는 모든 준비가 되었다는 것으로 이해해도 좋다. 🐳🐳🐳



Hello Docker! 를 위한 Rstudio server 띄우기

Docker 의 장점은 여러가지가 있다고 하는데 대표적으로 내세우는 장점이 배포성이라고 한다.
Docker Hub 는 개발환경 세팅이 끝난 이미지들을 공유하는 곳인데,
지금 예로 들을 Rstudio server 의 경우도 환경세팅이 끝난 이미지를 찾아 바로 이용할 수 있다.
이 말은 Rstudio server 구축에 필요한 과정들을 쓸데없이 재발명하지 않고 사용할 수 있다는 것이다.
실제로 Rstudio server 구축은 어려우면 어렵지 쉬운 과제가 아니다.

docker VM 에 접속된 상황에서

docker@boot2docker:~$ docker search rstudio-server

를 입력해 보자.
위의 명령어는 Docker Hub 에서 “rstudio-server” 란 검색어로 이미지를 검색하는 것이다.

docker@boot2docker:~$ docker search rstudio-server

NAME                                     DESCRIPTION                   STARS  OFFICIAL  AUTOMATED
rocker/rstudio                           RStudio Server image          107              [OK]
h2sp/cent65-rstudio-server                                             2                [OK]
mgymrek/docker-rstudio-server                                          1                [OK]
analyticsplatform/rstudio-server         Docker Images for RStudio...  0                [OK]
mjmg/centos-rstudio-opencpu-server       Latest CENTOS with rstudi...  0                [OK]
mjmgaro/fedora-rstudio-server            Latest Fedora with rstudi...  0                [OK]
mjmg/fedora-rstudio-opencpu-server       Latest FEDORA with rstudi...  0                [OK]
davislaboratory/docker-rstudio-serve...  rstudio server for Docker...  0                [OK]
mjmg/fedora-rstudio-server               Latest Fedora with rstudi...  0                [OK]
mjmg/centos-rstudio-opencpu-shiny-se...  Latest CENTOS with rstudi...  0                [OK]

잘 보면 3번째 열에 “STARS” 라는 것이 있는데 Docker 사용자가 추천한 횟수를 의미한다.
가장 높은 별을 받은 첫번째 이미지를 우리 예제로 이용해 볼 것이다.

첫번째 이미지의 명칭은 “rocker/rstudio” 이다.
이 이미지를 받고 컨테이너를 생성하여(docker VM 에 Rstudio server 를 설치한다고 이해해도 좋다) Rstudio server 를 실행해 보겠다.
docker run 명령이면 이 모든 것이 한번에 된다.
아래 커맨드를 입력해 실행해 보자.

docker@boot2docker:~$ docker run --rm -p 8787:8787 rocker/rstudio

조금 복잡해 보일지 몰라도 핵심은 docker run <이미지 이름> 이다.
--rm , -p 인자들은 부가적인 옵션으로 생각하면 되는데 --rm 은 컨테이너 종료시 리소스들을 자동으로 반환해주고, -p 는 포트번호를 직접 입력할 수 있게 한다.

docker@boot2docker:~$ docker run --rm -p 8787:8787 rocker/rstudio

[fix-attrs.d] applying owners & permissions fixes...
[fix-attrs.d] 00-runscripts: applying...
[fix-attrs.d] 00-runscripts: exited 0.
[fix-attrs.d] done.
[cont-init.d] executing container initialization scripts...
[cont-init.d] conf: executing...
[cont-init.d] conf: exited 0.
[cont-init.d] done.
[services.d] starting services
[services.d] done.

무엇인가 촤라락 실행된다.
그리고 실행이 유지되는데, 바로 Rstudio server 를 가동중인 상태인 것이다. 포트번호를 8787로 부여했기 때문에 docker VM 의 IP에서 8787 번 포트로 접속하면 가동중인 Rstudio server 를 띄울 수 있게 된다.

그런데 잠깐 docker VM 의 IP 를 모르는 상태에서 설명을 쭉쭉 해버리고 있었다.
IP는 ifconfig 등으로 확인해 볼 수 있는데 잠깐 가동중인 Rstudio server 를 종료하고 bash 로 빠져 나와야 할 상황이다.
이럴땐 ctrl + C 를 눌러 bash 로 빠져나올 수 있다.
그리고 IP 확인을 위해

docker@boot2docker:~$ ifconfig

를 실행하여 “eth1” 의 IP 를 확인한다.

docker@boot2docker:~$ ifconfig

docker0   Link encap:Ethernet  HWaddr 02:42:22:E3:A5:EA
          inet addr:172.17.42.1  Bcast:0.0.0.0  Mask:255.255.0.0
          inet6 addr: fe80::42:22ff:fee3:a5ea/64 Scope:Link
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:211 errors:0 dropped:0 overruns:0 frame:0
          TX packets:448 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:817705 (798.5 KiB)  TX bytes:48897 (47.7 KiB)

eth0      Link encap:Ethernet  HWaddr 08:00:27:D1:4E:08
          inet addr:10.0.2.15  Bcast:10.0.2.255  Mask:255.255.255.0
          inet6 addr: fe80::a00:27ff:fed1:4e08/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1250 errors:0 dropped:0 overruns:0 frame:0
          TX packets:799 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:129451 (126.4 KiB)  TX bytes:118182 (115.4 KiB)

eth1      Link encap:Ethernet  HWaddr 08:00:27:3D:AA:C9
          inet addr:192.168.59.103  Bcast:192.168.59.255  Mask:255.255.255.0
          inet6 addr: fe80::a00:27ff:fe3d:aac9/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:465 errors:0 dropped:0 overruns:0 frame:0
          TX packets:226 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:53127 (51.8 KiB)  TX bytes:822933 (803.6 KiB)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

필자의 경우 http://192.168.59.103:8787 가 Rstudio server 를 띄울 수 있는 주소가 된다.
다시 Rstudio server 컨테이너를 실행하기 위해

docker@boot2docker:~$ docker run --rm -p 8787:8787 rocker/rstudio

이 후 http://192.168.59.103:8787 로 접속해 본다.



로그인 화면이 뜬다.

  • username : rstudio
  • password : rstudio

로 로그인을 해보면



Rstudio server 를 띄울 수 있고 웹상에서 Rstudio 를 이용할 수 있게 된다.
이렇게 해서 Docker 를 이용한 Rstudio server 이미지를 이용해 손쉽게 “Hello Docker!” 해보았다.
Docker 를 조금 공부한다면 다른 서비스들도 이러한 방법으로 어려운 구축과정 없이 이용할 수 있지 않을까?



Reference


  1. Docker command 를 사용하던 도중에도 Docker Toolbox 를 설치하는것을 추천하는 경고메세지가 나오기도 한다 (Docker Toolbox (https://docker.com/toolbox) is the recommended install method)↩︎

  2. boot2docker up 대신 boot2docker boot, boot2docker start 도 똑같다↩︎