본문 바로가기

카테고리 없음

[AWS] Docker ECS-CLI를 사용하여 도커 띄우기

[AWS] Docker ECS-CLI를 사용하여 도커 띄우기

ECS란?

도커를 AWS 서비스에서 쉽게 관리할 수 있도록 만든 서비스로 각 도커의 상태, 에러로그 그리고 도커 컨테이너 관리를 AWS web interface 환경과 AWS CLI를 통해 관리할 수 있습니다. 도커가 많은경우 혹은 도커의 에러메세지등을 관리해야 하는경우 ECS를 사용하면 쉽게 에러 메세지등을 체크할 수 있고 오토스케일링 더 나아가 블루 그린 deploy등 다양한 Dev-Ops 환경을 손쉽게 구현할 수 있습니다.

ECS-CLI란?

ECS-CLI는 ECS를 GUI 환경이 아닌 command line interface를 통해 쉽게 구성할 수 있도록 도와줍니다.

configure 설정하기

ecs-cli configure --cluster node-mongo --region ap-northeast-2 --default-launch-type EC2 --config-name node-mongo

보통 도커를 하고나면 컨테이너, 이미지등을 알겠는데 ECS-CLI를보면 Task, ECR, Service등 온갖 여러운 이야기들이 많습니다. 또한 요기서부터 용어에 대한 문제로 많이 헷갈리게 됩니다.

cluster 옵션

클러스터는 하나의 전체 오케스트레이션을 뜻합니다. 즉 Docker-composer를 쓰신다면 그 안에 들어가있는게 전체 클러스터라고 볼 수 있습니다. 이 클러스터는 복수개의 EC2 인스턴스로 구성될 수 있으며 역시 복수개의 Docker Container들로 구성될 수 있습니다. 위 명령어에서 ecs-cli configure를 통해 나는 node-mongo라는 클러스터를 만들것이고 지역은 서울로 한다고 되어있습니다.

default-launch-type 옵션

default-lanch-type에서는 ec2로 되어있는데 크게 ec와 fargate로 나뉘어집니다. fargate는 도커 호스트 마져도 가상화를 하여 오로지 도커 인스턴스만 관리할 수 있게 만든 서비스로 현재는 버지니아 북부만 서비스하고 있습니다. 또한 가격 역시 ec2로 구동하였을때보다는 더 비싸게되지만 실질적으로 유틸리티를 100% 구현할 수 있다는 점에서 아주 매력적인 서비스입니다. 추후 서울이 출시된다면 사용해볼 수 있겠지만 그렇지 않으므로 ec2를 설정하여줍니다.

config-name 옵션

지금까지 작성한 configure의 이름을 node-mongo로 설정해준다는 의미입니다.

profile 만들기

ecs-cli configure profile --access-key IAM --secret-key iam릿 --profile-name node-mongo

deploy를 위해 access key와 secretkey 그리고 조금 전 설정하여 주었던 profile-name을 입력하여줍니다.

ecs-cli configure default --config-name node-mongo

configure default로 config를 설정하여줍니다. 이렇게 할 경우 따로 입력 없이 자동으로 node-mongo로 세팅이 되며 맨 처음 configure를 세팅한경우 default값이 없을경우 처음 입력한 configure가 default값으로 들어가게됩니다.

up 명령어

ecs-cli up --capability-iam --size 1 --instance-type t2.micro --cluster-config node-mongo --keypair --subnets id --security-group id --vpc vpcid

지금까지 입력한 명령어들이 configure들이었다면 이번에는 실제로 인스턴스가 올라가는 명령어입니다. ecs-cli는 ecs-cli composer up 명령어와 ecs-cli up 명령어로 나뉘게 되는데 두 명령어의 차이는 전자가 docker-compose up과 같은 명령어를 수행한다면 ecs-cli up은 얼마만큼의 ec2를 사용할지를 지정하여줍니다.

capability-iam 옵션은 위 명령어가 ec2를 만들 수 있다고 정의해주며 t2.micro를 1개를 올리게됩니다.

composer up 명령어

ecs-cli composer up

이제 실질적인 docker composer up과 같은 명령어가 실행되면 해당 정의된 파일에서의 docker isntace들이 올라가게됩니다.

예시파일

version: '2'
services:
fbbot:
image: "node:8"
cpu_shares: 100
mem_limit: 128M
working_dir: /home/node/app
volumes:
- /var/fbbot:/home/node/app
ports:
- "4000:4000"
links:
- mongo
command: "npm start"
logging:
driver: awslogs
options:
awslogs-group: node-mongo
awslogs-region: ap-northeast-2
awslogs-stream-prefix: fbbot
mongo:
image: mongo
cpu_shares: 100
mem_limit: 512M
volumes:
- /var/data:/data/db
ports:
- "27017:27017"
logging:
driver: awslogs
options:
awslogs-group: node-mongo
awslogs-region: ap-northeast-2
awslogs-stream-prefix: m

image 옵션의 경우 docker hub에 올라와있는 퍼블릭한 이미지라면 위와같이 쓰지만 그렇지 않은 이미지의 경우 ecr에서 제공하는 Url을 입력하여줍니다. docker-compose와 다른점은 cpu-shares 부분과 logging 부분인데 cpu_share의 경우 cpu 점유율을 사용할 수 있는 비율을 말하며 100의 경우 100%를 의미합니다. logging 옵션의 경우에는 주지 않을경우 ecs-cli compose up이 실패했을 경우 오류메세지를 cloudwatch에 기록하지 않습니다.

도커 이미지가 바뀌는 경우 ECR에서 이미지를 바뀌게 될경우 ecs-cli compose down, ecs-cli compose up 명령어를 통해 다른 이미지로 재구동할 수 있으며 도커 이미지 빌드의 경우 AWS code build와 Lambda를 이용하면 더 쉽게 자동화 할 수 있습니다.