금일은 Devops 의 docker 가상화 파트에서 docker 컨테이너를 활용한 ci/cd 환경 구성에 대해 알아보겠습니다.
DevOps vs CI/CD
DevOps : 개발과 운영에 환경을 지속적으로 연결시켜주어 더 나은 환경을 제공해 주는 것
CI/CD : 완성되어저 있는 결과물을 위해 지속적인 통합과 배포를 의미 하는 것
Devops 환경에서의 Docker 의 활용

해당 그림에서 DOCKER 가 차지하는 위치는 배포와 운영단계에 위치합니다.
CI/CD 자동화 배포

해당 그림은 AMAZON 에서 제공하는 그림입니다.
CI/CD 의 흐름은 CI 를 통해 배포상태를 완성하고 다양한 서버에 전달하는 CONTINUOUS DELIVERY, 실행할 수 있는 상태로 만드는 CONTINUOUS DEPLOYMENT 가 있다.
STAGING 상태는 TEST 직전상태로 의미하며 UAT 단계 (USER TEST) 라고도 합니다.
PRODUCTION 상태는 말 그대로 운영 상태를 의미합니다.
BUILD 상태는 SOURCE CODE 를 가지고 TEST를 진행하여 실행 가능한 형태로 패키징 단계를 의미합니다.
SOURCE CONTROL 상태는 형상 관리 도구를 이용하여 COMMIT 이 완료된 상태를 의미합니다.
해당 CI/CD 파이프라인에서 도커가 차지하는 부분은 BUILD, DEPLOYMENT, OPERATE 에 위치합니다.
CI/CD 환경과 DOCKER

ANSIBLE과 TERRAFORM 같은경우는 어떠한 형태로 INFRA 로 구성되어있는 부분을 CODE 로 관리하며 서비스의 업그레이드 및 설치를 도와주는 시스템입니다.
해당 부분을 거치지 않고 DOCKER RUNTIME 에 배포하는것도 물론 가능합니다.
CI/CD PIPELINE

Orchestration, SourceCode, CI/CD 작업 도구, Registry(harbor) 가 연결되어 있는 모습을 볼 수 있습니다.
ArgoCD 는 k8s 에 배포하기 위해 서비스로 deploy 작업을 진행합니다. angocd sync command 를 활용하여 프로젝트의 자료를 가져올 수 있습니다.
cloud service 로는 다음 3가지 존재합니다.
Docker 의 형태는 PaaS 형태 입니다.
상용 클라우드를 제공해주는 다양한 벤더로는 aws, azure, google cloud platform, naver cloud platform 등이 있다.
AWS 환경에서의 관리형 컨테이너 서비스

ecr 로 부터 이미지를 전달하게 되면 deploy 를 통해 docker 가상화 기술을 제공하는 ecs 를 활용하여 container cluster를 구성한 후에 container 동작을 의미하는 task 를 등록후ecr 로 부터 해당 이미지를 받아오는 new ecs task 를 실행하게 됩니다.
ecs 는 orchestration tools 로써 컨테이너의 생성과 종료, 자동 배치 및 복제, 로드 밸렁싱, 클러스터링, 장애복구, 스케줄링 다양한 기능을 제공합니다.

그림에서 보이듯이 lb, sm, efs 등 다양한 configuration 설정 파일을 제공하며 여러 형태의 서비스를 제공합니다. 대표적으로 ec2, fargate, outposts 등이 있습니다.
IAM 생성
ecr 생성
Docker Image 빌드
3.1. docker client 인증(host 에 aws cli command 설치)
$ aws ecr get-login-password –region<REGION> | \
docker login --username <USER> --password-stdin <AWS_ACCOUNT_ID>.dkr.ecr.ap-northeast-2.amazonaws.com
해당 명령어는 host pc 에서 aws ecr 에 로그인 하며 로그인의 결과를 docker 에도 사용 가능하게 한다는 의미로
간단하게 말해서 host pc 에서 private repository 를 사용가능하게 인증 권한을 가져오겠다는 의미입니다.
3.2 docker 이미지 빌드
docker build -t <Image_name> .
Docker Iamge Push
4.1 tag 명 설정
docker tag <image_name>:<tag> <new_image_name>:<new_tag>
4.2 docker Image push
docker push <image_name> . <tag>
docker image pull
aws cli 설치
보안 자격 증명
aws cli 접속

ecr repository 생성


실습 순서
실습으로는 aws fargate(serverless) 클러스터를 생성하며 network 는 awsvpc 를 선택하며 추가로 ec2 는 사용한 리소스 만큼 요금을 내며 자체 관리형을 구축하고자 할때 선택하면 된다.
ecs 작업 정의로는 ecsTaskExecutationRole 역할 생성 후 bridge, awsvpc 를 선택 한 후 작업에 할당 될 메모리와 cpu 총량을 선택한 뒤 컨테이너를 포트 매핑을 통해 추가시켜준다.
그 다음에는 ecs 작성 생성으로 용량 공급자는 fargate, 애플리케이션 유형은 task, 패밀리는 전 단계에서 생성한 작업을 선택합니다.
마지막으로는 ecs 서비스 생성으로 용량공급자는 fargate, 애플리케이션 유형은 service, 패밀리는 전 단계에서 생성한 작업을 선택합니다.
그럼 지금부터 위의 순서에 맞게 이미지를 통해 실습 내용을 알아보겠습니다.
cluster 생성

task 생성
- 이미지 url 같은 경우는 ecr repository 의 url 을 가져오면 됩니다.


service 생성

배포 구성에 있어서 패밀리는 전에 생성한 task 를 선택합니다.
lb 를 테스트 하기위해 우너하는 테스크는 그림과 다르게 2를 선택합니다.
네트워킹의 옵션으로는 가용 가능한 vpc 와 3개정도의 subnet 을 선택합니다.

2개의 컨테이너를 생성하기 때문에 즉 tomcat 서버가 2개가 기동되기 때문에 각각의 주소가 동적으로 변경되기 때문에 사용자는 해당 서버를 알수 없기 때문에 lb 가 필요하게 된다.
대상그룹의 경우 default 값인 현재 task service 들을 선택합니다.
설정은 여기까지 후 서비스를 생성해준다.

