Microsoft Azure에서 Docker 사용하기

이재홍 http://www.pyrasis.com 2014.08.02 ~ 2014.09.20

이 장에서는 Microsoft Azure의 가상 컴퓨터에서 Docker를 사용하는 방법에 대해 알아보겠습니다.

Azure에서 Docker를 사용하려면 Azure 크로스 플랫폼 명령행 도구(azure-cli)가 필요합니다. azure-cli는 Node.js로 작성되어 있으므로 먼저 Node.js를 설치합니다.

Windows와 Mac OS X에서는 다음 URL에서 설치 파일을 다운로드한 뒤 설치합니다. 설치 방법은 특별한 것이 없으므로 따로 설명하지 않겠습니다.

우분투

$ sudo apt-get install nodejs npm
$ sudo ln -s /usr/bin/nodejs /usr/local/bin/node

CentOS 6

$ sudo yum install http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
$ sudo yum install nodejs npm

CentOS 7

$ sudo yum install http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-2.noarch.rpm
$ sudo yum install nodejs npm

이제 npm으로 azure-cli 모듈을 전역으로 설치합니다.

$ sudo npm install -g azure-cli

먼저 Microsoft Azure 구독 파일을 다운로드해야합니다. azure account download 명령을 실행합니다.

$ azure account download
info:    Executing command account download
info:    Launching browser to http://go.microsoft.com/fwlink/?LinkId=254432
help:    Save the downloaded file, then execute the command
help:      account import <file>
info:    account download command OK

명령을 실행하면 URL이 출력됩니다. 웹 브라우저를 실행하고 이 URL에 접속합니다. Microsoft Azure 관리 포털에 로그인이 되어 있다면 다음과 같이 구독 파일 다운로드 화면이 표시됩니다. 로그인 화면이 나오면 Microsoft Azure 계정으로 로그인합니다.


그림 12-1 Microsoft Azure 구독 파일 다운로드

.publishsettings 확장자를 가진 구독 파일이 다운로드됩니다. 만약 구독 파일을 다운로드한 컴퓨터와 azure-cli를 설치한 컴퓨터가 다르면 구독 파일을 azure-cli를 설치한 컴퓨터에 복사합니다.

azure account import 명령에 구독 파일 이름을 지정하여 실행합니다.

$ azure account import "<구독 파일 이름>.publishsettings"

이제 azure-cli를 사용할 수 있게 되었습니다.

가상 컴퓨터를 생성하기 전에 클라우드 서비스를 생성해야 합니다. Microsoft Azure 관리 포털에서 클라우드 서비스를 클릭한 뒤 클라우드 서비스 만들기를 클릭합니다.


그림 12-2 Microsoft Azure 클라우드 서비스 만들기

클라우드 서비스 설정입니다.

  • URL: 사용할 URL을 입력합니다. 입력할 때마다 중복 검사가 되므로 중복 되지 않는 URL을 설정합니다.
  • 지역 또는 선호도 그룹: 우리나라에서 가장 가까운 일본 서부를 선택합니다.

설정이 완료되었으면 클라우드 서비스 만들기를 클릭합니다.


그림 12-3 Microsoft Azure 클라우드 서비스 만들기

클라우드 서비스가 만들어졌습니다.


그림 12-4 Microsoft Azure 클라우드 서비스 생성 완료

이제 azure vm docker create 명령으로 Docker 가상 컴퓨터를 생성합니다.

$ azure vm docker create -e 22 -l 'Japan West' example-docker "b39f27a8b8c64d52b05eac6a62ebad85__Ubuntu-14_04-LTS-amd64-server-20140618.1-en-us-30GB" exampleuser Examplepassword1!

azure vm docker create <옵션> <클라우드 서비스 이름> <이미지 이름> <SSH 사용자 이름> <SSH 패스워드> 형식입니다.

  • <옵션>: -e 22를 설정하여 SSH로 접속할 수 있도록 설정합니다(사실상 Microsoft Azure에서는 Docker 가상 컴퓨터에 SSH로 접속할 일이 없습니다). 클라우드 서비스를 만들 때 지역을 일본 서부로 설정했으므로 -l 'Japan West'를 설정합니다.
  • <클라우드 서비스 이름>: 방금 생성한 클라우드 서비스의 도메인을 입력합니다.
  • <이미지 이름>: 리눅스 이미지 이름을 입력합니다. 여기서는 우분투 14.04 20140618.1을 사용하였습니다.
  • <SSH 사용자 이름>, <SSH 패스워드>: SSH 계정과 패스워드를 설정합니다.

이미지 이름 알아내기
azure vm image list | grep 14_04 명령을 실행하면 우분투 14.04 이미지 이름을 알아낼 수 있습니다.

