영화 '더 테이블'


이 영화를 통해서 우리는 카페에서 다른 두 사람의 이야기를 엿듣게 됩니다.
네 커플의 이야기를 들으면서 사람사는 이야기를 귀로 듣기만 하는게 아니라 테이블의 분위기를 느끼고
한 사람, 한 사람의 표정과 목소리, 감정을 느낄 수 있습니다.
우리 주변에서 일어날 수 있는 수 많은 에피소드 중에서 한 카페의 한 테이블에서 일어나는 이야기의 전개를
보고 들으면서 세상사는게 나와 별반 다르지 않다든가 다르다든가 느껴보시기 바랍니다.

제 평점은 3.0 / 5.0 이며 다시볼 수도 있는 영화입니다.

다른 평가 점수표

   
IMBb 6.9 / 10.0
Letterboxd 3.1 / 5.0
Watcha Pedia 3.4 / 5.0
KinoLights 89.47%
다음영화 관람객 8.32 / 10.0
CGV Egg 지수 90%




 

 

 

반응형
Posted by SB패밀리

댓글을 달아 주세요

AWS 인프라 구축 실습 15회 - EKS


이번 시간에는 EKS(Elastic Kubernetes Service)를 실습해 보도록하겠습니다.
여기에서 사용하는 EC2는 ECS(Elastic Container Service) 회차에서 이용한 것으로, 이전 시간에 작성한 실습 결과를 사용하겠습니다.

AWS EKS와 같은 컨테이너 오케스트레이션 서비스는 일명 "무중단 서비스", "무중단 배포"를 위한 최고의 서비스입니다.
AWS EKS와 같은 서비스는 Docker Swarm, AWS ECS, Kubernetes k8s가 있습니다. 운영하는 규모에 따라 선택해서 적용을 하면 됩니다. Docker Swarm의 경우는 소규모 클라우드 인프라환경에서 사용하는게 일반적입니다.
EKS와 같은 서비스는 컨테이너 오케스트레이션(Container Orchestration)이라고 하는 서비스입니다. 컨테이너의 배포, 관리, 확장, 네트워킹을 자동화하는 서비스입니다.
Amazon EKS는 자체 Kubernetes 제어 플레인을 설치 및 운영할 필요 없이 AWS에서 Kubernetes를 쉽게 사용할 수 있도록 해주는 관리형 서비스입니다.
Amazon EKS는 Kubernetes API 엔드포인트를 표시합니다. 기존 Kubernetes 도구는 EKS 관리형 제어 플레인에 직접 연결할 수 있습니다. 작업자 노드는 사용자 계정에서 EC2 인스턴스로 실행됩니다.


사전작업
1. ECR : sbrich
2. Route53 : sbrich.shop / docker.sbrich.shop / eks.sbrich.shop
3. (자동생성) 대상그룹 : 'TG-ALB', instance type, HTTP, 80port
4. 보안그룹 : sg-Docker

실습과정
1. 역할 만들기
  - 클러스터, 노드그룹 
2. 클러스터 생성
3. 노드그룹 생성
4. kubectl 설치
5. 애플리케이션 배포
6. 로드밸런서 적용
7. Route53 설정
8. EKS 클러스터 확인


1. 역할 생성

클러스터, 노드그룹에 대한 역할을 생성합니다.

'클러스터 역할'을 생성합니다.
IAM 메뉴 > 역할 메뉴 페이지에서 역할 만들기를 클릭합니다.

1단계 일반사용 사례
  'AWS 서비스'와 일반사용 사례 'EC2'를 선택, 'EKS'를 선택, 'EKS - Cluster'를 선택하고 '다음'을 클릭합니다.



2단계 권한 정책 연결
 다음을 클릭합니다.


3단계 태그 추가(선택 사항)
 다음을 클릭합니다.


4단계 검토
역할 이름 'eksClusterRole'를 입력하고 '역할 만들기' 버튼을 클릭합니다.

역할이 생성되었습니다.


'노드그룹 역할'을 생성합니다.
IAM 메뉴 > 역할 메뉴 페이지에서 역할 만들기를 클릭합니다.

