AWS Cloud9 EKS 실습 - 02

 

하기링크 AWS 웨비나를 정리한 내용입니다.
출처 : https://catalog.us-east-1.prod.workshops.aws/workshops/46236689-b414-4db8-b5fc-8d2954f2d94a/ko-KR

   

Docker

Docker 기본 명령어

1.다음 명령어로 nginx(웹서버) Docker 이미지를 검색합니다. 많은 리스트를 볼 수 있을 겁니다.

docker search nginx

2.다음 명령어로 가장 다운로드 수가 많은 공식 nginx 이미지를 다운로드 합니다.

docker pull nginx

3.다음 명령어로 Docker 이미지가 잘 다운로드 됐는지 확인합니다.

docker images

4.다음 명령어로 nginx 이미지를 기반으로 컨테이너를 실행합니다. 그리고 브라우저에 Cloud9 인스턴스의 Public IP 주소를 입력하여 “Welcome to nginx!” 화면이 제대로 나오는지 확인합니다.

docker run --name apple -d -p 80:80 nginx
옵션 설명
-name 컨테이너의 이름을 지정(생략하면 랜덤하게 만듭니다)
-d 백그라운드에서 실행
-p 80:80 앞에 80번 포트로 접근하면 컨테이너의 80번 포트로 연결하라는 포트 매핑하는 옵션
nginx 는 풀(다운)받을 이미지 이름

아래와 같은 화면이 나오면 잘되는 겁니다.

5.다음 명령어로 실행되고 있는 컨테이너를 확인합니다.

docker ps

6.다음 명령어로 실행되고 있는 컨테이너를 정지합니다.

docker stop apple

7.다음 명령어로 모든(실행되고 있는, 정지된) 컨테이너를 확인합니다. (정지된 apple 컨테이너를 볼 수 있습니다.)

docker ps -a

8.다음 명령어로 정지된 컨테이너 다시 실행합니다.

docker start apple

9.다음 명령어로 2000번 포트로 orange 컨테이너를 하나 더 실행합니다. 그리고 브라우저에 Cloud9 인스턴스의 Public IP:2000 주소를 입력하여 “Welcome to nginx!” 화면이 제대로 나오는지 확인합니다.

docker run --name orange -d -p 2000:80 nginx

10.실행 중인 컨테이너를 확인합니다. 2개의 컨테이너가 실행되고 있는 걸 확인할 수 있습니다.

docker ps

11.다음 명령어로 컨테이너를 지우는 시도를 해봅니다. 에러가 날 것입니다. 왜 에러가 날까요? 컨테이너가 실행 중이기 때문에 지울 수가 없습니다. 그럼 정지하고 지우면 될까요?

docker rm apple

12.다음 명령어로 컨테이너를 다시 정지합니다.

docker stop apple

13.다음 명령어로 실행 중인 또는 정지된 모든 컨테이너를 확인합니다.

docker ps -a

14.다음 명령어로 정지된 apple 컨테이너를 지웁니다.

docker rm apple

15.다음 명령어로 이미지를 지우는 시도를 해봅니다. 에러가 날 것입니다. nginx 이미지를 orange 컨테이너가 사용하고 있기 때문에 지울 수가 없습니다. orange 컨테이너도 정지 후 지운 다음에 이미지를 제거 할 수가 있습니다.

docker rmi nginx

16.다음 명령어로 orange 컨테이너를 정지하고, 지운 후, 이미지도 삭제합니다.

docker stop orange
docker rm orange
docker rmi nginx

여기까지 해서 Docker의 기본 명령어들에 대해서 다루어 보았습니다. 다음 장에서 직접 이미지를 만들어 사용해 보도록 하겠습니다.

   

Docker 이미지 build

1.다음 명령어로 깃허브에 오픈되어 있는 2048게임 코드를 다운받습니다.

git clone https://github.com/gabrielecirulli/2048

2.다음 명령어로 디렉토리를 이동합니다.

cd ~/environment/2048

3.다음 명령어로 Dockerfile을 만듭니다.

cat << EOF > Dockerfile 
FROM nginx:latest

COPY . /usr/share/nginx/html

EXPOSE 80
EOF

4.다음 명령어로 Docker 이미지가 잘 다운로드 됐는지 확인합니다.

docker build -t web2048 .

5.다음 명령어로 nginx 이미지를 기반으로 컨테이너를 실행합니다. 그리고 브라우저에 Cloud9 인스턴스의 Public IP 주소를 입력하여 2048 게임 화면이 제대로 나오는지 확인합니다.

docker run --name web2048 -dp 80:80 web2048

6.다음 명령어로 모든 컨테이너를 지웁니다.

docker rm -f $(docker ps -aq)

7.다음 명령어로 모든 이미지를 지웁니다.

docker rmi -f $(docker images -q)

여기까지 해서 Docker의 기본 명령어들에 대해서 다루어 보았습니다. 다음 장에서 직접 이미지를 만들어 사용해 보도록 하겠습니다.

   

ECR에 이미지를 업로드

ECR 레포지토리 만들기

1.AWS 위쪽의 탐색창에서 Elastic Container Registry을 검색하여 이동합니다.

2.첫 화면에서 왼쪽의 햄버거 메뉴를 클릭합니다.

3.확장된 메뉴에서 Repositories를 클릭합니다.

4.리포지토리 생성(Create repository) 버튼을 클릭합니다.

5.리포지토리 이름(Repository name) 에 myrepo를 입력합니다.

