Docker Cloud로 Amazon EC2 인스턴스에 배포하기

Docker Cloud로 Amazon EC2 인스턴스 생성하기

1. 왼쪽 사이드 메뉴의 Cloud Settings에 들어간 다음, Cloud providers에 Amazon Web Services를 등록한다.

https://docs.docker.com/docker-cloud/infrastructure/link-aws/

2. 왼쪽 사이드 메뉴의 Node Clusters에 들어간 다음, Create 버튼을 누른다.

3.

1번 과정에서 Amazon Web Services를 등록하였다면, PROVIDER를 선택할 때 Amazon Web Services가 나타날 것이다. Amazon Web Services를 선택하면 아래에 REGION, VPC, TYPE/SIZE 항목들도 추가로 나타나는데, 자신이 돌리고 싶은 Amazon EC2 인스턴스의 설정에 맞게 선택하면 된다.
모두 완료하였다면, Launch node cluster를 클릭한다.

4. node cluster가 생성되면 기본적으로 하나의 node가 생성된다.

그리고 이 node가 배포되기까지는 약 1 ~ 2분 정도의 시간이 소요된다.

node의 배포가 완료되면, node의 이름과 IP 주소와 일치하는 EC2 인스턴스가 생성되었음을 AWS에서 확인할 수 있다.

Node에 SSH 접속하기

1. 이젠 이 node에 SSH 접속하기 위해서 node에 내 public key를 전달해주어야 한다.

https://docs.docker.com/docker-cloud/infrastructure/ssh-into-a-node/#/create-a-stack-in-docker-cloud

우선 접속에 필요한 key pair(public key와 private key)를 생성해야한다. 기존에 key pair가 있다면 그것을 사용해도 된다.

$ cd ~/.ssh/
$ ssh-keygen -t rsa

위의 명령어를 실행하면 file 이름과 passphrase를 입력하라고 나오는 데, 자신이 원하는 file 이름과 passphrase로 설정하면 된다.(passphrase는 최소 5자 이상이어야 한다.) passphrase는 나중에 SSH 접속을 위해서 필요하므로 기억해두도록 하자.
예를 들어 file 이름을 test로 했다면, 현재 경로에 test(private key)와 test.pub(public key) 파일이 생성되었을 것이다.

2. 이제 이 test.pub(public key)를 내 Node에 전달해주어야 되는데, Docker Cloud에서는 자체적으로 이를 위해 dockercloud/authorizedkeys라는 image를 제공해준다.

https://docs.docker.com/docker-cloud/infrastructure/ssh-into-a-node/#create-a-stack-in-docker-cloud

이 image를 service로 돌리기 위해 새로운 stack을 하나 만들어야 한다.

stack file에는 위의 문서에 나와있는 내용을 복붙하면 된다.(Stack의 이름은 자신이 원하는 이름으로 정하면 된다.) 여기서 AUTHORIZED_KEYS 부분만 내가 아까 생성한 test.pub(public key)의 내용으로 바꾸어 준 후, Create and deploy 버튼을 클릭하면, service가 실행될 것이다.
service가 실행되면 자동으로 내가 설정한 public key를 나의 node들에게 전달해준다.(어떤 설정도 하지 않았다면 default로 내가 가진 모든 node들에게 전달해준다.)

현재 나는 node가 3개를 돌리고 있는데, 그에 따라 container도 3개가 생성돼었음을 볼 수 있다.

3. test.pub(public key)가 node에 성공적으로 전달되었으면, 이제 test(private key)로 SSH 접속이 가능하다. SSH 접속하는 방법은 SSH 간편하게 접속하기를 참고하자.

config 파일을 아래와 같이 설정한 후,

Host test  
    HostName 52.199.3.79 
    User root 
    IdentityFile ~/.ssh/test
$ ssh test

를 실행하면, passphrase를 묻는데 아까 자신이 설정한 passphrase를 입력하면 된다. 처음 접속 시에만 passphrase를 확인할 뿐, 다음 번 접속 시에는 다시 묻지 않는다.

정상적으로 나의 EC2 인스턴스에 접속되었다.

$ cd .ssh/
$ cat authorized_keys

위의 명령어를 실행해보면, 내가 만든 public key가 등록되어있음을 볼 수 있다.

Node에 간단한 웹 서버 띄우기

1. 왼쪽 사이드 메뉴의 Services에 들어간 다음, Create 버튼을 누른다.

2.

Docker Cloud에서 기본적으로 제공하는 dockercloud/hello-world image를 선택한다.

General settings에서 다른 설정은 특별히 건드릴 것 없고, DEPLOYMENT CONSTRAINTS만 설정해주자.
DEPLOYMENT CONSTRAINTS에서는 해당 service가 어떤 node에서 실행될 지에 대한 제약사항을 설정할 수 있다. 우리는 아까 생성한 node에서 service가 동작하길 원하므로, node cluster의 이름이 test인 node에서만 돌아가도록 제한을 두었다.

외부에서 이 container에 접속이 가능하도록 Ports에서 Published를 체크해준다. Node portdynamic으로 하면 Docker Cloud에서 알아서 포트를 할당해준다.
설정을 다 완료했으면, Create & Deploy 버튼을 클릭한다.

3.

Endpoints에서 이 container에 접속하기 위해서는 32768 포트로 접속해야함을 알려준다.
브라우저에서 해당 도메인 주소와 포트 번호로 접속하면 예쁜 고래 그림과 Hello world!가 나타난다.

node의 IP 주소로 접속해도 똑같은 결과를 얻을 수 있다.