1단계 일반사용 사례
  'AWS 서비스'와 일반사용 사례 'EC2'를 선택, 'EC2'를 선택, 'EC2'를 선택하고 '다음'을 클릭합니다.



2단계 권한 정책 연결
정책필터에 다음 3가지를 차례대로 입력하고 체크를 합니다. 아래는 "AmazonEKSWorkerNodePolicy"를 체크하는 예입니다.
"AmazonEKSWorkerNodePolicy"
"AmazonEC2ContainerRegistryReadOnly"
"AmazonEKS_CNI_Policy"
3가지 정책을 체크하였다면 다음을 클릭합니다.


3단계 태그 추가(선택 사항)
 다음을 클릭합니다.


4단계 검토
역할 이름 'NoteInstanceRole'를 입력하고 '역할 만들기' 버튼을 클릭합니다.

역할이 생성되었습니다.




2. 클러스터 생성

EKS > 클러스터 > Amazon EKS 메뉴 페이지로 이동합니다. 
클러스터 생성을 클릭합니다.

1단계 클러스터 구성
이름 'my-eks-cluster'를 입력하고 클러스터 서비스 역할은 (미리 선택되어 있습니다) 'eksClusterRole'을 선택하고 다음을 클릭합니다.

2단계 네트워킹 지정
VPC 'default', 서브넷은 4개 모두 선택합니다.
보안그룹은 새로 등록하기 위하여 'VPC콘솔'을 클릭하여 보안그룹 'SG-EKS', VPC는 'default', 인바운드 규칙은 'HTTP(anywhere)'로 설정한 후, 보안그룹 항목에서 갱신하여 'SG-EKS'를 선택하고 나머지는 수정없이 다음을 클릭합니다.

3단계 로깅 구성
다음을 클릭합니다.

4단계 검토 및 생성
생성을 클릭합니다.

메시지가 클러스터 생성 진행중에서 활성 상태가 변경되어야 생성이 완료됩니다. 클러스터가 생성되었습니다.

 


3. 노드그룹 생성

생성된 클러스터의 세부정보에서 컴퓨팅 탭으로 이동합니다.

노드그룹 설정을 위하여 추가를 클릭합니다.
1단계 노드그룹 구성
이름 'node-group', 역할 'NodeInstanceRole'을 선택하고 나머지는 기본값으로 하여 다음을 클릭합니다.

2단계 컴퓨팅 및 조정 구성 설정
EKS 노드 최소 유형인 't3.medium'으로 디스크 크기는 '20GiB', 노드그룹 조정은 최소 2, 최대 4, 기본 3으로 아래와 같이 설정한 후 다음을 클릭합니다.


3단계 네트워킹 지정

서브넷은 구성 4가지 모두를 선택합니다.
노드에 대한 SSH 액세스 구성을 활성화하기 위하여 설정을 변경하면 다음과 같은 경고 메세지가 나타납니다. 잘 숙지하시기 바랍니다.

여기서는 키페어를 미리 지정한 것을 사용합니다. 보안그룹은 실습 과정에서는 인바운드 규칙에 모두 통신 되는 것을 사용합니다. 다음을 클릭합니다.


4단계 검토 및 생성
 생성을 클릭합니다.

메시지가 노드그룹 생성 진행중에서 활성 상태가 변경되어야 생성이 완료됩니다. 노드그룹이 생성되었습니다.


4. kubectl 설치

EC2 인스턴스에 접속하여 kubectl을 설치합니다.

