2024년 새롭게 구축해 보는 Amazon ECS on AWS Fargate 구축 (ECR에 이미지 푸시)
안녕하세요 클래스메소드 김재욱(Kim Jaewook) 입니다. 2021년에 ECS를 구축해 보는 과정의 블로그를 두 편 작성했었습니다.
3년이라는 시간이 흘렀기 때문에 명령어가 조금 달라진 부분도 있으며, ECS 콘솔 화면의 UI가 변경되었기 때문에 이에 맞추어 새롭게 콘솔 화면에서 구축해 보는 과정을 블로그로 담아볼려고 합니다.
이번에는 Amazon ECS on EC2가 아니라 Amazon ECS on AWS Fargate를 구축해 보고자 합니다.
내용이 길어질 것이라고 생각되기 때문에 다음 두 편으로 블로그를 나누어 작성하도록 하겠습니다.
- Docker Image 생성 → ECR에 푸시
- ECR에 푸시한 이미지를 바탕으로 Amazon ECS on AWS Fargate 구축
AWS Fargate 구축 편은 아래 블로그를 참고해 주세요.
Docker 환경 구축 및 Docker Image 생성
Docker Image를 생성하고 ECR에 푸시하기 위해서는 Docker를 설치할 필요가 있습니다.
로컬 환경에 Docker가 설치되어 있다면, 설치된 Docker를 이용해도 상관없지만, 이번 블로그에서는 AWS에서 Linux 계열 EC2 인스턴스를 별도로 생성하여 이 EC2 인스턴스에서 Docker를 설치하고 ECR로 Docker Image를 푸시해 나갈 예정입니다.
EC2 인스턴스의 스펙은 t2.micro를 사용하는 등 최저 스펙으로 구성했으며, 중요한 것은 사용자가 접근하여 Docker를 설치할 수 있어야 하기 때문에 인터넷 게이트웨이 혹은 낫 게이트웨이를 경유할 수 있도록 설정하고 있습니다.
sudo -i yum install -y docker systemctl start docker docker images
먼저 yum으로 Docker를 설치합니다. 여기서 service start docker 명령어를 사용하면 에러가 발생할 수 있기 떄문에 systemctl로 Docker를 시작합니다.
이어서 docker image 명령어를 입력하여 다음과 같이 리포지토리 리스트가 출력된다면 성공적으로 Docker가 설치된 것입니다.
Dockerfile 작성
이제 Docker를 설치했으므로 Amazon ECS on AWS Fargate에서 사용할 이미지를 만들어 나갑니다.
먼저 이미지는 Dockerfile을 작성하여 생성할 수 있으며, 이 Dockerfile에는 이미지에 대한 정보를 담고 있으며 예를 들어 Apache를 설치하는 명령어, PHP를 설치하는 명령어 등을 담고 있습니다.
이번에는 nginx만을 설치하도록 하겠습니다.
sudo -i mkdir dockerfile-folder cd dockerfile-folder/ vi index.html <!doctype html> <h1>hello ecs!</h1>
먼저 dockerfile을 생성하기 위한 별도의 폴더를 만들고, 해당 폴더에 index.html 파일을 생성합니다. Amazon ECS on AWS Fargate에 접속하게 되면 이 index.html에 적어둔 hello ecs!가 출력될 것입니다.
vi dockerfile FROM nginx:latest MAINTAINER “kim.jaewook” COPY ./index.html /usr/share/nginx/html/index.html EXPOSE 80 CMD [“nginx”, “-g”, “daemon off;“]
이어서 vi 명령어로 Dockerfile을 작성하고, nginx를 설치하는 명령어를 추가합니다. 여기서 COPY 명령어로 조금 전 생성한 index.html을 /usr/share/nginx/html 경로로 복사하여 접속 시 hello ecs!가 출력되도록 합니다.
Docker Image 생성
Dockerfile 작성이 끝났다면, ECR로 푸시하기 이전에 Dockerfile이 문제없이 작동하는 지 확인할 필요가 있습니다.
※ 검증 단게이므로 이 과정은 패스해도 상관없습니다.
docker build -t ecs-nginx . docker images
Dockerfile을 빌드합니다.
Dockerfile을 빌드하고, 리포지토리를 확인해 보면, 이미지가 생성된 것을 확인할 수 있습니다.
여기서 제대로 작동하는지 테스트를 진행해 보도록 하겠습니다.
docker create -i -t --name ecs-nginx-container -p 80:80 db68383e6d13 docker ps -a docker start 7e67ceba1fe
docker create 명령어로 컨테이너를 생성합니다. 컨테이너를 생성하고 docker ps -a 명령어를 통해 컨테이너의 ID를 확인할 수 있으며, 이 ID를 바탕으로 컨테이너를 실행합니다.
이어서 EC2 인스턴스로 접속해 보면, hello ecs!가 출력되는 것을 확인할 수 있습니다.
즉, 작성한 Dockerfile에는 문제 없다는 것입니다.
ECR 생성
이제 ECR을 생성하기 위해 ECR 콘솔 화면에서「리포지토리 생성」을 클릭합니다.
리포지토리 생성에서 중요한 부분은 리포지토리 이름이며, 적절하게 리포지토리 이름을 입력합니다.
생성한 리포지토리를 선택한 다음「푸시 명령 보기」를 클릭합니다.
OS 별로 푸시 명령어를 안내하고 있으며, 빌드는 조금 전 실행했기 때문에 1,3,4 명령어를 순서대로 실행합니다.
상기 검증 과정에서 docker build 명령어를 수행했기 때문에 빌드 명령어를 재차 입력할 필요가 없지만, 검증 과정을 패스하여 docker build 명령어를 실행하지 않았다면 1,2,3,4 순서대로 명령어를 실행합니다.
해당 명령어를 실행하기 위해서는 로컬 환경 혹은 생성한 EC2 인스턴스에서 AWS CLI를 사용할 수 있어야합니다.
AWS CLI 환경을 설정하는 방법에 대해서는 아래 블로그를 참고해 주세요.
순서대로 명령어를 실행했다면, 리포지토리에 이미지가 생성된 것을 확인할 수 있습니다.
본 블로그 게시글을 읽고 궁금한 사항이 있으신 분들은 [email protected]로 보내주시면 감사하겠습니다.