웹사이트 검색

Ubuntu 16.04에서 Docker Machine으로 원격 Docker 호스트를 프로비저닝하고 관리하는 방법


소개

Docker Machine은 개인용 컴퓨터에서 원격으로 여러 Docker 호스트를 쉽게 프로비저닝하고 관리할 수 있는 도구입니다. 이러한 서버는 일반적으로 Dockerized 호스트라고 하며 당연히 Docker 컨테이너를 실행하는 데 사용할 수 있습니다.

Docker Machine은 로컬 또는 원격 시스템에 설치할 수 있지만 가장 일반적인 방법은 로컬 컴퓨터(기본 설치 또는 가상 머신)에 설치하고 이를 사용하여 Docker화된 원격 서버를 프로비저닝하는 것입니다.

Docker Machine은 대부분의 Linux 배포판과 Mac OS X 및 Windows에 설치할 수 있지만 이 자습서에서는 Ubuntu 16.04를 실행하는 로컬 컴퓨터에 Docker Machine을 설치하고 Dockerized DigitalOcean Droplets를 프로비저닝하는 데 사용할 것입니다.

전제 조건

이 자습서를 따르려면 다음이 필요합니다.

  • Docker가 설치된 Ubuntu 16.04를 실행하는 로컬 시스템(자세한 내용은 Ubuntu 16.04에서 Docker를 설치하고 사용하는 방법 참조)
  • DigitalOcean API 토큰입니다. 없는 경우 이 안내서를 사용하여 생성하십시오. 토큰을 생성할 때 읽기-쓰기 범위가 있는지 확인하십시오. 이것이 기본값이므로 생성하는 동안 옵션을 변경하지 않으면 읽기-쓰기 기능을 갖게 됩니다. 명령줄에서 더 쉽게 사용하려면 해당 문서에 제공된 대로 토큰을 변수에 할당해야 합니다.

1단계 - 로컬 컴퓨터에 Docker 머신 설치

이 단계에서는 Ubuntu 16.04를 실행하는 로컬 컴퓨터에 Docker Machine을 설치하는 과정을 진행합니다.

Docker Machine 바이너리를 다운로드하고 설치하려면 다음을 입력합니다.

  1. wget https://github.com/docker/machine/releases/download/v0.14.0/docker-machine-$(uname -s)-$(uname -m)

파일 이름은 docker-machine-Linux-x86_64여야 합니다. 더 쉽게 작업할 수 있도록 docker-machine로 이름을 바꿉니다.

  1. mv docker-machine-Linux-x86_64 docker-machine

실행 가능하게 만드십시오.

  1. chmod +x docker-machine

시스템 명령으로 사용할 수 있도록 usr/local/bin 디렉토리로 이동하거나 복사합니다.

  1. sudo mv docker-machine /usr/local/bin

제대로 설치되었음을 나타내는 버전을 확인합니다.

  1. docker-machine version

출력은 다음과 유사해야 합니다.

Output
docker-machine version 0.14.0, build 89b8332

2단계 - 추가 Docker 머신 스크립트 설치

Docker Machine GitHub 리포지토리에는 dockerdocker-machine 명령의 사용을 용이하게 하도록 설계된 세 개의 bash 스크립트가 있습니다. 명령 완성 및 bash 프롬프트 사용자 지정을 제공합니다.

이 단계에서는 이 세 가지 스크립트를 로컬 컴퓨터에 설치합니다. /etc/bash_completion.d 디렉토리에 다운로드 및 설치됩니다.

첫 번째 스크립트를 사용하면 bash 프롬프트에서 활성 시스템을 볼 수 있습니다. 이것은 여러 Dockerized 머신으로 작업하고 전환할 때 유용합니다. 스크립트 이름은 docker-machine-prompt.bash입니다. 다운로드하려면 다음을 입력하십시오.

  1. sudo wget https://raw.githubusercontent.com/docker/machine/master/contrib/completion/bash/docker-machine-prompt.bash -O /etc/bash_completion.d/docker-machine-prompt.bash

위 파일의 설치를 완료하려면 .bashrc 파일에서 PS1 변수에 대한 사용자 지정 값을 설정해야 합니다. 이렇게 하려면 nano를 사용하여 엽니다(PS1은 bash 명령 프롬프트를 수정하는 데 사용되는 특수 셸 변수입니다).

  1. nano ~/.bashrc