6.리포지토리 생성(Create repository) 버튼을 클릭합니다. 리포지토리(Repository) 를 만듭니다.

7.조금 전에 만든 myrepo를 클릭합니다.

8.푸시 명령 보기(View push commands) 버튼을 클릭합니다.

9.우리가 만든 리포지토리(Repository) 에 인증하는 명령어, 이미지 빌드, 태깅, 푸쉬(업로드) 하는 명령어를 볼 수 있습니다.
이 명령어들을 복사하여 사용할 겁니다.(이제부터 이 명령어들을 푸시 명령어 라고 칭하겠습니다.)

10.푸시 명령어 중에 1번, 인증하는 명령어를 복사하여 Cloud9 의 터미널창에 붙여 넣습니다.

아래 명령어를 붙여 넣으시면 안 됩니다. 본인의 푸시 명령어 를 붙여 넣어야만 합니다. 다 주소가 다르기 때문입니다.

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

위와 같은 푸시 명령어를 실행하면, 아래와 같이 로그인이 성공했다는 메시지를 볼 수 있습니다.

password-stdin 955520426289.dkr.ecr.ap-northeast-2.amazonaws.com
WARNING! Your password will be stored unencrypted in /home/ec2-user/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

11.푸시 명령어 중에 2번, 이미지 빌드하는 명령어 실행합니다.

docker build -t myrepo .

12.푸시 명령어 중에 3번 명령어를 실행하여 이미지를 태깅합니다.(다시 말해서 이미지를 다른 이름으로 하나 더 만드는 작업입니다.)

아래 명령어를 붙여 넣으시면 안 됩니다. 본인의 푸시 명령어 를 붙여 넣어야만 합니다. 다 주소가 다르기 때문입니다.

docker tag myrepo:latest 9*5*2*4*6*8*.dkr.ecr.ap-northeast-2.amazonaws.com/myrepo:latest

13.다음 명령어로 이미지가 잘 태깅이 됐는지 확인합니다. myrepo 이미지가 새로운 952468.dkr.ecr.ap-northeast-2.amazonaws.com/myrepo** 이름으로 태깅이 된 것을 확인할 수 있습니다.

docker images

위 명령어를 실행하면 아래처럼 보이실 겁니다.

REPOSITORY                                                 TAG       IMAGE ID       CREATED         SIZE
9*5*2*4*6*8*.dkr.ecr.ap-northeast-2.amazonaws.com/myrepo   latest    0416db3d5817   2 minutes ago   157MB
myrepo                                                     latest    0416db3d5817   2 minutes ago   157MB

14.푸시 명령어 중에 4번 명령어를 실행하여 이미지를 리포지토리(Repository) 에 푸쉬 합니다.

아래 명령어를 붙여 넣으시면 안 됩니다. 본인의 푸시 명령어 를 붙여 넣어야만 합니다. 다 주소가 다르기 때문입니다.

docker push 9*5*2*4*6*8*.dkr.ecr.ap-northeast-2.amazonaws.com/myrepo:latest

위와 비슷한 명령어를 실행하면 아래와 같이 나올 겁니다.

The push refers to repository [9*5*2*4*6*8*.dkr.ecr.ap-northeast-2.amazonaws.com/myrepo]
fd0a697ee6bc: Pushed 
4d33db9fdf22: Pushed 
6791458b3942: Pushed 
2731b5cfb616: Pushed 
043198f57be0: Pushed 
5dd6bfd241b4: Pushed 
8cbe4b54fa88: Pushed 
latest: digest: sha256:9f697b8d228750d6cca533f7d70a88055b6d0e2d490d3e056776c8e1b928a40a size: 1781

15.기존에 ECR 만들었던 브라우저로 돌아갑니다. 푸시 명령어 창을 닫습니다. 그리고 새로고침 해보면 아래와 같은 이미지를 보실 수 있을 겁니다, 이미지 태그인 latest를 클릭합니다.

16.아래 보이는 URI가 여러분의 이미지 주소입니다. 이 이미지 주소를 통해 어디서든지 여러분이 만든 컨테이너 이미지를 받아서 실행하실 수 있습니다. 정말 잘되는지 확인하기 위해서, 로컬에 있는 이미지와, 실행 중인 컨테이너들을 다 지우고 URI를 통해 다시 받아서 잘되는지 실행해 보도록 하겠습니다.

17.다음 명령어를 실행하여 현재 로컬에 있는 모든 컨테이너 이미지를 삭제합니다. (이미지를 삭제하지 않으면 같은 이름의 이미지가 이미 로컬에 존재 하므로 풀(다운) 받지 않고 로컬의 이미지를 그대로 실행합니다.)

docker rmi -f $(docker images -q)

18.다음 명령어를 실행하여 ECR Repository에서 이미지를 풀(다운) 받아서 실행합니다.(아래 명령어를 그대로 실행하시면 안됩니다. 이미지 주소를 본인껄로 변경해 주셔야 합니다.)

아래 명령어를 붙여 넣으시면 안 됩니다. 본인의 이미지 URI 를 붙여 넣어야만 합니다. 다 주소가 다르기 때문입니다.

docker run --name 2048 -dp 80:80 [본인 이미지]

19.이미지가 잘 실행된 것 같습니다. 브라우저에 Cloud9 인스턴스의 Public IP 주소를 입력하여 2048 게임 화면이 제대로 나오는지 확인합니다.