본문 바로가기

개발/AWS

AWS ECS에 이용해 컨테이너 배포하기

728x90


Docker를 쓰는 이유

어플리케이션을 Container형태로 만들고 Container형태로 올릴 수 있습니다.

 

Docker를 안쓰면 서비스 운영을 못하나요?

서비스 운영은 도커 없이도 가능 합니다. 도커가 없이도 우리는 개발을 잘 하고 잘 살았습니다. 그런데 도커가 나오면서 도커를 또 배워야 하고 아키텍처도 바꿔야 하고 Dockerfile도 만들어주어야 하고 Container를 프로세스 관리 하듯이 관리 해주어야 하기 때문에 손이 더 많이 가는데 왜 굳이 도커를 써야 하는것일까요?

 

Container는 일종에 리눅스 OS입니다. 어플리케이션을 실행 하려면 OS가 있어야 합니다. Docker가 나오기 전에는 서버에 리눅스를 설치하고 Python3를 설치하고 어플리케이션을 올리고 이런 과정으로 어플리케이션을 올렸습니다.

 

이렇게 쓰는 경우 각 어플리케이션이 사용하는 라이브러리나 글로벌 Environment변수 등이 겹치는 등의 문제가 발생할 가능성이 있습니다.

 

또한 1번 어플리케이션이 CPU를 많이 쓰면 2번 어플리케이션에 영향을 주기도 합니다.

 

하지만 도커가 나오고 나서는 어플리케이션을 띄울 때 필요한 Dependency를 따로 컨테이너 형태로 관리하기 때문에 어플리케이션들간에 라이브러리나 설정 문제로 충돌할 일이 적어졌습니다.

 

득보다 실이 많을 것 같으면 도커를 도입을 굳이 하지 않아도 됩니다.

 

 

https://github.com/GoogleContainerTools/jib/tree/master/jib-maven-plugin#quickstart

1.docker에 가입을 해야함
2.docker를 설치 하고 실행

 
 
docker는 app이 들어있는 image를 배포하는 방식이기 때문에 image가 올라가는 repository가 필요하다.
 

 

 
3. aws ecs에 docker repository만들기

aws에서 ecr로 검색하면 나온다.

 

4. spring boot로 docker image만들기

http://tech.cloudz-labs.io/posts/docker/docker-start/

 

aws ecs ref

https://docs.aws.amazon.com/cli/latest/reference/ecs/index.html#cli-aws-ecs

 

서비스(Service)와 태스크(Task)

컨테이너를 서비스로 띄울 것인지 태스크로 띄울 것인지 정해야 합니다.

 

서비스(Service)

서비스는 웹서버 처럼 계속 띄워놓고 사용하기 위해 이용합니다. 죽으면 안되는 그런 어플리케이션 용입니다.

클러스터에 서비스가 작업을 배포하는 방식입니다.

 

정의한 task(작업) 목록 보기

aws ecs list-task-definitions
 
작업(Task)는 Container에 작업 권한, CPU, 메모리를 얼마나 할당할지를 지정해주는 오브젝트 입니다.
 
AWS ECS는 각 컨테이너를 task단위로 관리 합니다.
 
task 정의한 것 보기
aws ecs describe-task-definition --task-definition <image_name>:1

 

작업 예약 하기

https://docs.aws.amazon.com/ko_kr/AmazonECS/latest/developerguide/scheduled_tasks.html

 

클러스터 -> '예약된 작업'탭으로 가면 크론처럼 이정 시간마다 실행되는 Task를 만들 수 있습니다.

 

728x90
블로그 주인장입니다. 원하시는 정보는 얻으셨나요? 이 포스트에서 추가로 필요한 정보가 있으시면 여기에 남겨주세요.