해당 파일에는 PS1으로 시작하는 세 줄이 있습니다. 다음과 같아야 합니다.

PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '

PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '

PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"

각 줄의 끝에 &#36 (__docker_machine_ps1\[%s]\)를 삽입하여 다음과 같이 읽도록 합니다.

PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]$(__docker_machine_ps1 " [%s]")\$ '

PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w$(__docker_machine_ps1 " [%s]")\$ '

PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$(__docker_machine_ps1 " [%s]")$PS1"

파일을 저장하고 닫습니다.

두 번째 스크립트는 docker-machine-wrapper.bash입니다. use 하위 명령을 docker-machine 명령에 추가하여 Docker 머신 간에 쉽게 전환할 수 있습니다. 다운로드하려면 다음을 입력하십시오.

  1. sudo wget https://raw.githubusercontent.com/docker/machine/master/contrib/completion/bash/docker-machine-wrapper.bash -O /etc/bash_completion.d/docker-machine-wrapper.bash

세 번째 스크립트는 docker-machine.bash입니다. docker-machine 명령에 대한 bash 완성을 추가합니다. 다음을 사용하여 다운로드하십시오.

  1. sudo wget https://raw.githubusercontent.com/docker/machine/master/contrib/completion/bash/docker-machine.bash -O /etc/bash_completion.d/docker-machine.bash

지금까지 변경한 사항을 적용하려면 터미널을 닫았다가 다시 엽니다. SSH를 통해 시스템에 로그인한 경우 세션을 종료하고 다시 로그인하십시오. 이제 dockerdocker-machine 명령에 대한 명령 완성이 작동해야 합니다.

3단계 - Docker Machine을 사용하여 Docker화된 호스트 프로비저닝

로컬 컴퓨터에서 Docker 및 Docker Machine을 실행하고 있으므로 이제 Docker Machine의 docker-machine create 명령을 사용하여 DigitalOcean 계정에서 Dockerized Droplet을 프로비저닝할 수 있습니다. 아직 할당하지 않은 경우 다음을 사용하여 DigitalOcean API 토큰을 bash 변수에 할당합니다.

  1. export DOTOKEN=your-api-token

참고: 이 튜토리얼에서는 DOTOKEN을 DO API 토큰의 bash 변수로 사용합니다. 변수 이름은 DOTOKEN일 필요가 없으며 모두 대문자일 필요는 없습니다.

변수를 영구적으로 만들려면 ~/.bashrc 파일에 넣으십시오. 이 단계는 선택 사항이지만 터미널 세션 간에 값을 유지하려는 경우 필요합니다.

nano로 해당 파일을 엽니다.

  1. nano ~/.bashrc

다음과 유사한 행을 아무 곳에나 추가하십시오.

export DOTOKEN=your-api-token

현재 터미널 세션에서 변수를 활성화하려면 다음을 입력하십시오.

  1. source ~/.bashrc

docker-machine create 명령을 성공적으로 호출하려면 (최소한) 드라이버, API 토큰(또는 이를 평가하는 변수) 및 시스템의 고유한 이름을 지정해야 합니다. 첫 번째 컴퓨터를 만들려면 다음을 입력합니다.

  1. docker-machine create --driver digitalocean --digitalocean-access-token $DOTOKEN machine-name

기계가 생성될 때 부분 출력은 다음과 같습니다. 이 출력에서 시스템 이름은 ubuntu1604-docker입니다.

Output
... 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 ubuntu1604-docker

docker-machine이 원격으로 액세스할 수 있도록 새 호스트에 대한 SSH 키 쌍이 생성됩니다. Droplet은 원하는 운영 체제로 프로비저닝되고 Docker는 시스템에 설치됩니다. 명령이 완료되면 Docker Droplet이 실행됩니다.

명령줄에서 새로 생성된 머신을 보려면 다음을 입력합니다.

  1. docker-machine ls

출력은 다음과 유사해야 합니다.

Output
NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS ubuntu1604-docker - digitalocean Running tcp://203.0.113.71:2376 v18.05.0-ce

