brunch

You can make anything
by writing

C.S.Lewis

by Master Seo Jun 18. 2021

EKS 1탄-2. 도커 이미지,ECR-2/7

실습 1탄 = 2/7

구성1

개발자 ------- EC2(도커설치,도커 파일)----------(올리기)---ECR



구성2

개발자 -------EC2(도커설치,도커 파일)----------(올리기)----Git------(올리기)---ECR--------EKS


출처 https://aws.amazon.com/ko/blogs/devops/build-and-deploy-to-amazon-eks-with-amazon-codecatalyst/




<1> 도커 설치하기

<2> 도커 파일 만들기 1

<3> AWS ECR에  docker 이미지 올리기 1

<4> 도커 파일 만들기 2  

<5> AWS ECR에  docker 이미지 올리기 2  

<6> AWS ECR에 git  이미지 올리기  

<7> 다음 - 실습1-3. EKS클러스터 만들기

<10>   AWS EKS 실습




<1> 도커 설치하기



1

# EC2 접속하기


sudo su -


[ec2-user@ip-10-0-0-138 ~]$ mkdir -p ~/environment/

[ec2-user@ip-10-0-0-138 ~]$ cd ~/environment/


[ec2-user@ip-10-0-0-138 environment]$ pwd

/home/ec2-user/environment



# Docker 설치하기  ?


 sudo yum update -y

 sudo amazon-linux-extras install docker

 sudo yum install docker

 sudo service docker start

 sudo usermod -a -G docker ec2-user

 docker info




# EC2에 Docker 설치하기

https://docs.aws.amazon.com/ko_kr/AmazonECS/latest/developerguide/docker-basics.html




<2> 도커 파일 만들기 1


1


cat << EOF > Dockerfile

FROM nginx:latest

RUN  echo '<h1> test nginx web page </h1>'  >> index.html

RUN cp /index.html /usr/share/nginx/html

EOF


FROM : Base Image

RUN : shell command를 docker image에 실행

WORKDIR : 작업 디렉토리

EXPOSE : 호스트와 연결할 포트 번호를 지정

CMD : application을 실행하기 위한 명령어



2

# 빌드 

# nginx 는 컨테이너 이름 , image는 이미지 이름

# 이미지를 만들고, 컨테이너를 실행 시킨다.



docker build -t test-image .



docker images

[ec2-user@ip-172-31-40-122 ~]$ docker images

REPOSITORY   TAG       IMAGE ID       CREATED         SIZE

test-image   latest    43b4a84e1be2   6 seconds ago   187MB



3

docker run -p 8080:80 --name test-nginx test-image


docker run -p 8080:80 --name 컨테이너_이름   이미지_이름




docker ps

[root@demo1 environment]# docker ps

CONTAINER ID   IMAGE        COMMAND     CREATED     STATUS    PORTS                            NAMES

e3192fb93622   test-image   " "   About  About  0.0.0.0:8080->80/tcp, :::8080->80/tcp   test-nginx



docker logs -f test-nginx

[root@demo1 environment]# docker logs -f   [CONTAINER]

Usage:  docker logs [OPTIONS] CONTAINER




4

# 도커에 로그인 하는 법  =   -it 옵션


docker exec -it test-nginx /bin/bash

[root@ip-172-31-40-122 ~]# docker exec -it test-nginx /bin/bash

root@bfcccd5aee49:/# 

root@bfcccd5aee49:/# 






5

확인 ?


cloud9 > Tools > Prewiew  > Prewiew Runnning Application  에서 화면 확인




[root@eksctl-host ~]# docker ps

CONTAINER ID   IMAGE        COMMAND  CREATED   STATUS          PORTS                                   NAMES

c39ffd44d510   test-image   "/docker-entrypoint.…"   12 minutes ago   Up 12 minutes   0.0.0.0:8080->80/tcp, :::8080->80/tcp   test-nginx



6

# 도커에 로그인 하는 법  =   -it 옵션


[root@eksctl-host ~]# docker exec -it c39ffd44d510 /bin/bash


root@c39ffd44d510:/# ls

bin  boot  dev  docker-entrypoint.d  docker-entrypoint.sh  etc  home  index.html  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var


7

root@c39ffd44d510:/# more index.html

<h1> test nginx web page </h1>




<3> AWS ECR에  docker 이미지 올리기 1


1

ecr 만들고 업로드 ?

레파지토리 이름은 test-image


aws ecr create-repository --repository-name test-image --region  ${AWS_REGION}


docker tag test-image $ACCOUNT_ID.dkr.ecr.${AWS_REGION}.amazonaws.com/test-image



aws ecr get-login-password --region ${AWS_REGION} | docker login --username AWS --password-stdin $ACCOUNT_ID.dkr.ecr.${AWS_REGION}.amazonaws.com


docker push  $ACCOUNT_ID.dkr.ecr.${AWS_REGION}.amazonaws.com/test-image





<4> 도커 파일 만들기 2  


1

sudo su -


vi Dockerfile


FROM ubuntu:18.04

# Install dependencies

RUN apt-get update && \

 apt-get -y install apache2



# Install apache and write hello world message

RUN echo 'Hello World!' > /var/www/html/index.html



# Configure apache

RUN echo '. /etc/apache2/envvars' > /root/run_apache.sh && \

 echo 'mkdir -p /var/run/apache2' >> /root/run_apache.sh && \

 echo 'mkdir -p /var/lock/apache2' >> /root/run_apache.sh && \

 echo '/usr/sbin/apache2 -D FOREGROUND' >> /root/run_apache.sh && \

 chmod 755 /root/run_apache.sh

EXPOSE 80

CMD /root/run_apache.sh





2

빌드 ?

docker build -t hello-world .



3

