[AWS] Amazon ECS(EC2 유형)의 좀 더 긴 자습서(제1회)
컨테이너 서비스의 종류로서는, 컨트롤 플레인(=컨테이너 관리를 하는 장소)에서 ECS와 EKS, 데이터 플레인(=실제로 컨테이너가 가동하는 장소)에서 EC2와 Fargate의 선택이 가능합니다.
그림은 참고 자료 더 : EKS와 Fargate의 조합은 오랫동안 "comming soon"으로 남아 있기 때문에 현재 선택 가능한 조합은 3 가지입니다. 본 기사는 가장 왼쪽의 ECS(EC2 타입)의 구축 순서에 대해 설명한 것입니다.
설명 포인트
ECS의 구성도로서는, 이런 느낌의 그림이 잘 나올까 생각합니다. ECS 용어로 클러스터(Cluster), 서비스(Service), 태스크(Task) 등을 기억해야 합니다.
한편, EC2 타입의 경우, 실제로 생성되는 AWS 환경(운영상 보아야 할 것)은 이런 구성입니다.
2개의 관계를 이해하는 데 시간이 걸렸기 때문에, 설명해 보려고 생각한 것이 본 기사의 취지가 됩니다.
절차는 조금 길어지므로 여러 번 나누어 씁니다.
1) ECR 생성 및 컨테이너 이미지 푸시
먼저 테스트용 Docker 이미지를 만들어 ECR 리포지토리로 푸시합니다.
그림에서는 빨간색 프레임의 부분으로, 여기는 그다지 차이가 없는 부분입니다.
이미지 만들기
nginx 이미지를 사용해 보겠습니다. 간단하지만 테스트 용 HTML을 추가하고 있습니다.
DockerfileFROM nginx
COPY demo.html /usr/share/nginx/html/demo.html
# ls -l
total 8
-rw-r--r-- 1 root root 379 Jun 13 14:08 demo.html
-rw-r--r-- 1 root root 59 Jun 13 14:04 Dockerfile
# cat Dockerfile
FROM nginx
COPY demo.html /usr/share/nginx/html/demo.html
# cat demo.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>ECS demo page</title>
</head>
<body>
<div class="main_page">
ECS Demo Page
</div>
</body>
</html>
## ※Dockerコンテナをビルドする※
# docker build -t nginx-demo01 .
Sending build context to Docker daemon 3.072kB
Step 1/2 : FROM nginx
---> 958a7ae9e569
Step 2/2 : COPY demo.html /usr/share/nginx/html/demo.html
---> de6344632e81
Removing intermediate container 8f3ace3b0132
Successfully built de6344632e81
Successfully tagged nginx-demo01:latest
## ※動作確認のため実行してみる※
# docker run -itd --privileged -p8888:80 nginx-demo01
50b1153248f2f343eca96465c5e74e3e7f02f68370a6ce181e98714174a8a725
## ※起動したことを確認する※
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
50b1153248f2 nginx-demo01 "nginx -g 'daemon ..." 11 minutes ago Up 11 minutes 0.0.0.0:8888->80/tcp awesome_colden
## ※追加したdemo.htmlが参照できることを確認する※
# curl http://localhost:8888/demo.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>ECS demo page</title>
</head>
<body>
<div class="main_page">
ECS Demo Page
</div>
</body>
</html>
## ※動作確認したコンテナを停止しておく※
# docker stop 50b1153248f2
50b1153248f2
ECR 리포지토리 생성
AWS 콘솔 서비스 → ECR → 리포지토리 생성에서 생성합니다. 입력할 정보는 이름뿐입니다.
이미지 푸시
작성한 리포지토리를 보면 오른쪽 상단에 푸시 명령 표시 버튼이 있습니다.
버튼을 누르면 나중에 실행할 명령이 리포지토리 이름으로 표시되므로 매우 유용합니다. 이것을 참고로 나머지 작업을 합니다.
빌드는 이미 실시했으므로 나머지 작업을 합니다.
ECR에 로그인: profile 옵션을 다른 명령과 마찬가지로 지정할 수 있습니다.
# $(aws ecr get-login --no-include-email --region ap-northeast-1 --profile vatest)
Login Succeeded
태그 지정: 이전에 빌드한 이미지에 ECR 형식으로 태그를 부여합니다. ECR 형식은 계정 ID와 리전이 들어있어 결과가 가로가 되어 버리는 것이 난점입니다.
# docker tag nginx-demo01:latest <AWSアカウントID>.dkr.ecr.ap-northeast-1.amazonaws.com/nginx-demo01:latest
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
<AWSアカウントID>.dkr.ecr.ap-northeast-1.amazonaws.com/nginx-demo01 latest de6344632e81 26 minutes ago 109MB
nginx-demo01 latest de6344632e81 26 minutes ago 109MB
ECR로 푸시: 이전에 부여한 태그대로 지정하고 ECR로 푸시합니다.
# docker push <AWSアカウントID>.dkr.ecr.ap-northeast-1.amazonaws.com/nginx-demo01:latest
The push refers to a repository [<AWSアカウントID>.dkr.ecr.ap-northeast-1.amazonaws.com/nginx-demo01]
e0ea43f667cc: Pushed
a552ca691e49: Pushed
7487bf0353a7: Pushed
8781ec54ba04: Pushed
latest: digest: sha256:01f1c2fe5352e1d2db25db934211a4da224999ea80a0c5e400d4125ff4ef2845 size: 1155
마지막으로 콘솔에서 이미지가 추가되었는지 확인합니다.
이상으로 ECR에 이미지를 푸시 할 수있었습니다. 다음에 이 이미지를 작동시키기 위한 ECS 클러스터를 만들려고 합니다.
참고 자료
먼저 테스트용 Docker 이미지를 만들어 ECR 리포지토리로 푸시합니다.
그림에서는 빨간색 프레임의 부분으로, 여기는 그다지 차이가 없는 부분입니다.
이미지 만들기
nginx 이미지를 사용해 보겠습니다. 간단하지만 테스트 용 HTML을 추가하고 있습니다.
Dockerfile
FROM nginx
COPY demo.html /usr/share/nginx/html/demo.html
# ls -l
total 8
-rw-r--r-- 1 root root 379 Jun 13 14:08 demo.html
-rw-r--r-- 1 root root 59 Jun 13 14:04 Dockerfile
# cat Dockerfile
FROM nginx
COPY demo.html /usr/share/nginx/html/demo.html
# cat demo.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>ECS demo page</title>
</head>
<body>
<div class="main_page">
ECS Demo Page
</div>
</body>
</html>
## ※Dockerコンテナをビルドする※
# docker build -t nginx-demo01 .
Sending build context to Docker daemon 3.072kB
Step 1/2 : FROM nginx
---> 958a7ae9e569
Step 2/2 : COPY demo.html /usr/share/nginx/html/demo.html
---> de6344632e81
Removing intermediate container 8f3ace3b0132
Successfully built de6344632e81
Successfully tagged nginx-demo01:latest
## ※動作確認のため実行してみる※
# docker run -itd --privileged -p8888:80 nginx-demo01
50b1153248f2f343eca96465c5e74e3e7f02f68370a6ce181e98714174a8a725
## ※起動したことを確認する※
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
50b1153248f2 nginx-demo01 "nginx -g 'daemon ..." 11 minutes ago Up 11 minutes 0.0.0.0:8888->80/tcp awesome_colden
## ※追加したdemo.htmlが参照できることを確認する※
# curl http://localhost:8888/demo.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>ECS demo page</title>
</head>
<body>
<div class="main_page">
ECS Demo Page
</div>
</body>
</html>
## ※動作確認したコンテナを停止しておく※
# docker stop 50b1153248f2
50b1153248f2
ECR 리포지토리 생성
AWS 콘솔 서비스 → ECR → 리포지토리 생성에서 생성합니다. 입력할 정보는 이름뿐입니다.
이미지 푸시
작성한 리포지토리를 보면 오른쪽 상단에 푸시 명령 표시 버튼이 있습니다.
버튼을 누르면 나중에 실행할 명령이 리포지토리 이름으로 표시되므로 매우 유용합니다. 이것을 참고로 나머지 작업을 합니다.
빌드는 이미 실시했으므로 나머지 작업을 합니다.
ECR에 로그인: profile 옵션을 다른 명령과 마찬가지로 지정할 수 있습니다.
# $(aws ecr get-login --no-include-email --region ap-northeast-1 --profile vatest)
Login Succeeded
태그 지정: 이전에 빌드한 이미지에 ECR 형식으로 태그를 부여합니다. ECR 형식은 계정 ID와 리전이 들어있어 결과가 가로가 되어 버리는 것이 난점입니다.
# docker tag nginx-demo01:latest <AWSアカウントID>.dkr.ecr.ap-northeast-1.amazonaws.com/nginx-demo01:latest
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
<AWSアカウントID>.dkr.ecr.ap-northeast-1.amazonaws.com/nginx-demo01 latest de6344632e81 26 minutes ago 109MB
nginx-demo01 latest de6344632e81 26 minutes ago 109MB
ECR로 푸시: 이전에 부여한 태그대로 지정하고 ECR로 푸시합니다.
# docker push <AWSアカウントID>.dkr.ecr.ap-northeast-1.amazonaws.com/nginx-demo01:latest
The push refers to a repository [<AWSアカウントID>.dkr.ecr.ap-northeast-1.amazonaws.com/nginx-demo01]
e0ea43f667cc: Pushed
a552ca691e49: Pushed
7487bf0353a7: Pushed
8781ec54ba04: Pushed
latest: digest: sha256:01f1c2fe5352e1d2db25db934211a4da224999ea80a0c5e400d4125ff4ef2845 size: 1155
마지막으로 콘솔에서 이미지가 추가되었는지 확인합니다.
이상으로 ECR에 이미지를 푸시 할 수있었습니다. 다음에 이 이미지를 작동시키기 위한 ECS 클러스터를 만들려고 합니다.
참고 자료
Reference
이 문제에 관하여([AWS] Amazon ECS(EC2 유형)의 좀 더 긴 자습서(제1회)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/VA_nakatsu/items/c8a4b24b8cffd0e9047b텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)