4단계 - 도커화된 호스트 생성 시 기본 OS 지정

기본적으로 Docker Machine으로 Docker화된 호스트를 생성할 때 사용되는 기본 운영 체제는 최신 Ubuntu LTS로 추정됩니다. 그러나 이 게시 시점에 docker-machine create 명령은 Ubuntu 18.04가 최신 LTS 에디션임에도 불구하고 여전히 Ubuntu 16.04 LTS를 기본 운영 체제로 사용하고 있습니다. 따라서 최근에 프로비저닝된 시스템에서 Ubuntu 18.04를 실행해야 하는 경우 --digitalocean-image 플래그를 docker-에 전달하여 원하는 버전과 함께 Ubuntu를 지정해야 합니다. 머신 생성 명령.

예를 들어 Ubuntu 18.04를 사용하여 머신을 만들려면 다음을 입력합니다.

  1. docker-machine create --driver digitalocean --digitalocean-image ubuntu-18-04-x64 --digitalocean-access-token $DOTOKEN machine-name

Ubuntu 버전에 국한되지 않습니다. DigitalOcean에서 지원되는 모든 운영 체제를 사용하여 머신을 생성할 수 있습니다. 예를 들어 Debian 8을 사용하여 시스템을 만들려면 다음을 입력합니다.

  1. docker-machine create --driver digitalocean --digitalocean-image debian-8-x64 --digitalocean-access-token $DOTOKEN machine-name

CentOS 7을 기본 OS로 사용하여 Docker화된 호스트를 프로비저닝하려면 다음과 같이 centos-7-0-x86을 이미지 이름으로 지정합니다.

  1. docker-machine create --driver digitalocean --digitalocean-image centos-7-0-x64 --digitalocean-access-token $DOTOKEN centos7-docker

기본 운영 체제만 선택할 수 있는 것은 아닙니다. 물방울의 크기를 지정할 수도 있습니다. 기본적으로 1GB RAM, 단일 CPU 및 25GB SSD가 있는 가장 작은 Droplet입니다.

DigitalOcean API 설명서에서 해당 슬러그를 찾아 사용하려는 물방울의 크기를 찾으십시오.

예를 들어, 2GB RAM, 2개의 CPU 및 60GB SSD가 있는 머신을 프로비저닝하려면 슬러그 s-2vcpu-2gb를 사용합니다.

  1. docker-machine create --driver digitalocean --digitalocean-size s-2vcpu-2gb --digitalocean-access-token $DOTOKEN machine-name

DigitalOcean 드라이버를 사용하여 Docker Machine을 생성하는 것과 관련된 모든 플래그를 보려면 다음을 입력하십시오.

  1. docker-machine create --driver digitalocean -h

팁: DigitalOcean 대시보드의 Droplet 페이지를 새로 고치면 docker-machine 명령을 사용하여 생성한 새 머신이 표시됩니다.

5단계 - 추가 Docker 머신 명령 실행

create 하위 명령을 사용하여 Docker화된 호스트를 프로비저닝하는 방법을 살펴보았습니다. 또한 ls 하위 명령을 사용하여 Docker Machine에서 사용할 수 있는 호스트를 나열하는 방법도 살펴보았습니다. 이 단계에서는 몇 가지 docker-machine 하위 명령을 더 배웁니다.

Docker화된 호스트에 대한 자세한 정보를 얻으려면 다음과 같이 inspect 하위 명령을 사용하십시오.

  1. docker-machine inspect machine-name

출력에는 다음과 같은 줄이 포함되어야 합니다. Image 줄은 사용된 Linux 배포판의 버전을 나타내고 크기 줄은 크기 슬러그를 나타냅니다.

