2014.06.13

리뷰: 도약을 눈앞에 둔 '도커(Docker) 1.0'

Paul Venezia | InfoWorld


대부분의 경우 호스트에 도커 런타임을 실행하는 과정은 매우 간단해서, 많은 리눅스 배포판의 일반적인 패키지 관리 명령만 사용하면 된다. 도커 웹 사이트를 방문하면 광범위한 리눅스 배포판과 클라우드 서비스, 그리고 맥과 윈도우에 대한 모든 설치 지침을 볼 수 있다.

도커가 설치되면 다음과 같은 간단한 명령으로 컨테이너를 만들 수 있다.

$ sudo docker run -i -t ubuntu /bin/bash

이 명령은 도커에게 최신 우분투 이미지를 다운로드하고(호스트에 최신 버전이 없는 경우) 컨테이너 내에서 /bin/bash 명령을 실행하도록 지시한다. 이 명령은 새 컨테이너 내에서 루트로 실행되며, 다음과 같이 새 컨테이너에서 실행되는 루트 명령 프롬프트가 표시된다.

root@2e002f3eb1b2:/#

여기서 새 리눅스 설치에서 가능한 거의 모든 작업을 실행할 수 있다. apt-get update를 실행하고 새 소프트웨어를 설치하고 설치한 소프트웨어를 구성하고 스크립트를 작성하고 다른 리눅스 서버 인스턴스를 다루듯 컨테이너를 사용할 수 있다.

다만 명령줄에서 나오면 컨테이너 실행이 중지된다. 컨테이너에서 아파치 프로세스를 시작하고 웹 페이지를 서비스하기 시작했다면 이 경우 웹 서버도 중지된다. 따라서 웬만하면 애플리케이션 스택이 아닌 단일 서비스 전용으로 컨테이너를 만드는 것이 좋다. 하나의 컨테이너에서 여러 서비스를 실행할 수는 있지만 이 작업은 필요 이상으로 까다롭다.

도커 사용하기
도커는 중앙 '도커' 실행 파일에 필요한 모든 도구를 제공하는 명령줄 도구다. 따라서 전체적으로 사용하기가 무척 간편하다. 예를 들어 다음과 같이 실행 중인 컨테이너를 확인한다.



또는 사용 가능한 이미지와 각 이미지의 버전을 확인한다.


이미지의 내역을 보는 것도 있다.
이 명령은 명령줄 인터페이스의 유용한 바로 가기를 보여준다. 즉, 이미지 ID의 첫 번째 몇 글자만 지정하면 된다. 앞에서 'd95'만으로 d95238078ab0 이미지의 내역을 불러온 것을 볼 수 있다.

이미지의 크기가 상당히 작은 것을 알 수 있는데, 이는 도커가 상위 이미지로부터 델타(deltas)를 제작하고 컨테이너별로 변경 사항만 저장하기 때문이다. 따라서 300MB의 상위 이미지가 있고, 50MB의 추가 애플리케이션이나 서비스를 컨테이너 내에 설치하는 경우 컨테이너와 그 결과 이미지의 크기는 50MB 정도가 된다.

단일 컨테이너에 대한 사양을 포함하는 파일인 도커 파일을 사용해 도커 컨테이너 생성을 자동화할 수 있다. 예를 들어 도커 파일을 생성해 적절한 네트워킹을 구성한 우분투 컨테이너를 설정하고 새 컨테이너 내에서 다양한 명령을 실행하고 소프트웨어를 설치하거나 기타 작업을 수행한 다음 컨테이너를 시작할 수 있다.

컨테이너 네트워킹
초창기 버전 도커의 네트워킹은 호스트 브리징을 기반으로 했지만 도커 1.0은 컨테이너에서 호스트 이더넷 인터페이스로 직접 연결할 수 있게 해주는 새로운 형태의 네트워킹을 포함한다.

기본적으로 컨테이너는 기본 내부 브리지에 연결되는 인터페이스와 루프백을 갖게 되지만 필요한 경우 직접 접근이 가능하도록 구성할 수도 있다. 일반적으로 직접 접근 방식이 브리징 방식보다 속도가 빠르다.

