-
Docker-machine
Docker-machine은 가상환경이나 클라우드 등에서 호스트OS의 커맨드만으로 docker를 사용하기 위한 가상 환경을 생성해 줍니다. 즉, 원격 시스템에서 docker host를 프로비저닝하고 관리할 수 있는 기능을 갖추고 있습니다.
-
GCP(Google Cloud Platform)에 Docker Host 프로비저닝
들어가기에 앞서, GCP에서 docker host 프로비저닝 방법은 docs.docker 홈페이지에서 제공 합니다. (https://docs.docker.com/v17.12/machine/drivers/gce/#example)
또한 구축하기 전에 아래 패키지들이 설치되어 있어야 합니다.
- Docker CE (https://nirsa.tistory.com/45?category=868315)
- Docker-machine (https://nirsa.tistory.com/85?category=868315)
- Google Cloud SDK (https://nirsa.tistory.com/77?category=870325)
gcloud auth login
docker-machine create --driver google --google-project [PROJECT_ID] [Docker Host name] ## 구글 프로젝트 ID 입력, 생성할 VM 인스턴스명 입력
docker-machine create --driver google \
--google-project [PROJECT_ID] \ ## 구글 프로젝트 ID 입력
--google-zone asia-northeast1-a \ ## 가장 가까운 도쿄로 설정 합니다.
--google-machine-type f1-micro \ ## 높은 사양이 필요 없기에 f1-micro 으로 설정 합니다.
[Docker Host name] ## 생성할 VM 인스턴스 명
#ex)
#docker-machine create --driver google \
# --google-project nirsa-project \ ## 구글 프로젝트 ID 입력
# --google-zone asia-northeast1-a \ ## 가장 가까운 도쿄로 설정 합니다.
# --google-machine-type f1-micro \ ## 높은 사양이 필요 없기에 f1-micro 으로 설정 합니다.
#nirsa-host ## 생성할 VM 인스턴스 명
위 명령은 두가지 vm을 생성 하고 아래와 같이 진행 됩니다. 둘중 하나만 입력해도 상관은 없습니다.
GCP의 경우 굉장히 매뉴얼화가 잘 되어 있습니다. 위 코드의 asia-northeast1-a 와 f1-micro를 좀 더 알고 싶으시면 아래 구글 클라우드 메뉴얼을 참고해 주세요.
(https://cloud.google.com/compute/docs/regions-zones/?hl=ko)
(https://cloud.google.com/compute/docs/machine-types?hl=ko)
-
docker-machine command
이전에 docker와 docker-compose 명령어를 보앗다면 큰 차이가 없었다고 생각이 될텐데, docker-machine도 명령어 자체는 docker나 docker-compose와의 차이가 크게 없습니다. 대부분의 기능이 구현되어 있기 때문에 inspect, ls 등등도 모두 같아 아래엔 몇개만 간단히 정리 하겠습니다.
docs.docker 홈페이지에서 여러 메뉴얼을 확인하실 수 있습니다. (https://docs.docker.com/v17.09/machine/get-started/#run-containers-and-experiment-with-machine-commands)
1. docker host 생성 : 상단 프로비저닝 참고
2. docker host 삭제/강제중지
# 삭제
docker-machine rm [docker host name]
# 삭제
docker-machine kill [docker host name]
3. docker host 실행/정지/재실행
# 실행
docker-machine start [docker host name]
# 정지
docker-machine stop [docker host name]
# 재실행
docker-machine restart [docker host name]
4. docker host 접속
호스트OS에서 docker host로 ssh 접속할 때 사용 합니다.
# 접속
docker-machine ssh [docker host name]
5. docker host 파일 다운로드/업로드
docker-machine의 scp 기능을 이용해 vm간 파일 다운로드/업로드가 가능 합니다. docker host name이 없을 경우 호스트OS로 간주 합니다.
단, 주의해야할 점은 scp를 사용할 때 docker-uesr 계정을 통해 이루어지므로 permission error가 발생할 수 있습니다. 적당한 권한(ex. chown docker-user.root [path])을 부여 해주어야 합니다.
# 호스트OS -> Docker host1
docker-machine scp [원본 파일] [docker host name]:[다운받을 경로]
# Docker host1 -> Docker host2
docker-machine scp [docker host name]:[원본 파일] [docker host name]:[다운받을 경로]
# Docker host2 -> 호스트OS
docker-machine scp [docker host name]:[원본 파일] [다운받을 경로]
아래의 경우는 호스트OS의 test2 파일을 vm01 이라는 docker host의 /tmp 경로로 파일을 업로드 합니다.
/root 디렉토리는 권한 에러가 발생 합니다.