이전 포스팅에서는 단일 도커파일(Dockerfile)을 ECS에 배포하는 방법에 대해 다뤘었다.
하지만 실제 프로덕션 단계에서는 docker-compose를 통해 여러개의 도커를 하나로 엮어서 사용하는 경우가 많다.
ECS는 EC2서비스 위에 도커가 돌아가는 형태인데, docker-compose를 통해 배포해준다면
하나의 EC2위에 여러개의 도커 컨테이너가 돌아간다고 생각하면 된다.
먼저 aws와 ecs-cli를 설치해줘야 한다.
나는 OSX를 사용하므로 모든 명령어를 맥북 기준으로 설명한다.
아래의 명령어를 통해 aws cli를 설치해준다.
pip3 install awscli
다음으로 아래의 명령어로 ecs-cli를 설치한다.
sudo curl -o /usr/local/bin/ecs-cli https://s3.amazonaws.com/amazon-ecs-cli/ecs-cli-darwin-amd64-latest
이제 다운받은 파일에 실행권한을 준다.
sudo chmod +x /usr/local/bin/ecs-cli
설치가 완료됐으면 버전을 확인해본다.
ecs-cli --version
위처럼 잘 나오면 정상적으로 설치가 완료된 것이다.
이제 몇가지 환경설정을 거친 후 클러스터 구성부터 설정해준다.
ecs-cli configure --cluster 클러스터이름 --region ap-northeast-2 --default-launch-type EC2 --config-name 설정파일이름
여기서 굵게 표시한 부분은 원하는 이름으로 하면 된다.
그리고 일반적으로 설정파일 이름은 클러스터 이름과 동일하게 가면 된다.
나는 EC2위에 도커를 돌릴 예정이므로 --default-launch-type에 EC2옵션을 줬지만 Fargate를 사용하고 싶다면 FARGATE로 주면 된다.
다음으로 클러스터를 생성한다.
aws ecs create-cluster --cluster-name 클러스터이름
이제 ecs설정을 해준다.
ecs-cli configure profile --access-key 액세스키 --secret-key 비밀키 --profile-name ECS이름
굵게 표시한 부분을 알맞게 수정하고 위 명령어를 실행한다.
다음으로 클러스터를 생성한다.
ecs-cli up --keypair 키페어이름 --capability-iam --size 2 --instance-type t2.micro --cluster-config 클러스터설정이름
위 내용도 굵게 표시한 부분만 자신에게 맞춰서 수정해준다.
인스턴스 타입은 테스트이므로 가장 작은 t2.micro로 설정해줬으며, 클러스터 설정이름은 클러스터 이름과 동일하게 설정해줬다.
(참고로 여기서 FATA[0000] Error executing 'up': A CloudFormation stack already exists for the cluster 에러가 발생한다면 맨 끝에 --force 옵션을 주면 된다.)
이제 docker-compose.yml파일을 만들어줘야 한다.
본 포스팅에서는 MySQL(5.7)과 Wordpress를 엮어서 올려본다.
그러기 위해서 먼저 아래의 명령어로 이미지를 땡겨온다.
docker pull wordpress
docker pull mysql:5.7
이제 docker-compose.yml파일을 생성하고 아래의 내용으로 채워넣는다.
이전에는 version 2까지만 지원했었는데 이제 3까지 지원해준다고 한다.
참고로 기존에 로컬에서 돌릴 때 build옵션을 통해 각 컨테이너별로 명령어를 실행시켰었는데
ECS에서는 build옵션을 지원하지 않는다고 한다.
따라서 기존처럼 docker-compose에서는 각 컨테이너를 엮어주고 해당 컨테이너들에서
실행시킬 세부 명령어를 따로 Dockerfile에 정의해놓은 경우, docker-compose build로 빌드하고
해당 이미지들을 ECR에 올린 이후 위 docker-compose의 image부분에 해당 ECR이미지의 주소를 적어주면 된다.
이번 포스팅의 경우 따로 실행시킬 명령어가 없으므로 그냥 진행하기로 한다.
추가적으로 docker-compose 3버전을 사용하는 경우 ecs-params.yml라는 파일도 생성해줘야 한다.
ecs-params.yml파일을 생성하고 아래의 내용으로 채워넣는다.
이제 ecs-cli compose up 명령어를 통해 클러스터에 배포할 수 있다.
기본적으로 파일명에 대한 명시가 없으면 현재 폴더에 있는 docker-compose.yml파일과 ecs-params.yml파일을 참조하여 생성하지만
--file옵션을 준다면 다른 파일을 통해 설정해줄수도 있다.
아래의 명령어로 배포한다.
ecs-cli compose up --create-log-groups --cluster-config 클러스터이름
클러스터이름만 설정해주고 실행한다.
위 명령어를 실행하면 아마 아래처럼 나올것이다.
맨 마지막 2개의 라인을 보면 컨테이너를 실행시켰다고 나온다.
이제 AWS콘솔의 ECS부분을 들어가보면,
우리가 설정한 2개의 컨테이너가 하나의 EC2 클러스터에서 돌고있는 모습을 확인할 수 있다.
들어가서 세부내용을 살펴본다.
작업 탭으로 이동하면 현재 돌고있는 작업을 확인할 수 있다.
작업 부분을 눌러서 세부 내용을 확인해본다.
우리가 설정한대로 mysql, wordpress 두개의 컨테이너가 실행중인 모습을 확인할 수 있다.
wordpress 옆에 있는 > 를 눌러 세부 내용을 살펴본다.
이런식으로 외부 링크 부분에 접속할 수 있는 IP가 나온다.
해당 아이피로 접속을 해보면,
정상적으로 접속이 된다.
명령어들만 적어본다면 다음과 같다. (aws, ecs-cli 설정이 완료됐다고 가정)
aws ecs create-cluster --cluster-name 클러스터이름
ecs-cli configure --cluster 클러스터이름 --region ap-northeast-2 --default-launch-type EC2 --config-name 설정이름
ecs-cli configure profile --access-key 액세스키 --secret-key 시크릿키 --profile-name 클러스터이름
ecs-cli up --keypair 키페어이름 --capability-iam --size 2 --instance-type t2.micro --cluster-config 클러스터이름 --force
ecs-cli compose up --create-log-groups --cluster-config 클러스터이름
'Coding > DevOps' 카테고리의 다른 글
ECS Multiple Instance구동 및 ALB적용 방법 (0) | 2019.01.15 |
---|---|
Docker Hot reload 적용하는 방법 (0) | 2019.01.08 |
AWS ECS에 단일 도커 컨테이너 배포하는 방법 (0) | 2018.12.27 |
Docker-compose로 Nginx/Flask/MongoDB 배포하는 방법 (0) | 2018.11.13 |
Docker-compose로 nginx/python-flask/redis/mongodb 연동하는 방법 (0) | 2018.11.09 |