그렇지만 브리징 방식은 무척 유용한 경우가 많고, 호스트에서 자동으로 내부 네트워크 어댑터를 만들고 여기에 호스트 자체에 사용되지 않는 서브넷을 할당하는 방식으로 구현된다.

그러면 이 브리지에 새 컨테이너가 연결될 때 자동으로 주소가 할당된다. 시작될 때 호스트 인터페이스와 포트에 연결되도록 컨테이너를 구성할 수 있다.

따라서 아파치를 실행하는 컨테이너가 시작되면 호스트의 TCP 포트 8080(또는 무작위 포트)에 연결되고, 다시 컨테이너 자체의 포트 80으로 유도된다.

스크립팅과 관리 제어 기능을 사용해서 어디서든 도커 컨테이너를 시작하고, 사용 중인 포트를 수집하고, 해당 서비스를 사용해야 하는 애플리케이션이나 서비스 스택의 다른 부분에 이 정보를 전파할 수 있다.

실제 환경의 도커
도커는 이전 몇 차례 릴리스에서부터 제대로 다루기만 한다면 프로덕션용으로 손색이 없었는데, v1.0이 릴리스되면서 본격적인 주목을 받게 될 것이다. 숙련된 리눅스 관리자라면 비교적 짧은 시간 내에 도커를 익히겠지만 도커 온라인 데모에서 직접 살펴보면서 판단할 수 있다.

도커는 리눅스 관리자와 설계자를 위한 풍부한 효용성과 기능을 갖춘, 실용적이고 기본적인 백엔드 인프라스트럭처의 좋은 예다.

그러나 마우스 커서를 사용한 클릭 인터페이스에 익숙한 사람에게는 별 매력을 주지 못할 가능성이 높다.

그래도 큰 문제는 없다. 도커는 앞으로 발전해 나갈 여지가 많고(예를 들어 이미지 버전 관리와 사설 레지스트리), 도커가 제공하는 능률화를 활용할 수 있는 영역도 다양하다(예: 네트워킹). 특히 이번 1.0 릴리스는 사람들을 도커로 이끌기에 충분하다. editor@itworld.co.kr



2014.06.13

리뷰: 도약을 눈앞에 둔 '도커(Docker) 1.0'

Paul Venezia | InfoWorld


대부분의 경우 호스트에 도커 런타임을 실행하는 과정은 매우 간단해서, 많은 리눅스 배포판의 일반적인 패키지 관리 명령만 사용하면 된다. 도커 웹 사이트를 방문하면 광범위한 리눅스 배포판과 클라우드 서비스, 그리고 맥과 윈도우에 대한 모든 설치 지침을 볼 수 있다.

도커가 설치되면 다음과 같은 간단한 명령으로 컨테이너를 만들 수 있다.

$ sudo docker run -i -t ubuntu /bin/bash

이 명령은 도커에게 최신 우분투 이미지를 다운로드하고(호스트에 최신 버전이 없는 경우) 컨테이너 내에서 /bin/bash 명령을 실행하도록 지시한다. 이 명령은 새 컨테이너 내에서 루트로 실행되며, 다음과 같이 새 컨테이너에서 실행되는 루트 명령 프롬프트가 표시된다.

root@2e002f3eb1b2:/#

여기서 새 리눅스 설치에서 가능한 거의 모든 작업을 실행할 수 있다. apt-get update를 실행하고 새 소프트웨어를 설치하고 설치한 소프트웨어를 구성하고 스크립트를 작성하고 다른 리눅스 서버 인스턴스를 다루듯 컨테이너를 사용할 수 있다.

다만 명령줄에서 나오면 컨테이너 실행이 중지된다. 컨테이너에서 아파치 프로세스를 시작하고 웹 페이지를 서비스하기 시작했다면 이 경우 웹 서버도 중지된다. 따라서 웬만하면 애플리케이션 스택이 아닌 단일 서비스 전용으로 컨테이너를 만드는 것이 좋다. 하나의 컨테이너에서 여러 서비스를 실행할 수는 있지만 이 작업은 필요 이상으로 까다롭다.

