가상머신보다 경량화된 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 를 조금 공부한다면 다른 서비스들도 이러한 방법으로 어려운
구축과정 없이 이용할 수 있지 않을까?