docker-machine 에서 ubuntu 를 generic 으로 연동할 때 Computer Tip

docker는 이제 커다란 주류라기 보다는 하나의 메인으로 자리잡고 있는 모습입니다.
그럼에도 불구하고 많은 툴 등이 아직까지는 계속 다듬어지고 있는 모습인데요.

docker-machine은 간단히 이야기 하자면 다음과 같습니다.

우선 실제 호스트이건 아니면 VM 이건 docker daemon이 돌고 있다고 가정합니다.
그러면 터미널에서 실행하는 docker 명령어는 docker client로서 해당 docker 서버에
명령을 내린다고 보면 됩니다.

이런 docker 서비스가 돌고있는 머신을 Docker Host 라고 하는데요,
Docker Host에는 여러개의 컨테이너가 돌 수 있게 되지요.

docker-machine은 그런 Docker Host를 목록으로 가지고 있으면서
쉽게 해당 Docker Host로 docker 가 연결될 수 있게 하는 명령어 집합입니다.

아마존 AWS, MS Azure, Googld Cloud 등의 유명한 모든 클라우드를
포함하여 실제 머신 (docker 가 설치된 Linux)을 포함 VirtualBox, VMWareFusion 등의
가상머신도 드라이버 개념으로 연동가능합니다. 


실제 Linux 에 설치된 Docker Host인 경우에는 generic 이란 드라이버로 연결되는데
다음은 그 연결에 관한 이야기 입니다.

우선 실제 Ubuntu 16.04를 설치한 머신에 docker를 설치하는 방법은
해당 문서를 이용하여 잘 설치하였습니다.

이제는 가지고 있는 MacBookPro에 docker 및 docker-machine 을 설치합니다.

위와 같이 최신 버전의 docker가 Mac 용으로도 나와 있습니다. 처음 알파일 때는 죽는 경우도 있었는데
최신 안정 버전은 그런 일이 없고 잘 되는 것 같습니다.

1) SSH 접속 확인

다음과 같이 연동할 장비가 있습니다.

hostnaem : imot1
접속사용자 : future

이미 맥북프로에서 ssh-keggen 을 하고 나온 ~/.ssh/id_rsa.pub 공개키를
future@imot1:~/.ssh/authorized_keys 파일에 추가해 놓고
암호 물어보지 않고 맥의 터미널에서 future@imot1 장비로 접속 가능합니다.

이제 연동을 위하여 아래와 같은 명령을 내렸는데...

$ docker-machine create --driver generic --generic-ip-address=imot1 --generic-ssh-key ~/.ssh/id_rsa --generic-ssh-user future imot1
Running pre-create checks...
Creating machine...
(imot1) Importing SSH key...
Waiting for machine to be running, this may take a few minutes...
Detecting operating system of created instance...
Waiting for SSH to be available...
Detecting the provisioner...
Provisioning with ubuntu(systemd)...
Error creating machine: Error running provisioning: Something went wrong running an SSH command!
command : sudo hostname imot1 && echo "imot1" | sudo tee /etc/hostname
err     : exit status 1
output  : sudo: no tty present and no askpass program specified

위와 같이 오류가 발생했습니다.

대충 확인해 보니 sudo 를 이용하여 명령을 내리면서 오류가 발생하더군요.
검색해 보니 sudo 명령에 암호를 입력하는 명령을 처리 못해 발생하는 것인데
(조금 후에는 해결되어 있을 수도 있으나...)


2) 연동할 Linux 머신에서 작업해 주어야 할 일

해당 linux 머신의 터미널에서,

$ sudo visudo
명령을 열어 맨 마지막으로 이동 (G 키입력)

future ALL=(ALL:ALL) ALL

대신

#future ALL=(ALL:ALL) ALL
future ALL=NOPASSWD: ALL

으로 하고 저장하고 나옵니다.

그러면 다음부터는 해당 사용자(위에서는 future)로 로그인하여
sudo 명령이 암호없이 그대로 superuser 권한을 갖습니다.
(물론 보안 이슈가 생깁니다만... 일단 일을 해결하기 위하여)


이제 위의 명령을 다시 내리면

docker-machine create --driver generic --generic-ip-address=imot1 --generic-ssh-key ~/.ssh/id_rsa --generic-ssh-user future imot1
Running pre-create checks...
Creating machine...
(imot1) Importing SSH key...
Waiting for machine to be running, this may take a few minutes...
Detecting operating system of created instance...
Waiting for SSH to be available...
Detecting the provisioner...
Provisioning with ubuntu(systemd)...
Installing Docker...
Copying certs to the local machine directory...
Copying certs to the remote machine...
Setting Docker configuration on the remote daemon...
Checking connection to Docker...
Docker is up and running!
To see how to connect your Docker Client to the Docker Engine running on this virtual machine, run: docker-machine env imot1

위와 같이 성공적으로 작업이 완료되었다고 나오고,

$ docker-machine ls
NAME        ACTIVE   DRIVER         STATE     URL                          SWARM   DOCKER    ERRORS
imot1       -        generic        Running   tcp://imot1:2376                     v1.12.0   

위와 같이 잘 동작하고 있음을 알 수 있습니다.

참고로 맥북프로에서 VmwareFusion 을 설치하여 가상머신을 사용하고 있는데

$ docker-machine create --driver vmwarefusion test-host
Running pre-create checks...
Creating machine...
(test-host) Copying /Users/mcchae/.docker/machine/cache/boot2docker.iso to /Users/mcchae/.docker/machine/machines/test-host/boot2docker.iso...
(test-host) Creating SSH key...
(test-host) Creating VM...
(test-host) Creating disk '/Users/mcchae/.docker/machine/machines/test-host/test-host.vmdk'
(test-host) Virtual disk creation successful.
(test-host) Starting test-host...
(test-host) Waiting for VM to come online...
Waiting for machine to be running, this may take a few minutes...
Detecting operating system of created instance...
Waiting for SSH to be available...
Detecting the provisioner...
Provisioning with boot2docker...
Copying certs to the local machine directory...
Copying certs to the remote machine...
Setting Docker configuration on the remote daemon...
Checking connection to Docker...
Docker is up and running!
To see how to connect your Docker Client to the Docker Engine running on this virtual machine, run: docker-machine env test-host

위와 같이 하면 VmwareFusion 을 이용하여 가상머신을 만들고
boot2docker.iso 를 받아 CoreOS가 설치되고 명령을 내릴 준비가 됩니다. ​

그러면 

$ docker-machine ls
NAME        ACTIVE   DRIVER         STATE     URL                          SWARM   DOCKER    ERRORS
imot1       -        generic        Running   tcp://imot1:2376                     v1.12.0   
test-host   -        vmwarefusion   Running   tcp://192.168.112.131:2376           v1.12.1   

위와 같이 test-host Docker Host가 만들어 졌음을 확인할 수 있습니다.

vmwarefusion 대신 virtualbox 드라이버를 이용하여 만들 수 있습니다.


어느 분께는 도움이 되셨기를...

핑백

덧글

댓글 입력 영역

구글애드텍스트