DevOps/Docker

[Docker] docker-machine 사용해보기 with aws

Why I use Docker machine?

local환경에서 docker를 사용하면서 다수의 Container를 동작하는게 Macbook에서 많은 자원을 사용해 다른 작업과 함께하기는 불편했다.


What is Docker machine?

[공식문서설명]Docker Machine enables you to provision multiple remote Docker hosts on various flavors of Linux.

  • 기존에 실행했던 모든 Container와 만들었던 모든 Image는 현재 local에 저장되고 실행되었던 것들이다.

  • 이와는 달리 Docker Machine은, Docker Engine을 사용자 앞의 기계가 아닌 클라우드 컴퓨팅 VM을 비롯한 원격지의 서버에 설치할 수 있도록 돕는다. 또한, 원격지 서버에 들어가서 Local에 설치하듯 설치하는 것이 아니라, 원격 조정으로 설치할 수 있도록 해준다.

출처 : 소용환 생각 저장소 블로그


Install Docker machine

  1. install Docker
  2. Docker Machine 바이너리 파일을 받고 추출하여 PATH에 추가한다.
  • MacOS
      $ base=https://github.com/docker/machine/releases/download/v0.16.0 &&
      curl -L $base/docker-machine-$(uname -s)-$(uname -m) >/usr/local/bin/docker-machine &&
      chmod +x /usr/local/bin/docker-machine
  • Linux
      $ base=https://github.com/docker/machine/releases/download/v0.16.0 &&
      curl -L $base/docker-machine-$(uname -s)-$(uname -m) >/tmp/docker-machine &&
      sudo mv /tmp/docker-machine /usr/local/bin/docker-machine &&
      chmod +x /usr/local/bin/docker-machine
  1. 설치를 확인 하고 Docker machine Verion을 체크한다:
     $ docker-machine version
     docker-machine version 0.16.0, build 9371605



Docker-machine with AWS


Step 1. AWS Credential 정보를 준비

AWS root 권한이 있는 Account를 통해 AWS Access keyAWS Secret Access key를 준비한다.

Step 2. Docker machine을 사용해 instance를 생성

  1. Step 1에서 준비했던 Credential 정보를 설정한다. (2가지 방법)

    • AWS CLI에서 aws configure를 통해 설정
    • ~/.aws/credentials를 생성하여 다음과 같이 key 설정을 한다.
        [default]
        aws_access_key_id = AKID1234567890
        aws_secret_access_key = MY-SECRET-KEY

  2. 다음 명령을 통해 dockerized EC2 instance를 생성한다.

     docker-machine create --driver amazonec2 --amazonec2-open-port 8000 --amazonec2-region ap-northeast-2 aws-sandbox
    • amazonec2 유형을 driver로, Port는 8000을 열어서, Seoul Region에 aws-sandbox 이름을 가진 EC2 instance를 생성
  3. AWS web console로 들어가서 instance 생성을 확인한다.
    check ec2 instance in web console


  4. terminal에서 다음 명령어를 통해 생성된 machine을 확인한다.

     $ docker-machine ls

    docker-machine ls

    • aws-sandbox라는 이름을 가진 instance가 동작중이고, active상태는 asterisk(*)를 통해 확인할 수 있다.

      active 상태 machine을 조회하려면 docker-machine active 명령을 사용.


    • Note*: 만약 active상태가 아니라면 docker-machine env aws-sandbox를 통해 eval 명령어를 얻을 수 있다. 그리고 그 얻은 명령어 eval $(docker-machine env aws-sandbox) 를 실행하면 host를 active상태로 전환시킨다.


    • env 확인*

      docker-machine env aws-sandbox


    • Activate된 status*

      Activated docker-machine status


  5. remote host에 대해 IP와 설정값을 조회할 수도 있다.

    • 공식 사이트에 있는 예시 정보이다.

      $ docker-machine ip aws-sandbox
      192.168.99.100
      
      $ docker-machine inspect aws-sandbox
      {
         "ConfigVersion": 3,
         "Driver": {
             "IPAddress": "52.90.113.128",
             "MachineName": "aws-sandbox",
             "SSHUser": "ubuntu",
             "SSHPort": 22,
             ...
         }
      }



Step 3. 생성된 instance에 docker 명령어 사용하기

  1. docker 설치 후에 Test용으로 좋은 Hello-world image를 실행해본다.

     $ docker run hello-world

    docker run hello-world


  2. aws-sandbox에서 hello-world가 동작하는 것을 확인이 되었으면, ssh를 통해 연결해본다.

     $ docker-machine ssh aws-sandbox
     sudo docker container ls -a
     exit

    Container 리스트를 조회하면 hello-world가 실행되고 최근에 종료되었음을 확인할 수 있다.

    docker-machine ssh aws-sandbox


    check docker container


    이건, active상태를 unset하기 전 local에서 container 리스트를 조회해 보았다.
    -> remote container에 대해 local에서 조회가 가능하다.
    Can check docker container in local machine


  3. aws-sandbox 연결을 해제하고, active상태를 unset한다. 그리고 이미지 정보를 다시 확인해보면 hello-world가 없음을 확인할 수 있다.

    즉, local에서 동작하는 docker와 docker-machine을 통해 연결된 image정보와 container는 개별적으로 관리된다. eval 명령을 통해 개별적인 연결제어가 가능하다.

    no images is pulled and no container is running

More

  • eval로 활성화된 docker machine은 한 session에 한해서 동작하는 것같다.
    즉, termial로 2개의 tab을 키고 한쪽에서 docker-machine을 Active한 상태로 docker로 여러 조회를 해보니 하나의 tab에서는 local 정보가 Active한 다른 tab에서는 remote machine의 정보가 조회되었다.