실습 1탄 = 2/7
구성1
개발자 ------- EC2(도커설치,도커 파일)----------(올리기)---ECR
구성2
개발자 -------EC2(도커설치,도커 파일)----------(올리기)----Git------(올리기)---ECR--------EKS
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
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>
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
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
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
# 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 콘솔
리파지토리 이름과 이미지 태그 확인
https://brunch.co.kr/@topasvga/1652