'docker-machine'에 해당되는 글 1건

  1. 2015.07.21 Docker Machine

Docker Machine

Docker 2015. 7. 21. 15:30

Docker Machine


로컬에서 개발 환경을 구축할때 여러대의 가상머신에 Docker를 올리고픈 마음이 생겼는데 boot2docker를 통해서는 하나의 가상머신만을 바라보고 있기때문에 어쩔 수 없이 별도의 독립된 여려개의 VM을 만들어야 했습니다.
물론 Vagrant를 사용하여 불편함을 해소 할 수 는 있습니다만 Docker Machine이 나와서 좀더 수월하게 Docker를 사용할 수 있게 되었습니다. Vagrant와 많은 부분이 유사합니다.

아직은 베타 버전이기 때문에 실제 운영환경에서의 사용은 추천되지 않습니다만 docker의 개발 추이가 상당이 빠르니 머지않아 정식 버전이 나오리라 기대해 봅니다.

Docker Machine은 로컬 서버나 클라우드, 데이터센터 내부에서 Docker 호스트를 생성할 수 있습니다. 로컬이나 원격지의 서버에 Docker 가 설치되며 Docker 클라이언트가 원격지의 Docker와 통신합니다.

Docker 호스트가 생성후 Docker 호스트 재시작, 중지, Docker 업그레이드, Docker 클리이언트 통한 설정 등의 작업이 가능합니다.

설치

해당 파일을 다운받아 docker-machine 으로 파일명을 변경하고 실행 옵션을 주는 것으로 설치는 간단하게 끝납니다.
좀더 자세한 설명은 Docker Machine 문서를 참고해 주세요.

OS X and Linux

OS X나 Linux에서 설치 방법은 바이너리 파일을 PATH(/usr/local/bin)상에 다운로드 하여 실행 가능하도록 변경해 줍니다.
https://github.com/docker/machine/releases/에서 사용하는 OS의 바이너리 파일명을 확인해 주세요.

OSX에서의 다운로드 실행 명령은 아래와 같습니다. Linux의 경우는 darwinlinux로 변경하면 됩니다.

$ curl -L https://github.com/docker/machine/releases/download/v0.3.0/docker-machine_darwin-amd64 > /usr/local/bin/docker-machine
$ chmod +x /usr/local/bin/docker-machine

설치후 버전을 확인합니다.

$ docker-machine -v
machine version 0.3.0

ssh를 사용하지 않고 원격서버의 Docker를 핸들링하기 위해서는 로컬에 Docker 클라이언트를 설치 해야 됩니다.
이미 boot2docker가 설치되어 있다면 설치 하지 않아도 무방할 듯 합니다.

$ curl -L https://get.docker.com/builds/Darwin/x86_64/docker-latest > /usr/local/bin/docker
Windows

Windows에서 Docker Machine을 사용할 경우 ssh등의 의존하는 일부 프로그램과 기능 쉘을 제공하는 msysgit을 사용하는 것이 좋습니다.
mssysgit를 설치하고 터미널 프롬프트에서 다음 명령을 실행합니다. 64비트 Windows라고 가정합니다. 32비트의 경우는 x86_64 대신에 i386으로 변경합니다.
https://github.com/docker/machine/releases/에서 사용하는 OS의 바이너리 파일명을 확인해 주세요.

Docker 클라이언트 설치
$ curl -L https://get.docker.com/builds/Windows/x86_64/docker-latest.exe > /bin/docker
Docker Machine 설치
$ curl -L https://github.com/docker/machine/releases/download/v0.3.0/docker-machine_windows-amd64.exe > /bin/docker-machine

Docker Machine 버전 확인

$ docker-machine -v
machine version 0.3.0

로컬 호스트상의 VirtualBox에 docker-machine 생성, 사용 및 관리

먼저 안전하게 VirtualBox 4.3.28 버전을 설치합니다.

docker-machine ls

사용 가능한 서버를 표시합니다.

$ docker-machine ls
NAME   ACTIVE   DRIVER   STATE   URL
docker-machine create —driver [드라이버] [서버 이름]