Output
... { "ConfigVersion": 3, "Driver": { "IPAddress": "203.0.113.71", "MachineName": "ubuntu1604-docker", "SSHUser": "root", "SSHPort": 22, ... "Image": "ubuntu-16-04-x64", "Size": "s-1vcpu-1gb", ... }, ---

호스트에 대한 연결 구성을 인쇄하려면 다음을 입력하십시오.

  1. docker-machine config machine-name

출력은 다음과 유사해야 합니다.

Output
--tlsverify --tlscacert="/home/kamit/.docker/machine/certs/ca.pem" --tlscert="/home/kamit/.docker/machine/certs/cert.pem" --tlskey="/home/kamit/.docker/machine/certs/key.pem" -H=tcp://203.0.113.71:2376

docker-machine config 명령 출력의 마지막 줄은 호스트의 IP 주소를 나타내지만 다음을 입력하여 해당 정보를 얻을 수도 있습니다.

  1. docker-machine ip machine-name

원격 호스트의 전원을 꺼야 하는 경우 docker-machine을 사용하여 중지할 수 있습니다.

  1. docker-machine stop machine-name

중지되었는지 확인합니다.

  1. docker-machine ls

기계의 상태가 변경되었습니다.

Ouput
NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS ubuntu1604-docker digitalocean Timeout

다시 시작하려면:

  1. docker-machine start machine-name

시작되었는지 확인합니다.

  1. docker-machine ls

이제 STATE가 호스트에 대해 Running으로 설정되었음을 알 수 있습니다.

Ouput
NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS ubuntu1604-docker - digitalocean Running tcp://203.0.113.71:2376 v18.05.0-ce

그런 다음 다음을 사용하여 제거할 수 있습니다.

  1. docker-machine rm machine-name

Droplet은 docker-machine.에 의해 생성된 SSH 키와 함께 삭제됩니다. 이제 Docker화된 호스트를 나열할 때 방금 삭제한 호스트가 표시되지 않아야 합니다.

  1. docker-machine ls

6단계 - SSH를 통해 도커화된 호스트에서 명령 실행

지금까지 기계에 대한 정보를 얻었지만 그 이상을 할 수 있습니다. 예를 들어 로컬 시스템에서 docker-machinessh 하위 명령을 사용하여 Docker 호스트에서 기본 Linux 명령을 실행할 수 있습니다. 이 섹션에서는 docker-machine을 통해 ssh 명령을 수행하는 방법과 Docker화된 호스트에 대한 SSH 세션을 여는 방법을 설명합니다.

Ubuntu를 운영 체제로 사용하여 머신을 프로비저닝했다고 가정하고 로컬 시스템에서 다음 명령을 실행하여 Docker 호스트에서 패키지 데이터베이스를 업데이트합니다.

  1. docker-machine ssh machine-name apt-get update

다음을 사용하여 사용 가능한 업데이트를 적용할 수도 있습니다.

  1. docker-machine ssh machine-name apt-get upgrade

원격 Docker 호스트가 어떤 커널을 사용하고 있는지 잘 모르시겠습니까? 다음을 입력합니다.

  1. docker-machine ssh machine-name uname -r

ssh 하위 명령을 사용하여 원격 Docker 호스트에서 명령을 실행하는 것 외에도 이를 사용하여 시스템 자체에 로그인할 수도 있습니다. 다음과 같이 입력하는 것만큼 쉽습니다.

  1. docker-machine ssh machine-name

원격 호스트에 로그인했다는 사실을 반영하도록 명령 프롬프트가 변경됩니다.

Output
root@machine-name#

원격 호스트를 종료하려면 다음을 입력하십시오.

exit

7단계 - 도커화된 호스트 활성화

Docker 호스트를 활성화하면 로컬 Docker 클라이언트가 해당 시스템에 연결되어 원격 시스템에서 일반 docker 명령을 실행할 수 있습니다. Docker 호스트를 활성화하려면 다음 명령을 입력합니다.

  1. eval $(docker-machine env machine-name)

또는 다음 명령을 사용하여 활성화할 수 있습니다.

  1. docker-machine use machine-name

팁: 여러 Docker 호스트로 작업할 때 docker-machine use 명령은 하나에서 다른 호스트로 전환하는 가장 쉬운 방법입니다.

위의 명령 중 하나를 입력하면 bash 프롬프트가 변경되어 Docker 클라이언트가 원격 Docker 호스트를 가리키고 있음을 나타내야 합니다. 이런 형태를 취하게 됩니다. 호스트 이름은 프롬프트 끝에 있습니다.

username@localmachine:~ [machine-name]$

이제 이 명령 프롬프트에 입력하는 모든 docker 명령이 해당 원격 호스트에서 실행됩니다.

docker-machine ls 명령이 실행되는 터미널에서 호스트가 활성 상태인 경우 ACTIVE 열 아래의 별표는 활성 상태임을 나타냅니다.

Output
NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS ubuntu1604-docker * digitalocean Running tcp://203.0.113.71:2376 v18.05.0-ce

원격 Docker 호스트를 종료하려면 다음을 입력하십시오.

docker-machine use -u

로컬 시스템에 대한 프롬프트로 돌아갑니다.

이제 원격 머신에 컨테이너를 생성해 보겠습니다.

8단계 - 원격 Docker화된 호스트에서 Docker 컨테이너 생성

지금까지 DigitalOcean 계정에 Dockerized Droplet을 프로비저닝하고 활성화했습니다. 즉, Docker 클라이언트가 이를 가리키고 있습니다. 다음 논리적 단계는 컨테이너를 스핀업하는 것입니다. 예를 들어 공식 Nginx 컨테이너를 실행해 보겠습니다.

docker-machine use를 사용하여 원격 시스템을 선택합니다.

  1. docker-machine use machine-name

이제 이 명령을 실행하여 해당 머신에서 Nginx 컨테이너를 실행합니다.

  1. docker run -d -p 8080:80 --name httpserver nginx

이 명령에서 우리는 Nginx 컨테이너의 포트 80을 Dockerized 호스트의 포트 8080에 매핑하여 어디서나 기본 Nginx 페이지에 액세스할 수 있도록 합니다.

명령이 성공적으로 실행되면 웹 브라우저에서 http://docker_machine_ip:8080으로 이동하여 기본 Nginx 페이지에 액세스할 수 있습니다.

Docker 호스트가 여전히 활성화되어 있는 동안(프롬프트에서 해당 이름으로 표시됨) 해당 호스트의 이미지를 나열할 수 있어야 합니다.

docker images

출력에는 방금 사용한 Nginx 이미지와 이전에 다운로드한 다른 이미지가 포함되어야 합니다.

Output
REPOSITORY TAG IMAGE ID CREATED SIZE nginx latest ae513a47849c 3 weeks ago 109MB

호스트에서 활성 또는 실행 중인 컨테이너를 나열할 수도 있습니다.

  1. docker ps

이 단계에서 실행한 Nginx 컨테이너가 유일한 활성 컨테이너인 경우 출력은 다음과 같아야 합니다.

Output
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 4284f9d25548 nginx "nginx -g 'daemon of…" 20 minutes ago Up 20 minutes 0.0.0.0:8080->80/tcp httpserver

원격 호스트에 대한 프롬프트를 종료하려면 다음을 입력하십시오. 이렇게 하면 터미널도 닫힙니다.

  1. exit

참고: 원격 머신에 컨테이너를 생성하려는 경우 Docker 클라이언트가 이를 가리켜야 합니다. 즉, 사용 중인 터미널의 활성 머신이어야 합니다. 그렇지 않으면 로컬 컴퓨터에 컨테이너를 생성하게 됩니다. 다시 말하지만 명령 프롬프트를 가이드로 삼으십시오.

9단계 - 충돌 보고 비활성화(선택 사항)

기본적으로 Docker Machine을 사용하여 Docker화된 호스트를 프로비저닝하려는 시도가 실패하거나 Docker Machine이 충돌할 때마다 일부 진단 정보가 자동으로 Bugsnag의 Docker 계정으로 전송됩니다. 이에 익숙하지 않은 경우 설치 .docker/machine 디렉터리에 no-error-report라는 빈 파일을 생성하여 보고를 비활성화할 수 있습니다.

파일을 만들려면 다음을 입력합니다.

  1. touch ~/.docker/machine/no-error-report

프로비저닝이 실패하거나 Docker Machine이 충돌하는 경우 파일에서 오류 메시지를 확인하십시오.

결론

지금까지 Docker Machine을 설치하고 사용하여 하나의 로컬 시스템에서 원격으로 여러 Docker Droplet을 프로비저닝하는 방법을 소개했습니다. 이제 필요한 만큼 DigitalOcean 계정에서 Docker화된 호스트를 신속하게 프로비저닝할 수 있습니다.

Docker Machines에 대한 자세한 내용은 이 GitHub 페이지를 참조하세요.