도커 사용하기
도커는 중앙 '도커' 실행 파일에 필요한 모든 도구를 제공하는 명령줄 도구다. 따라서 전체적으로 사용하기가 무척 간편하다. 예를 들어 다음과 같이 실행 중인 컨테이너를 확인한다.



또는 사용 가능한 이미지와 각 이미지의 버전을 확인한다.


이미지의 내역을 보는 것도 있다.
이 명령은 명령줄 인터페이스의 유용한 바로 가기를 보여준다. 즉, 이미지 ID의 첫 번째 몇 글자만 지정하면 된다. 앞에서 'd95'만으로 d95238078ab0 이미지의 내역을 불러온 것을 볼 수 있다.

이미지의 크기가 상당히 작은 것을 알 수 있는데, 이는 도커가 상위 이미지로부터 델타(deltas)를 제작하고 컨테이너별로 변경 사항만 저장하기 때문이다. 따라서 300MB의 상위 이미지가 있고, 50MB의 추가 애플리케이션이나 서비스를 컨테이너 내에 설치하는 경우 컨테이너와 그 결과 이미지의 크기는 50MB 정도가 된다.

단일 컨테이너에 대한 사양을 포함하는 파일인 도커 파일을 사용해 도커 컨테이너 생성을 자동화할 수 있다. 예를 들어 도커 파일을 생성해 적절한 네트워킹을 구성한 우분투 컨테이너를 설정하고 새 컨테이너 내에서 다양한 명령을 실행하고 소프트웨어를 설치하거나 기타 작업을 수행한 다음 컨테이너를 시작할 수 있다.

컨테이너 네트워킹
초창기 버전 도커의 네트워킹은 호스트 브리징을 기반으로 했지만 도커 1.0은 컨테이너에서 호스트 이더넷 인터페이스로 직접 연결할 수 있게 해주는 새로운 형태의 네트워킹을 포함한다.

기본적으로 컨테이너는 기본 내부 브리지에 연결되는 인터페이스와 루프백을 갖게 되지만 필요한 경우 직접 접근이 가능하도록 구성할 수도 있다. 일반적으로 직접 접근 방식이 브리징 방식보다 속도가 빠르다.

그렇지만 브리징 방식은 무척 유용한 경우가 많고, 호스트에서 자동으로 내부 네트워크 어댑터를 만들고 여기에 호스트 자체에 사용되지 않는 서브넷을 할당하는 방식으로 구현된다.

그러면 이 브리지에 새 컨테이너가 연결될 때 자동으로 주소가 할당된다. 시작될 때 호스트 인터페이스와 포트에 연결되도록 컨테이너를 구성할 수 있다.

따라서 아파치를 실행하는 컨테이너가 시작되면 호스트의 TCP 포트 8080(또는 무작위 포트)에 연결되고, 다시 컨테이너 자체의 포트 80으로 유도된다.

스크립팅과 관리 제어 기능을 사용해서 어디서든 도커 컨테이너를 시작하고, 사용 중인 포트를 수집하고, 해당 서비스를 사용해야 하는 애플리케이션이나 서비스 스택의 다른 부분에 이 정보를 전파할 수 있다.

실제 환경의 도커
도커는 이전 몇 차례 릴리스에서부터 제대로 다루기만 한다면 프로덕션용으로 손색이 없었는데, v1.0이 릴리스되면서 본격적인 주목을 받게 될 것이다. 숙련된 리눅스 관리자라면 비교적 짧은 시간 내에 도커를 익히겠지만 도커 온라인 데모에서 직접 살펴보면서 판단할 수 있다.

도커는 리눅스 관리자와 설계자를 위한 풍부한 효용성과 기능을 갖춘, 실용적이고 기본적인 백엔드 인프라스트럭처의 좋은 예다.

그러나 마우스 커서를 사용한 클릭 인터페이스에 익숙한 사람에게는 별 매력을 주지 못할 가능성이 높다.

그래도 큰 문제는 없다. 도커는 앞으로 발전해 나갈 여지가 많고(예를 들어 이미지 버전 관리와 사설 레지스트리), 도커가 제공하는 능률화를 활용할 수 있는 영역도 다양하다(예: 네트워킹). 특히 이번 1.0 릴리스는 사람들을 도커로 이끌기에 충분하다. editor@itworld.co.kr



X