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
- install Docker
- 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
- 설치를 확인 하고 Docker machine Verion을 체크한다:
$ docker-machine version docker-machine version 0.16.0, build 9371605
Docker-machine with AWS
- AWS EC2 instance를 Dockerized하게 만들어본다.
- Docker machine official docs 참조
Step 1. AWS Credential 정보를 준비
AWS root 권한이 있는 Account를 통해 AWS Access key
와 AWS Secret Access key
를 준비한다.
Step 2. Docker machine을 사용해 instance를 생성
Step 1에서 준비했던 Credential 정보를 설정한다. (2가지 방법)
- AWS CLI에서
aws configure
를 통해 설정 ~/.aws/credentials
를 생성하여 다음과 같이 key 설정을 한다.[default] aws_access_key_id = AKID1234567890 aws_secret_access_key = MY-SECRET-KEY
- AWS CLI에서
다음 명령을 통해 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를 생성
AWS web console로 들어가서 instance 생성을 확인한다.
terminal에서 다음 명령어를 통해 생성된 machine을 확인한다.
$ 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 확인*
Activate된 status*
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 명령어 사용하기
docker 설치 후에 Test용으로 좋은
Hello-world
image를 실행해본다.$ docker run hello-world
aws-sandbox에서
hello-world
가 동작하는 것을 확인이 되었으면, ssh를 통해 연결해본다.$ docker-machine ssh aws-sandbox sudo docker container ls -a exit
Container 리스트를 조회하면
hello-world
가 실행되고 최근에 종료되었음을 확인할 수 있다.이건, active상태를 unset하기 전 local에서 container 리스트를 조회해 보았다.
-> remote container에 대해 local에서 조회가 가능하다.
aws-sandbox 연결을 해제하고, active상태를 unset한다. 그리고 이미지 정보를 다시 확인해보면
hello-world
가 없음을 확인할 수 있다.즉, local에서 동작하는 docker와 docker-machine을 통해 연결된 image정보와 container는 개별적으로 관리된다.
eval
명령을 통해 개별적인 연결제어가 가능하다.
More
eval
로 활성화된 docker machine은 한 session에 한해서 동작하는 것같다.
즉, termial로 2개의 tab을 키고 한쪽에서 docker-machine을 Active한 상태로docker
로 여러 조회를 해보니 하나의 tab에서는 local 정보가 Active한 다른 tab에서는 remote machine의 정보가 조회되었다.
'DevOps > Docker' 카테고리의 다른 글
[Docker] Container vs Process (0) | 2021.03.17 |
---|---|
[Docker] Shell and Exec Form in dockerfile (0) | 2021.03.14 |
[Docker] set up secure credential storage for Docker (0) | 2021.03.02 |
[Docker] 특정 Docker Version 설치하기 in Ubuntu 18.04 (0) | 2021.02.26 |
[Docker] Wordpress + MySQL5.7 Container (0) | 2021.02.10 |