하나의 가상 서버를 생성합니다.
아래 명령 예제에서는 드라이버에 virtualbox를 지정하여 로컬의 ViertualBox에 dev라는 이름으로 가상 서버를 생성하였습니다. vertualbox 이외의 amazonec2, azure, digitalocean, google 등의 클라우드 환경의 드라이버를 지정 할 수도 있습니다. 드라이버의 자세한 코드는 Docker Machine GitHub drivers 를 참고하세요.

$ docker-machine create --driver virtualbox dev

Creating CA: /home/username/.docker/machine/certs/ca.pem
Creating client certificate: /home/username/.docker/machine/certs/cert.pem
Image cache does not exist, creating it at /home/username/.docker/machine/cache...
No default boot2docker iso found locally, downloading the latest release...
Downloading https://github.com/boot2docker/boot2docker/releases/download/v1.6.2/boot2docker.iso to /home/username/.docker/machine/cache/boot2docker.iso...
Creating VirtualBox VM...
Creating SSH key...
Starting VirtualBox VM...
Starting VM...
To see how to connect Docker to this machine, run: docker-machine env dev

생성이 완료되면 docker-machine ls로 서버를 확인해 주세요.

$ docker-machine ls
NAME   ACTIVE   DRIVER       STATE     URL                         SWARM
dev             virtualbox   Running   tcp://192.168.99.100:2376

4코어/4GB의 digitalocean의 경우 아래와 같이 드라이버와 옵션을 지정해서 생성 가능합니다.

$ docker-machine create --driver digitalocean --digitalocean-access-token {토큰 지정} --digitalocean-region sgp1 --digitalocean-size 4gb dev
대상 Docker 호스트에 docker 클라이언드 지정
$ eval "$(docker-machine env dev)"

docker 호스트 dev 서버에 docker 클라이언트가 지정되어 docker 명령어가 dev 호스트 서버에서 실행 되어집니다. Docker 호스트를 재기동 하거나 새로운 터미널창을 열었을 경우에는 매번 위의 명령을 실행하여야 합니다.

현재 Docker 클라이언트에 연결된 서버 확인

docker-machine active 로 클라이언트에 연결된 활성화된 호스트명을 확인 할 수 있습니다.

$ docker-machine active
dev
Docker 호스트 서버 정보 확인

$ docker-machine env devdev 서버의 정보를 확인 할 수 있습니다.

$ docker-machine env dev
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://172.16.62.130:2376"
export DOCKER_CERT_PATH="/Users/<your username>/.docker/machine/machines/dev"
export DOCKER_MACHINE_NAME="dev"
# Run this command to configure your shell:
# eval "$(docker-machine env dev)"
Docker 호스트에서 docker 명령 실행

eval "$(docker-machine env dev) 로 Docker 클라이언트를 dev서버에 연결한 뒤에 평소처럼 로컬에서 docker 명령을 실행 하면 됩니다.
현재 열어둔 터미널창에서 eval "$(docker-machine env dev)을 실행했으니 바로 docker 명령어를 실행 합니다.

$ docker run busybox echo hello world
Unable to find image 'busybox' locally
Pulling repository busybox
e72ac664f4f0: Download complete
511136ea3c5a: Download complete
df7546f9f060: Download complete
e433a6c5b276: Download complete
hello world
Docker 호스트의 ip 확인
$ docker-machine ip dev
192.168.99.100
Docker 호스트 컨테이너 실행

호스트에 nginx 웹서버를 실행하고 8000포트를 컨테이너의 80포트로 포워딩 합니다.

$ docker run -d -p 8000:80 nginx

docker-machine ip로 Docker 호스트의 ip를 받아온뒤 8000 포트로 접속하여 웹페이지가 정상적으로 보여지는지 확인 합니다.

$ curl $(docker-machine ip dev):8000

<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>
Docker 호스트의 정지, 시작

docker-machine start로 호스트를 시작하고, docker-machine stop으로 정지가 가능합니다. 아래 예제는 dev 호스트를 정지 후 다시 시작합니다.

$ docker-machine stop dev
$ docker-machine start dev
Posted by dewnine
,