MoreLean

About Docker 본문

Programmer/Docker

About Docker

judeKim' 2013. 8. 21. 22:45
반응형

현재 회사에서 Feature 프로젝트 하나를 하고 있다.

프로세스간 isolation 및 자원등에 대한 제한등이 필요하였고, 이에 대해 팀원이 하나 던져준 오픈 소스가 바로 이 docker( docker.io )이다.

이름이 참 특이했는데 나중에 생각해보니 프로젝트의 특성(linux container를 관리 및 자동화)과도 잘 맞는 듯한 네이밍이었다.




# docker.io 에 가면, 다음과 같이 docker를 정의하고 있다.

Docker is an open-source engine that automates the deployment of any application as a lightweight, portable, self-sufficient container that will run virtually anywhere.

Docker는 거의 어디에서나 실행되는 경량이면서 Portable하고, 자급자족인 컨테이너 응용 프로그램의 배포를 자동화하는 오픈소스 엔진입니다. 

무슨 소리인지 한 40% 정도 수준밖에는 못알아 들겠다.


일단 성격이 느긋하지 못한 저는 바로 실행해봤다.

요즘 많이 사용중인 Vagrant 환경에서 바로 구동할 수 있는 소스를 제공한다.




# 실행해보기1

1. 이미 설정되어 있는 git 소스를  clone 해온다.

> git clone https://github.com/dotcloud/docker.git

2. vagrant 를 실행한다. ( 물론 clone 한 디렉토리로 이동하여 Vagrantfile이 존재하는 위치에 있어야 한다. )

> vagrant up

  * vagrant 구동시 다음과 같은 과정을 거친다.

  - Ubuntu 64bit 패키지 박스를 다운로드 받는다. 

  - virtualbox를 통해 이미지를 부팅한다.

  - Docker PPA source를 /etc/apt/sources.lst 파일에 등록한다.

  - source를 업데이트한다.

  - lxc-docker 를 인스톨 한다.

3. vagrant에 접속

> vagrant ssh

4. VM 접속된 상태에서 docker 이미지를 생성한다.

vm> sudo docker pull ubuntu

5. docker 컨테이너를 통해 echo 문으로 hello world 를 출력한다. 

vm> sudo docker run ubuntu /bin/echo hello world


뭔지 모르지만 시키는 대로 해봤더니 "hello world"가 찍힌다.

이건 뭐 당연한거다라는 생각에 여적 감이 안왔다. 그래서 docker가 뭐지?

지금 샘플은 단순히 vagrant 에서 echo 찍은것과 뭐가 다른거지?라는 생각이 들었다.

그럼 Hello world node 샘플을 실행해봐야겠다. 기존의 vagrant는 "vagrant halt" 명령어를 통해 종료.




# 실행해보기2

1. git node 샘플 소스 clone 

> git clone https://github.com/gasi/docker-node-hello.git

2. vagrant 실행 ( 여기서도 당연히 Vagrantfile 이 있는 위치에서 )

> vagrant up # 무지하게 많은 무언가를 한다. 패키지 등도 업데이트 하고 설치하고.. 커널도 업데이트 하는듯하네..

> vagrant reload # 중간에 reload 하라고 해서 한번 더 진행

3. vagrant 접속 ( 뭐 여기까지는 다 똑같다. )

> vagrant ssh

4. 의존모듈을 설치한다.

vm> cd /vagrant # 이 위치에 이미 hello world node 모듈이 있다.

vm> make install # 에러난다. -_-;; npm이 설치되어 있지 않기 때문 node도 설치안되어 있다. -_-;;

4.1 node를 설치한다. 빨리 결과를 보고 싶으므로 node도 apt-get으로 설치한다. ( 소스를 컴파일해서 설치하면 너무 오래 걸린다... )

vm> sudo apt-get update

vm> sudo apt-get install python-software-properties

vm> sudo add-apt-repository ppa:chris-lea/node.js

vm> sudo apt-get update

vm> sudo apt-get install nodejs

4.2 다시 의존 모듈 설치 실행

vm> make install

5. docker 를 build한다. ( 무슨 의미인가 했었는데, docker 이미지를 Dockerfile을 통해 만드는 것이었다. )

vm> sudo make build # 스크립트에 의해 실제 실행되는 명령어는 docker build -t gasi/centos-node-hello .

  * 과정을 보니 centos 6.4 버전을 설치하고, npm 패키지등을 설치한다.

6. docker를 실행한다.

vm> sudo make run-container

7. docker 실행정보를 확인한다.

vm> sudo docker ps

8. 접속해본다.

vm> sudo apt-get install curl 

vm> curl http://localhost:49153 # port forward 된 포트로 접속


# 실행해보기2의 결론

이상황에서 확인해본 결과로는 현재 뭔지 모르지만 무엇인가가 docker에 떠져 있고, 현재 vm( vagrant )는 ubuntu 버전이지만 node 데몬을 위한 docker에서는 centos 6.4 버전이라고 보여져서 또하나의 vm이 vagrant 안에 떠 있는듯 보인다. 그 vm으로 접속하기 위해서 port forward 기법을 사용한듯 하고, 내가 방금 접속한 localhost의 서버는 vagrant가 아닌 docker의 vm인것 같다.




# 여기에서 다시 docker에 대해서 정리한 위의 단어를 다시 한번 곱씹어 보자.

Docker is an open-source engine that automates the deployment of any application as a lightweight, portable, self-sufficient container that will run virtually anywhere.

Docker는 거의 어디에서나 실행되는 경량이면서 Portable하고, 자급자족인 컨테이너 응용 프로그램의 배포를 자동화하는 오픈소스 엔진입니다.

일단 뭔지는 모르지만, docker에는 virtual machine을 구성할 수 있는 기능이 있으며, ubuntu에서 centos를 띄울 정도 수준의 가상화 환경을 지원한다. 또한 내부적으로는 포트포워딩을 통해서 접속이 가능하다. 즉, docker는 이런 vm생성등을 자동화 해주는 컨테이너 자동화 엔진이구나 라는 생각이 들었다.

그럼 아까 해본 실행하기1은? 실제로는 vagrant의 vm에서 "hello world"가 출력된것이 아닌 가상 머신에서 해당 쉘명령어를 실행한 것이겠구나.

별도의 데몬등을 실행한것이 아니기 때문에 바로 종료되었을테고, 가상화의 실행이 특정 명령어를 하나 실행하는 정도의 가벼움(lightweight)하면서도 자체적으로 쉘등의 명령어도 갖추고 있는( self-sufficient )하구나.

뭐 대충 끼워맞추어 보니 이런 생각이 들었다.


이정도면 뭔지는 이해가 되었으리라 생각하여 about docker에 대해서는 여기에서 마무리한다.






반응형

'Programmer > Docker' 카테고리의 다른 글

Repositories in docker  (0) 2013.08.28
Commands of docker  (0) 2013.08.26
Installation of docker  (0) 2013.08.25
docker 를 이해하기 위하여 #2  (0) 2013.08.22
docker 를 이해하기 위하여 #1  (0) 2013.08.22