도커 이미지 확인 ?


docker images

REPOSITORY    TAG       IMAGE ID       CREATED          SIZE

hello-world   latest    cd554e0b06c6   32 seconds ago   196MB

ubuntu        18.04     81bcf752ac3d   4 weeks ago      63.1MB



4

이미지를 컨테이너로 실행 ?


docker run -t -i -p 80:80 hello-world

//  Could not reliably determine the server's fully qualified domain name" 메시지는 무시해도 됩니다.



5

docker ps

docker ps -a





6

다른 터미널에서  exec로  컨테이너로  로그인 ?

docker exec -it   41f7105d2b3f  /bin/bash

//41f7105d2b3f 는 Container ID이다.



7

// 컨테이너로 로그인 한 상태, 명령어 사용해 본다.


root@41f7105d2b3f:/# cd /var/www/html/

root@41f7105d2b3f:/var/www/html# ls

index.html



root@41f7105d2b3f:/var/www/html# more index.html

Hello World!



root@51e7d9d8864f:/var/www/html# exit

(컨테이너에서 나가기)



8

서비스 상태 Up 확인 ?


[root@ip-10-0-0-230 ~]# docker ps -a

CONTAINER ID   IMAGE    COMMAND      CREATED         STATUS                       PORTS                NAMES

41f7105d2b3f   hello-world   "/bin/sh -c /root/ru…"   5 minutes ago   Up 5 minutes                 0.0.0.0:80->80/tcp   elastic_dirac



9

중지하기 ?

[root@ip-10-0-0-230 ~]# docker stop   41f7105d2b3f 



10

# 정상 종료 확인  = Exited 는 정상 종료



컨테이너 이름 확인


[root@ip-10-0-0-230 ~]# docker ps -a

CONTAINER ID   IMAGE         COMMAND         CREATED         STATUS                       PORTS     NAMES

41f7105d2b3f   hello-world   "/bin/sh -c /root/ru…"   5 min  Exited (137) 3 sec           elastic_dirac



11

컨테이너 삭제하기 ?


docker  rm  컨테이너-이름

docker rm elastic_dirac





<5> AWS ECR에  docker 이미지 올리기 2  



1

docker images

REPOSITORY                                                        TAG          IMAGE ID       CREATED             SIZE

test-image                                                        latest       86a04572f50c   10 seconds ago      133MB

demo2                                                             latest       6dca039085a0   26 minutes ago      60.7MB

demo-flask-backend                                                latest       53d888792869   About an hour   198MB

hello-world                                                       latest       53d888792869   About an hour ago   198MB



2

# ECR 만들기 ?  , hello-repository


aws ecr create-repository --repository-name hello-repository --region  ${AWS_REGION}



3

# 도커 이미지에 태그 설정하기 - 구분하기 위해 태그 사용한다. ?


docker tag hello-world $ACCOUNT_ID.dkr.ecr.${AWS_REGION}.amazonaws.com/hello-repository




4

# 인증 토큰을 가져오고 ,  docker login으로 전달해 로그인


aws ecr get-login-password --region ${AWS_REGION} | docker login --username AWS --password-stdin $ACCOUNT_ID.dkr.ecr.${AWS_REGION}.amazonaws.com



# 리전을 맞게 설정해야 한다.

aws ecr get-login-password --region ${AWS_REGION} | docker login --username AWS --password-stdin $ACCOUNT_ID.dkr.ecr.us-west-1.amazonaws.com



5

# 리파지토리에 이미지 올리기


docker push  $ACCOUNT_ID.dkr.ecr.${AWS_REGION}.amazonaws.com/hello-repository

0f8104f52693: Pushed

678e235885f7: Pushed

67826a8274f7: Pushed

6babb56be259: Pushed






6

AWS 콘솔 > ECR에 가서 확인


리파지토리와 이미지 확인하기

레파지토리 이름은 test-image




https://docs.aws.amazon.com/ko_kr/AmazonECS/latest/developerguide/docker-basics.html




<6> AWS ECR에 git  이미지 올리기  



# git에서 프로그램된 docker 파일을 가져와 빌드하고 push 하기도 한다.


Git에서 docker 파일을 가져온다.

빌드한다.

ECR에 Push 한다.

ECR 이미지를 EKS에서 사용한다.



1

yum install git



2

github에 공유한 배포할 파일 가져오기.


git clone https://github.com/joozero/amazon-eks-flask.git




2

ECR 만들기

demo-flask-backend  ECR를 만든다.


aws ecr create-repository --repository-name demo-flask-backend --image-scanning-configuration scanOnPush=true --region ${AWS_REGION}



3

인증 토큰을 가져오고 ,  docker login으로 전달해 로그인


aws ecr get-login-password --region ${AWS_REGION} | docker login --username AWS --password-stdin $ACCOUNT_ID.dkr.ecr.${AWS_REGION}.amazonaws.com


예)

aws ecr get-login-password --region ap-northeast-2 | docker login --username AWS --password-stdin $ACCOUNT_ID.dkr.ecr.ap-northeast-2.amazonaws.com



4

디렉토리 이동, 빌드


cd amazon-eks-flask/


docker build -t demo-flask-backend .



5

tag 이름 지정한다.


docker tag demo-flask-backend:latest $ACCOUNT_ID.dkr.ecr.${AWS_REGION}.amazonaws.com/demo-flask-backend:latest




6

ECR에 Push하기


docker push $ACCOUNT_ID.dkr.ecr.${AWS_REGION}.amazonaws.com/demo-flask-backend:latest



7

AWS >  resgistry = ecr 콘솔



리파지토리 이름과  이미지 태그 확인






<7> 다음 


실습  3. EKS클러스터 만들기


https://brunch.co.kr/@topasvga/1652


브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari