brunch

You can make anything
by writing

C.S.Lewis

by Master Seo Jun 18. 2021

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

실습 1탄 = 2/7

구성1

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



구성2

개발자 -------cloud9 (도커설치,도커 파일)----------(올리기)--------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

Cloud9 접속하기


[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을 실행하기 위한 명령어



3

빌드

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



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


docker ps


docker logs -f test-nginx



# 도커에 로그인 하는 법  =   -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:/# 






4

확인 ?


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




# 도커에 로그인 하는 법  =   -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



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

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

디렉토리 이동, 빌드

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



<10>   AWS EKS 실습


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


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


감사합니다.

매거진의 이전글 EKS 1탄-1. Cloud9 환경  설정
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari