brunch

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

실습 1탄 = 2/7

by Master Seo

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



구성2

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


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


1

# EC2 접속하기


sudo su -


mkdir -p ~/environment/

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 에서 화면 확인


20 docker.png



[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


100 login.png




<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


120 ecr.png


130 test-image.png


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 콘솔



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

140 repo.png



150 image.png




<7> 다음


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


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


keyword
매거진의 이전글EKS1탄-1. EKS 구축 환경  설정-1/7