# EC2 instance에 접속
$ ssh -i "my-aws-train.pem" ec2-user@ec2-3-36-126-37.ap-northeast-2.compute.amazonaws.com
Last login: Thu Nov 25 05:11:52 2021 from 218.38.24.159

       __|  __|_  )
       _|  (     /   Amazon Linux 2 AMI
      ___|\___|___|

https://aws.amazon.com/amazon-linux-2/
7 package(s) needed for security, out of 7 available
Run "sudo yum update" to apply all updates.

# aws 로그인
$ aws configure
 
# kubectl 설치
$ curl -o kubectl https://amazon-eks.s3.us-west-2.amazonaws.com/1.20.4/2021-04-12/bin/linux/amd64/kubectl
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 38.3M  100 38.3M    0     0  4878k      0  0:00:08  0:00:08 --:--:-- 5977k

$ chmod +x ./kubectl
$ mkdir -p $HOME/bin && cp ./kubectl $HOME/bin/kubectl && export PATH=$PATH:$HOME/bin
$ kubectl version --short --client
Client Version: v1.20.4-eks-6b7464

# --name 은 생성한 클러스터명

$ aws eks --region ap-northeast-2 update-kubeconfig --name my-eks-cluster
Added new context arn:aws:eks:ap-northeast-2:103355202864:cluster/my-eks-cluster to /home/ec2-user/.kube/config

$ kubectl get svc
NAME         TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
kubernetes   ClusterIP   10.100.0.1   <none>        443/TCP   3d18h

# 노드그룹 3개가 생성되어 있는지 확인
$ kubectl get node
NAME                                               STATUS   ROLES    AGE     VERSION
ip-172-31-22-232.ap-northeast-2.compute.internal   Ready    <none>   3d18h   v1.21.5-eks-bc4871b
ip-172-31-5-167.ap-northeast-2.compute.internal    Ready    <none>   3d18h   v1.21.5-eks-bc4871b
ip-172-31-63-200.ap-northeast-2.compute.internal   Ready    <none>   3d18h   v1.21.5-eks-bc4871b

 


5. 애플리케이션 배포

쿠버네티스에서 가장 중요한 기능인 애플리케이션 배포과정입니다.
Deployment를 통한 어플리케이션 배포를 합니다.
배포 리소스를 생성합니다.

# 배포 yaml 파일 생성
$ vi deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 6
  selector:
    matchLabels:
      app: nginx-deployment
  template:
    metadata:
      name: nginx-deployment
      labels:
        app: nginx-deployment
    spec:
      containers:
      - name: nginx-deployment-container
        image: public.ecr.aws/b3h1g9o6/aplus

; wq!

# 리소스 생성
$ kubectl apply -f deployment.yaml
deployment.apps/nginx-deployment created

# 
$ kubectl get deployments.apps -o wide
NAME               READY   UP-TO-DATE   AVAILABLE   AGE    CONTAINERS                   IMAGES                          SELECTOR
nginx-deployment   0/6     6            0           157m   nginx-deployment-container   public.ecr.aws/b3h1g9o6/aplus   app=nginx-deployment

# 상세정보 확인
$ kubectl describe deployments.apps nginx-deployment

 


6. 노드포트 배포

노드포트 배포 리소스도 동일한 방법으로 생성합니다.

$ vi nodeport-deployment.yaml # 노드포트 yaml
apiVersion: v1
kind: Service
metadata:
  name: nodeport-service-deployment
spec:
  type: NodePort
  selector:
    app: nginx-deployment
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80
    nodePort: 30080

; wq!

# 리소스 적용 
$ kubectl apply -f nodeport-deployment.yaml
service/nodeport-service-deployment created

$ kubectl get svc -o wide
NAME                          TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE     SELECTOR
kubernetes                    ClusterIP   10.100.0.1       <none>        443/TCP        3d23h   <none>
nodeport-service-deployment   NodePort    10.100.220.150   <none>        80:30080/TCP   13s     app=nginx-deployment

$ kubectl describe svc nodeport-service-deployment

7. 클러스터IP 배포


클러스터IP 배포 리소스를 생성합니다.

# 클러스터아이피 yaml
$ vi clusterip-deployment.yaml 
apiVersion: v1
kind: Service
metadata:
  name: clusterip-service-deployment
spec:
  type: ClusterIP
  selector:
    app: nginx-deployment
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80

; wq!

# 리소스 생성
$ kubectl apply -f clusterip-deployment.yaml
service/clusterip-service-deployment created

$ kubectl get svc -o wide
NAME                           TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE     SELECTOR
clusterip-service-deployment   ClusterIP   10.100.77.184    <none>        80/TCP         6s      app=nginx-deployment
kubernetes                     ClusterIP   10.100.0.1       <none>        443/TCP        3d23h   <none>
nodeport-service-deployment    NodePort    10.100.220.150   <none>        80:30080/TCP   7m1s    app=nginx-deployment

$ kubectl describe svc clusterip-service-deployment

8. 로드밸런서 배포

로드밸러서 리소스를 생성합니다.

# 로드밸런서 yaml
$ vi loadbalancer-deployment.yaml 
apiVersion: v1
kind: Service
metadata:
  name: loadbalancer-service-deployment
spec:
  type: LoadBalancer
  externalIPs:
    - 192.168.0.143
  selector:
    app: nginx-deployment
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80

;wq!
$ kubectl apply -f loadbalancer-deployment.yaml
service/loadbalancer-service-deployment created

$ kubectl get svc -o wide
NAME                              TYPE           CLUSTER-IP       EXTERNAL-IP                                                                                  PORT(S)        AGE     SELECTOR
clusterip-service-deployment      ClusterIP      10.100.77.184    <none>                                                                                       80/TCP         3m5s    app=nginx-deployment
kubernetes                        ClusterIP      10.100.0.1       <none>                                                                                       443/TCP        3d23h   <none>
loadbalancer-service-deployment   LoadBalancer   10.100.9.2       a8cc51e0f3adf4f3d87c756b1a3052ec-1693233752.ap-northeast-2.elb.amazonaws.com,192.168.0.143   80:30942/TCP   21s     app=nginx-deployment
nodeport-service-deployment       NodePort       10.100.220.150   <none>                                                                                       80:30080/TCP   10m     app=nginx-deployment

$ kubectl describe svc loadbalancer-service-deployment

 

 


7. EKS 도메인 설정

Route 53 메뉴로 이동하여 EKS용 레코드를 생성합니다. 
레코드 : eks.sbrich.shop
API 서버 엔드포인트 : https://B78F9C1D5B5CAB72B1864B32C925EF7D.gr7.ap-northeast-2.eks.amazonaws.com


 


8. EKS 클러스터 확인

EC2 목록 확인 : tag name이 없는 것이 EKS 오토스케일 대상 EC2 인스턴스(node)

EKS 클러스터클러스터 개요정보

EKS 클러스터의 워크로드 정보

EKS 클러스터 구성


서비스 리소스 정보

$ kubectl get svc
NAME                              TYPE           CLUSTER-IP       EXTERNAL-IP                                                                                  PORT(S)        AGE
clusterip-service-deployment      ClusterIP      10.100.77.184    <none>                                                                                       80/TCP         61m
kubernetes                        ClusterIP      10.100.0.1       <none>                                                                                       443/TCP        4d
loadbalancer-service-deployment   LoadBalancer   10.100.9.2       a8cc51e0f3adf4f3d87c756b1a3052ec-1693233752.ap-northeast-2.elb.amazonaws.com,192.168.0.143   80:30942/TCP   58m
nodeport-service-deployment       NodePort       10.100.220.150   <none>                                                                                       80:30080/TCP   68m

 


Tips

팁 - 쿠버네티스 pod, replicaset, deployment 서비스 삭제하는 방법입니다.

$ kubectl get all
$ kubectl delete pod,svc --all
$ kubectl delete replicaset,svc --all
$ kubectl delete deployment,svc --all




팁 - 롤링 업데이트 제어

# Deployment 롤링 업데이트 제어

$ kubectl set image deployment.apps/nginx-deployment nginx-deployment-container=nginx:1.9.1
$ kubectl get all
$ kubectl rollout history deployment nginx-deployment
$ kubectl rollout history deployment nginx-deployment --revision=2 # 리비전2 상세보기
$ kubectl rollout undo deployment nginx-deployment # 롤백(전 단계로 복원)
$ kubectl get all
$ kubectl rollout history deployment nginx-deployment
$ kubectl rollout history deployment nginx-deployment --revision=3 # 리비전3 상세보기

쿠버네티스 명령어는 다음링크에서 참조하세요.

kubectl 명령어 참조는 아래에서
https://kubernetes.io/ko/docs/reference/kubectl/kubectl/

 

kubectl

시놉시스 kubectl은 쿠버네티스 클러스터 관리자를 제어한다. 자세한 정보는 kubectl 개요를 확인한다. kubectl [flags] 옵션 --add-dir-header true인 경우, 로그 메시지의 헤더에 파일 디렉터리를 추가한다. -

kubernetes.io

 


이번 시간에는 AWS 인프라 구축 실습 15회 - EKS에 대하여 실습해 보았습니다.

반응형
Posted by SB패밀리

댓글을 달아 주세요

  1. 익명 2022.01.01 00:59  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

산책하는 고양이와 함께하는 일상이 꿈인 사람들이 많다.




나도 있어 고양이!

반응형

'고양이 열대어' 카테고리의 다른 글

고양이가 있는 일상  (0) 2021.12.20
[고양이] 세계에서 가장 '긴~' 고양이  (0) 2021.10.30
산타옷을 입은 룬과 터키  (0) 2021.03.02
골든코브라구피  (0) 2020.02.08
네온블루턱시도  (0) 2020.02.08
킹코브라구피  (0) 2020.02.08
Posted by SB패밀리

댓글을 달아 주세요

AWS 인프라 구축 실습 14회 - ECS


이번 시간에는 ECS(Elastic Container Service)를 실습해 보도록하겠습니다.
여기에서 사용하는 ECR(Elastic Container Service Registry) 은 이전 시간에 작성한 실습 결과를 사용하겠습니다.

ECS와 같은 서비스는 Docker Swarm, AWS ECS, Kubernatetes EKS가 있습니다. 운영하는 규모에 따라 선택해서 적용을 하면 됩니다.
ECS는 컨테이너 오케스트레이션(Container Orchestration)이라고 하는 서비스입니다. 컨테이너의 배포, 관리, 확장, 네트워킹을 자동화하는 서비스입니다.

 


사전작업
1. ECR : sbrich
2. Route53 : sbrich.shop / docker.sbrich.shop
3. (자동생성) 대상그룹 : 'TG-ALB', instance type, HTTP, 80port
4. 보안그룹 : sg-Docker
5. 

실습과정
1. 작업정의
2. 클러스터 생성
3. 서비스 생성
  3.1. 서비스 구성
  3.2. 네트워크 구성
  3.3. 오토스케일링
4. 테스트

 


ECS 서비스 실습하기

1. 작업정의

Amazon ECS > 작업정의 페이지로 이동합니다.

태스크 정의 생성을 클릭합니다.

새 태스크 정의 생성을 클릭합니다.

1단계 : 태스크 정의 및 1단계 

2단계 : 환경, 스토리지, 모니터링 및 태그 구성

3단계 : 검토 및 생성

문제가 없다면 생성을 클릭합니다.

생성되었습니다.

 


2. 클러스터 생성

Amazon ECS의 클러스터 메뉴를 클릭합니다.


1단계 : 클러스터 템플릿 선택
"EC2 Linux + 네트워킹" 템플릿을 선택하고 다음을 클릭합니다.

2단계 : 클러스터 구성
클러스터 이름 ('my-cluster')를 입력하고 인스턴스를 선택/입력합니다. 키페어는 사용중이거나 새 키페어를 사용합니다.

네트워크 구성을 설정합니다.

퍼블릭IP자동할당은 '활성화' 해야합니다. 이제 생성을 합니다. 차후에 접속이 가능하도록 하기 위함입니다.
자동으로 인스턴스에 도커 환경을 구축합니다. ECS cluster, ECS 인스턴스 IAM, CloudFormration Stack 을 구축합니다.


EC2 메뉴에서 인스턴스를 확인해 봅니다. EC2 인스턴스는 설정 개수 만큼 생성이 됩니다. 

클러스터 보기를 클릭합니다.

 


3. 서비스 생성

3.1. 서비스 구성

클러스터의 서비스 탭에서 서비스 생성을 하기 위하여 '배포'를 클릭합니다.

배포설정의 서비스구성 영역에서 시작유형을 'EC2'로 선택합니다.
태스크 정의를 선택하고 서비스 이름은 'my-svc'로 입력하고 태스크 수는 3개로 합니다.


배포 유형은 3가지 유형 중 '롤링업데이트'로 (강제)선택합니다.

작업배치는 'AZ균형 분산'으로 선택합니다.


여기까지 설정한 후 다음을 클릭합니다.


3.2. 네트워크 구성

네트워크 영역은 VPC, Subnet, 보안그룹을 선택합니다.


로드밸런싱 영역에서 로드밸런서 유형 'Application Load Balancer'를 선택합니다.
미리 생성한 로드 밸런서 생성을 선택하고 로드 밸런서 이름 'ELB-ALB'를 입력합니다.
(미리 생성하지 않은 경우에는 'Amazon EC2 콘솔'에서 새 로드 밸런서를 생성합니다.

'컨테이너 이름: 포트'를 '로드 밸런서에 추가'를 클릭하여 추가합니다.

다음을 클릭합니다.


3.3 오토스케일링 설정

"서비스 오토스케일링을 구성하여 원하는 서비스 개수를 조정합니다."를 선택합니다.

최소 작업 수와 원하는 작업 수, 그리고 최대 작업 수를 2, 3, 4로 설정합니다.


자동 작업 조정 정책을 설정합니다. 조정정책유형은 '대상추적', 정책이름은 'test'로 합니다. 설정이 끝나면 다음을 클릭합니다.

검토 단계에서 문제가 없다면 새로 생성을 클릭합니다.
 몇 분이 소요될 수 있습니다. 천천히 기다리기로 합니다.

서비스 보기를 클릭합니다.

서비스의 세부정보도 확인해보겠습니다.


다음은 자동생성된 대상그룹 'TG-ALB'의 상세정보입니다. 대상그룹을 번거롭게 설정할 필요없이 자동으로 생성이 됩니다.

생성된 EC2 인스턴스입니다.


4. 테스트

접속을 위해 웹브라우저에서 url로 접속해 봅니다.
url은 ECS 클러스터의 서비스 생성시 추가한 로드밸런서 'ELB-ALB의 상세정보에서 'DNS 이름'을 복사해서 사용합니다.

DNS 이름으로 아래와 같이 웹으로 접속하고 Route53에서 별도로 레코드 생성해서 예를 들어 http://ecs.sbrich.shop 으로 접속할 수도 있습니다.


혹시라도 접속이 안된다면 대상그룹과 보안그룹을 확인해 보시기 바랍니다. HTTP 인바운드 규칙 관련해서 설정이 누락된 부분이 있을 수 있습니다.
대부분의 문제가 이 2가지에서 발견됩니다.

전체적으로 작업정의, 클러스터 생성, 서비스 생성, 로드밸런싱, 오토스케일링 등을 설정하면 아마존 서비스 오케스트레이션을 확인할 수 있습니다.


이번 시간에는 AWS 인프라 구축 실습 14회 - ECS에 대하여 실습해 보았습니다.

다음 과정에서는 AWS 인프라 구축 실습 15회 - AWS EKS에 대하여 실습해 보도록 하겠습니다.

반응형
Posted by SB패밀리

댓글을 달아 주세요

AWS 인프라 구축 실습 13회 - ECR

이번 시간에 실습할 내용은 ECR (Elastic Container Registies)입니다.
다음에는 ALB에서 Auto Scaling을 연동해서 실습해 보겠습니다.

준비사항
1. Route53 도메인 : sbrich.shop
2. VPC "default-vpc"
3. subnet : "Default-PublicSubnet-2a", "Default-PublicSubnet-2b", "Default-PublicSubnet-2a", "Default-PublicSubnet-2d"
4. 보안그룹 : SG-DOCKER

실습과정


1. 퍼블릭 레파지토리 등록
2. EC2 도커 호스트 및 AWS CLI 설치
3. 도메인 레코드 생성
4. docker container 생성
5. docker image build
6. AWS 자격증명
7. ECR push



1. 퍼블릭 레파지토리 등록

AWS의 ECS(Amazon Elastic container Service) 페이지로 이동합니다. 왼쪽 메뉴에서 '리포지토리'를 클릭합니다.


'리포지토리'페이지에서 'Public'탭을 클릭합니다. 그리고 '리포지토리 생성' 버튼을 클릭합니다.

리포지토리 이름을 'sbrich'로 입력하고 리포지토리 생성을 클릭합니다.

생성되었습니다.

'sbrich' 라디오 버튼 클릭 후 '푸시 명령 보기'를 클릭합니다.

팝업창이 오픈됩니다.

명령어 3가지를 복사해둡니다.

이미지빌드 푸시 : docker build -t sbrich .
빌드리포지토리 푸시 : docker tag sbrich:latest public.ecr.aws/l1t2e8u9/sbrich:latest
aws리포지토리 푸시 : docker push public.ecr.aws/l1t2e8u9/sbrich:latest

 


2. EC2 도커 호스트 및 AWS CLI 설치

도커 호스트용으로 EC2 인스턴스를 생성합니다.
EC2메뉴로 이동합니다. EC2 '인스턴스 시작'을 클릭합니다.

단계 1: Amazon Machine Image(AMI) 선택
  AMI는 Amazon Linux 2 AMI를 선택합니다.

단계 2: 인스턴스 유형 선택
  t2.micro를 선택합니다.

단계 3: 인스턴스 세부 정보 구성
  VPC는 'default-vpc'를 선택하고 서브넷은 'Default-PublicSubnet-2a'를 선택합니다. 퍼블릭IP자동할당은 '활성화'를 선택하고 사용자데이터는 아래와 같이 입력합니다.

...

단계 4: 스토리지 추가
  8GiB를 입력합니다.

단계 5: 태그 추가
  태그는 'docker'로 입력합니다.

단계 6: 보안 그룹 구성
  보안그룹은 'SG-DOCKER'로 SSH 유형으로 소스는 '위치무관'으로 합니다.

단계 7: 인스턴스 시작 검토
  문제가 없다면 시작하기를 클릭합니다.

기존 키 페어 선택 또는 새 키 페어 생성
키페어를 새로만들거나 선택합니다. 실습에서는 기존에 생성한 키페어를 이용합니다.

인스턴스가 생성되었습니다.


3. 도메인 레코드 생성

Route 53으로 이동하여 호스팅 영역 'sbrich.shop'에 대하여 퍼블릭IP 주소를 입력하고 'docker' 레코드를 생성합니다. 

레코드가 생성되었습니다.

 


4. docker container 생성

생성한 EC2 인스턴스에 SSH로 접속하여 컨테이너를 생성합니다.
ssh 연결정보는 다음에서 복사합니다.

Mac에서 터미널을 실행해서 키페어가 있는 곳으로 이동하거나 현재 경로에 키페어를 복사합니다. 그래야 접속명령이 간단합니다.

docker 를 생성하고 버전을 확인합니다.

aws --version 으로 ver 2 이상 인지 확인

aws 버전이 '2.4.1'이네요
이제 컨테이너를 생성합니다.
$ "docker container run -d -p 80:80 --name webserver nginx"

webserver 컨테이너에 디폴트 웹페이지를 생성합니다.

docker container exec -it webserver /bin/bash
echo 'my-nginx' > /usr/share/nginx/html/index.html
exit

5. docker image build

dockerfile을 만들고 docker image build 명령어로 image 파일 생성합니다. 
이미지 파일을 버전1과 버전2 로 만들어 봅니다.

$ mkdir dockerfile-lab && cd $_
$ vi Dockerfile
FROM nginx:latest
COPY index.html /usr/share/nginx/html/

$ echo 'my-nginx' > index.html

$ docker image build -t my-nginx:v1.0 .
$ docker image ls
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
my-nginx     v1.0      51aaa6722c3c   4 minutes ago   141MB
nginx        latest    ea335eea17ab   7 days ago      141MB
$ docker container run -d -p 80:80 --name webserver my-nginx:v1.0
$ docker container ls
CONTAINER ID   IMAGE           COMMAND                  CREATED         STATUS         PORTS                               NAMES
e69710ae27c9   my-nginx:v1.0   "/docker-entrypoint.…"   8 seconds ago   Up 7 seconds   0.0.0.0:80->80/tcp, :::80->80/tcp   webserver
$ docker container rm -f webserver

$ vi Dockerfile
FROM nginx:latest
COPY html /usr/share/nginx/html

$ cp -r ../html .

$ docker image build -t my-nginx:v2.0 .
$ docker image ls
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
my-nginx     v2.0      e3339ce0cacc   2 hours ago   142MB
my-nginx     v1.0      51aaa6722c3c   2 hours ago   141MB
nginx        latest    ea335eea17ab   7 days ago    141MB
$ docker container run -d -p 80:80 --name webserver my-nginx:v2.0
$ docker container ls
CONTAINER ID   IMAGE           COMMAND                  CREATED       STATUS       PORTS                               NAMES
fe6aacf09a30   my-nginx:v2.0   "/docker-entrypoint.…"   2 hours ago   Up 2 hours   0.0.0.0:80->80/tcp, :::80->80/tcp   webserver

 


6. AWS 자격증명

Docker Machine을 사용하여 정의를 해두면 자격증명을 유지하거나 로드하여 사용할 수 있습니다. 연재 이외에 기회가 되면 스핀오프로로 포스팅을 하겠습니다.
EC2 ssh 연결 후 cli 상태에서 aws cli 로그인을 합니다.
기존에 등록된 사용자가 있어서 그 사용자의 ascces key, secret key, region 을 이용하여 자격증명을 하겠습니다.
$ aws configure

$ aws configure
AWS Access Key ID [None]: 사용자액세스키
AWS Secret Access Key [None]: 사용자비밀키
Default region name [None]: ap-northeast-2
Default output format [None]: json
$ aws s3 ls

 


7. ECR push

이제 aws에 로그인 합니다.
(리전을 ap-northeast-2 --> us-east-1 로 변경하고 아래걸로 로그인이 되었습니다)
$ aws ecr-public get-login-password --region us-east-1 | docker login --username AWS --password-stdin public.ecr.aws/b3h1g9o6
sbrich 도커 이미지 빌드 : docker build -t sbrich .
sbrich 빌드리포지토리 푸시 : docker tag sbrich:latest public.ecr.aws/l1t2e8u9/sbrich:latest
sbrich AWS 리포지토리 푸시 : docker push public.ecr.aws/l1t2e8u9/sbrich:latest

# AWS 로그인
$ aws ecr-public get-login-password --region us-east-1 | docker login --username AWS --password-stdin public.ecr.aws/l1t2e8u9

# 이미지 빌드
$ docker build -t sbrich .
Sending build context to Docker daemon    577kB
Step 1/2 : FROM nginx:latest
 ---> ea335eea17ab
Step 2/2 : COPY html /usr/share/nginx/html
 ---> Using cache
 ---> e3339ce0cacc
Successfully built e3339ce0cacc
Successfully tagged sbrich:latest

# 이미지에 태그를 지정하여 이 리포지토리에 푸시
$ docker tag sbrich:latest public.ecr.aws/l1t2e8u9/sbrich:latest

# 이미지를 새로 생성한 AWS 리포지토리로 푸시
$ docker push public.ecr.aws/l1t2e8u9/sbrich:latest
The push refers to repository [public.ecr.aws/l1t2e8u9/sbrich]
2a11a11893b8: Pushed 
8525cde30b22: Pushed 
1e8ad06c81b6: Pushed 
49eeddd2150f: Pushed 
ff4c72779430: Pushed 
37380c5830fe: Pushed 
e1bbcf243d0e: Pushed 
latest: digest: sha256:d75e0d5590f90129aaf064a7c6aade52a49d2eb07065ad10dd2aa2795944ee58 size: 1780

이미지를 AWS 리포지토리로 푸시한 후의 퍼블릭 리포지토리를 리프레시해서 결과를 확인합니다.

이미지 상세정보입니다.

- ECR 이미지로 컨테이너 실행
  도커 이미지를 등록한 퍼블릭 ECR로부터 다운받아서 EC2 인스턴스로 다운받아 설치하는 방법입니다.

$ docker container run -d -p 80:80 --name webserver public.ecr.aws/l1t2e8u9/sbrich:latest

 



AWS 인프라 구축 실습 13회 - ECR에 대하여 실습해 보았습니다. 다음 과정에서는 ECS에 대하여 실습해 보도록 하겠습니다.

반응형
Posted by SB패밀리

댓글을 달아 주세요