1. Introduction to Docker

JW·2022년 7월 20일
0

GoogleCloudStudyJam

목록 보기
2/2

(사실 포스팅 하기 전에 실습은 다 끝낸 상태고, 내용 정리 겸 글을 남긴다 )

아래는, 구글에서 제공하는 1단원의 학습 목표이다.

In this lab you will familiarize yourself with the basic Docker container environment commands. You will create, run, and debug containers, and learn to pull and push images to and from Google Container Registry.

베이직 도커 컨테이너 환경 커멘드에 대해 알고 컨테이너 이미지를 pull push 할 수 있게 된다.

나는 도커에 대한 기본적 배경 지식도 없어서 위 소개글의 image를 그림 파일이라고 생각하고 있었다.

이해가 가지 않아 , 유튜브에서 도커에 대한 기본적 영상을 찾아보고 개념을 세웠다.

개인적으로 좋아하는 나동빈씨가 정리해준 Docker 개념

Docker containers can be directly used in Kubernetes, which allows them to be run in the Kubernetes Engine with ease. After learning the essentials of Docker, you will have the skillset to start developing Kubernetes and containerized applications.

쿠버네티스에 도커를 쓰는 방법에 대해 알려준다 한다.

실습 시작!

Cloud Shell 과 명령어

실습에서는 전부 구글에서 제공하는 학습용 계정을 사용하게 된다.

Cloud Shell은 사이트에서 CLI 를 사용할 수 있게 해주는 역할을 하며(AWS에도 똑같은 것이 있다)

빨간 버튼을 누르면 CLI가 열린다.

Google cloud에서 쓰는 커멘드 앞에는 'gcloud' 가 붙게된다.


이런 식으로 말이다 !

더 많은 명령어가 궁금하다면 공식 문서를 참조하자.

Run docker

docker run hello-world

를 입력하면 ( 찾아보니까 도커에서 입문자들 용으로 만들어 놓은 것 같다 )

이런 창이 나오게 된다.

This simple container returns Hello from Docker! to your screen. While the command is simple, notice in the output the number of steps it performed. The docker daemon searched for the hello-world image, didn't find the image locally, pulled the image from a public registry called Docker Hub, created a container from that image, and ran the container for you.

학습자료에서 중요한 키워드는 Docker deamon이 주도적으로 image를 찾는다는 것.

그리고 local에서 찾지 못하면 공용 저장소인 Docker Hub라는 곳에서 찾아서 가져오고 container를 image로부터 만들어 작동시켜 준다 라는 이야기이다.

그렇게 다운받아 온 이미지를 확인해 볼 수 있다.

이제 다시

docker run hello-world

를 입력하면 이런 창이 뜬다.

docker daemon이 image를 local에서 발견했기 때문에 Docker hub에서 이미지를 가져 올 필요가 없다.

현재 실행되고 있는 컨테이너를 볼 수 있을 때 쓰는 커멘드

(이미 hello-world container는 종료된 상태이다)

옛날 기록도 볼 수 있게 하려면 docker ps -a 를 사용하면 된다.

Container ID는 도커에서 Container identify 하기 위해 설정.

Name도 랜덤하게 만들거나,

docker run --name [container-name] hello-world 을 사용해 지정할 수 있다.

Build

도커 파일을 만들어 주면 된다 .

3번째 ADD ./app 에서 .이 현재 디렉토리를 뜻하는 역할을 한다.

docker docs

간단한 서버를 작동시켜주는 node application을 만들어 본다.

Dockfile이 있는 디렉토리에서

docker build -t node-app:0.1.

-t는 이름을 붙여주기 위해서 사용하는 것이고 ,뒤에 0.1은 tag라고 한다.
테그를 확실하게 적어주지 않으면, 구형 image들과 헷갈릴 수 있다.(지정 하지 않으면, latest라는 테그로 설정됨.)

docker images 를 통해 생성된 도커들을 볼 수 있다.

node는 node-app의 base image여서 , node-app을 지우지 않은 상태에서 node 를 먼저 지울 수 없다.
(참고로 여기서 사이즈를 보면, vm보다 훨씬 작다는 것을 알 수 있다 ! 더 작은 image들도 있다 하니 관심 있으면 찾아보면 된다. )

Run

컨테이너를 돌려보자 !

docker run -p 4000:80 --name my-app node-app:0.1

--name은 container의 이름을 설정해준다.
-p는 host의 포트인 4000을 container의 포트 80에 mapping 시켜줄 수 있다.

http://localhost:4000 을 사용해 서버에 접근할 수 있게 되는 것이다!

와우~

이제 my-app container을 중지시키고, 삭제하자.

새로운 터미널 창을 열어서,

docker run -p 4000:80 --name my-app -d node-app:0.1

도커를 다시 돌려보고

docker ps

도커 목록을 뽑아보자

참고로 container_id을 다 치지 않아도 된다. 초반부 몇 글자정도만 쳐도 된다.

아까 만들었던 test 에 가서, 파일의 일부를 바꾸고 0.2 tag를 붙여 다시 빌드를 해보자.

step 2에서 cache를 쓰는 모습을 볼 수 있고
step 3 부터는 파일 정보가 바뀌어서 새롭게 만들어 지는 것을 볼 수 있다.

새로운 포트를 잡고 node-app:0.2를 실행 시킨다.

4000번 포트의 컨테이너와 8080 포트의 컨테이너가 모두 잘 실행되고 있다.

Debug


로그들을 실시간으로 볼 수 있는 -f

컨테이너 내부에서 bash를 사용하고 싶을때 , 새로운 창을 열어서

docker exec -it [c_id] bash

를 치면 된다

workdir 에서 bash가 실행되는 점!

ls 로 현재 디렉토리 봐주고

exit 하면 나가진다.

docker의 metadata를 볼 수 있는 command

json형식을 사용해서 특정 값만 뽑아 낼수도 있다.

inspect reference

exec reference

Publish

image를 Google Container Registry(GCR) 에 넣어놓고

내 모든 환경들을 리셋 후, 다시 깔아보는 실습을 진행한다.

프로젝트 아이디 찾아주고~

host id에 gcr.io를 붙여 push 할 준비를 하고

보내버리면 된다.

보내면 웹에서도 확인할 수 있다! (당연하지만..)

나에게 있는 모든 것들을 지워버리고...

image들도 다 지워버리고...

gcr에 push 했던 image를 가져와서 실행시켜버리면.. 실행된다!

끝!

느낀점

  1. js를 안해보다 보니까 사실 문법을 모르겠다 .

  2. dockerfile의 형식에 대해서 공부를 깊게 해볼 필요가 있다.

  3. 실제 프로젝트로 써보면 좀 알지도..?

profile
뭘 할까?

0개의 댓글