$ azure vm image list | grep 14_04
data:    b39f27a8b8c64d52b05eac6a62ebad85__Ubuntu-14_04-LTS-amd64-server-20140122.1-alpha2-en-us-30GB                          Public    Linux
data:    b39f27a8b8c64d52b05eac6a62ebad85__Ubuntu-14_04-LTS-amd64-server-20140226.1-beta1-en-us-30GB                           Public    Linux
data:    b39f27a8b8c64d52b05eac6a62ebad85__Ubuntu-14_04-LTS-amd64-server-20140326-beta2-en-us-30GB                             Public    Linux
data:    b39f27a8b8c64d52b05eac6a62ebad85__Ubuntu-14_04-LTS-amd64-server-20140414-en-us-30GB                                   Public    Linux
data:    b39f27a8b8c64d52b05eac6a62ebad85__Ubuntu-14_04-LTS-amd64-server-20140414.2-en-us-30GB                                 Public    Linux
data:    b39f27a8b8c64d52b05eac6a62ebad85__Ubuntu-14_04-LTS-amd64-server-20140416.1-en-us-30GB                                 Public    Linux
data:    b39f27a8b8c64d52b05eac6a62ebad85__Ubuntu-14_04-LTS-amd64-server-20140528-en-us-30GB                                   Public    Linux
data:    b39f27a8b8c64d52b05eac6a62ebad85__Ubuntu-14_04-LTS-amd64-server-20140606.1-en-us-30GB                                 Public    Linux
data:    b39f27a8b8c64d52b05eac6a62ebad85__Ubuntu-14_04-LTS-amd64-server-20140618.1-en-us-30GB                                 Public    Linux
data:    b39f27a8b8c64d52b05eac6a62ebad85__Ubuntu-14_04-LTS-amd64-server-20140724-en-us-30GB                                   Public    Linux
data:    b39f27a8b8c64d52b05eac6a62ebad85__Ubuntu_DAILY_BUILD-trusty-14_04_1-LTS-amd64-server-20140825-en-us-30GB              Public    Linux
data:    b39f27a8b8c64d52b05eac6a62ebad85__Ubuntu_DAILY_BUILD-trusty-14_04_1-LTS-amd64-server-20140826-en-us-30GB              Public    Linux

잠시 기다리면 Docker 전용 가상 컴퓨터가 생성됩니다. 이때 사용자 계정 디렉터리 아래에 .docker 디렉터리가 생성되고 그 안에 인증서 파일이 생성됩니다. Microsoft Azure에서 생성한 Docker는 서버에 SSH로 들어가서 docker 명령을 실행하는 것이 아니라 원격에서 docker 명령을 실행하는 방식입니다. 따라서 .docker 디렉터리에 들어있는 인증서 파일을 이용해서 명령을 실행하게 됩니다. 다른 컴퓨터에서 docker 명령을 원격으로 실행하고 싶으면 .docker 디렉터리를 복사하여 사용합니다.

다음 명령을 실행하여 원격에서 docker 명령이 실행되는지 확인합니다. 실행이 되지 않는다면 Microsoft Azure 관리 포털에서 가상 컴퓨터가 완전히 시작되었는지 확인합니다.

$ sudo docker --tls -H tcp://<클라우드 서비스 이름>.cloudapp.net:4243 info
Containers: 0
Images: 0
Storage Driver: devicemapper
 Pool Name: docker-8:1-131186-pool
 Pool Blocksize: 64 Kb
 Data file: /var/lib/docker/devicemapper/devicemapper/data
 Metadata file: /var/lib/docker/devicemapper/devicemapper/metadata
 Data Space Used: 291.5 Mb
 Data Space Total: 102400.0 Mb
 Metadata Space Used: 0.7 Mb
 Metadata Space Total: 2048.0 Mb
Execution Driver: native-0.2
Kernel Version: 3.13.0-29-generic
Operating System: Ubuntu 14.04 LTS
WARNING: No swap limit support

이제 docker run 명령을 실행하여 nginx를 컨테이너를 생성합니다.

$ sudo docker --tls -H tcp://<클라우드 서비스 이름>.cloudapp.net:4243 run -d -p 80:80 nginx:latest

이제 Docker 가상 컴퓨터에 컨테이너가 생성되었습니다.

방화벽에서 80번 포트를 열어주어야 합니다. Microsoft Azure 관리 포털에서 가상 컴퓨터를 클릭하고 방금 생성한 가상 컴퓨터를 클릭합니다.


그림 12-5 Microsoft Azure 가상 컴퓨터 목록

끝점을 클릭한 뒤 아래쪽 추가를 클릭합니다.


그림 12-6 가상 컴퓨터 끝점 추가

기본값 그대로 독립형 끝점 추가를 선택하고 → 버튼을 클릭합니다.
그림 12-7 가상 컴퓨터에 끝점 추가

이름을 클릭하면 드롭다운 메뉴가 표시됩니다. 메뉴에서 HTTP를 선택하면 자동으로 포트 번호가 설정됩니다. 설정이 완료되었으면 ✔ 버튼을 클릭합니다.


그림 12-8 끝점 세부 정보 지정

HTTP 끝점이 추가되었습니다.
그림 12-9 끝점 추가 완료

웹 브라우저를 실행하고 <클라우드 서비스 이름>.cloudapp.net으로 접속합니다.


그림 12-10 Microsoft Azure Docker 컨테이너에 접속


저작권 안내

이 웹사이트에 게시된 모든 글의 무단 복제 및 도용을 금지합니다.
  • 블로그, 게시판 등에 퍼가는 것을 금지합니다.
  • 비공개 포스트에 퍼가는 것을 금지합니다.
  • 글 내용, 그림을 발췌 및 요약하는 것을 금지합니다.
  • 링크 및 SNS 공유는 허용합니다.

Published

30 November 2014