Udemy 강의중 Docker & Kubernetes 강의 를 수강 후 내용 정리 및 리뷰를 작성합니다.

우선 Udemy는 외국 강의가 많고, 한달에 여러번 할인을 하기에 괜찮은 강의가 있으면 미리 결재해 놓는게 좋습니다.

강의 후기

Udemy 강의는 할인 가격이 저렴해서 그런지 외국 강의라 그런지 수강률이 높지 않은데 해당 강의는 제가 Udemy에서 수강했었던 강의 중 만족도는 상위권이라 생각합니다.

주로 Backend 개발자 입장에서 해당 강의로 얻을 수 있는 점은 Docker와 Docker-compose를 이용해 개발 생산성을 높일 수 있다 생각합니다.

물론 Kubernetes도 충분히 의미가 있었지만 강의에서 그렇게 깊게 다루진 않은 것 같습니다.

실무에서도 backend 서버 테트를 위해서 종종 front 코드를 열때도 docker-compose를 이용하면 좋습니다.

image

위와 같이 front 프로젝트를 소스코드만 바인드 마운트로 설정 후 Docker로 프로젝트를 정의하고, docker-compose를 볼륨 이용해 여러 front 프로젝트를 관리하면 더 이상 node version과 다양한 설정에 대한 고민을 하지 않아 좋습니다.

강의 내용 정리

클론 코딩 을 하며 강의에서 들었던 내용 중 몇몇 내용을 정리했습니다.

도커 명령어 관련 정보

  • -p 포트 설정 ex) 3000:80 -> host port:container port
  • -d `detached mode로 도커 컨테이너를 백그라운드에서 실행
  • --name 컨테이너 이름 지정
  • --rm 피드백이 중지 시 자동으로 컨테이너 제거
  • -v 볼륨 지정 명명된 볼륨은 컨테이너가 제거하지 않음
  • :ro 읽기 전용
  • -f: 도커 파일명을 지정할 수 있음

도커 내부에서 나의 로컬 호스트를 아는 방법

1
localhost:port -> host.docker.internal:port

docker 명령어 예제

1
docker run -d -p 3000:80 --rm --name feedback-app -v feedback:/app/feedback -v $(pwd):/app -v /app/node_modules feedback-node

바인드 마운트 단축키

프로젝트 경로에서 /src만 바인드 마운트 후 docker의 /app 폴더에 바인드 마운트

1
2
macOS/Linux: -v$(pwd)/src:/app/src
Windows: -v ${PWD}/src:/app/src

도커 컨테이너 및 이미지 한번에 제거

1
2
3
4
docker container prune
docker image prune # 이게 안되면 아래거로
docker rmi $(docker images -a -q)
docker volume prune

Docker Compose

도커 컴포즈 실행

  • -d: detached 모드
  • up –build: 이미지를 리빌드
1
docker-compose up -d

도커 컴포즈 종료

  • -v: 볼륨과 함께 제거
1
docker-compose down -v

docker.prod 설정 관련

Docker CMD에서 CMD [ "npm", "start" ]값은 기본적으로 package.json의 스크립트에 있는 start 명령어를 실행한다.
이외에는 가운데에 CMD [ "npm", "run", "start" ]을 추가해서 스크립트 실행해야한다.

nginx docker menual 을 참조하여 빌드된 파일의 위치를 지정해야 한다.

멀티스테이지 빌드로 하나의 도커파일에 여러 이미지를 빌드할 수 있다.

-f: 도커 파일명을 지정할 수 있음

1
docker build -f frontend/Dockerfile.prod ./frontend

기타 명령어

컨테이너 제거

1
docker rm [mycontainer]

이미지 제거

1
docker rmi [myimage]

볼륨 확인

1
docker volume ls 

볼륨 제거

1
docker volume rm [volume name]

AWS에 대해

AWS는 Amazon Web Services의 약어로, 아마존닷컴이 제공하는 클라우드 컴퓨팅 서비스 플랫폼입니다. AWS는 컴퓨팅, 스토리지, 데이터베이스, 분석, 인공지능, IoT 및 기타 다양한 서비스를 제공하여 기업이나 개인이 필요로 하는 IT 인프라를 클라우드 기반으로 구축하고 관리할 수 있도록 도와줍니다. 아래 링크는 AWS에 대한 강사분의 영상 설명 링크입니다.
AWS에 대한 유튜브 영상 링크

도커 이미지 공식홈페이지 등록/업데이트/가져오기

도커 이미지 등록

1
2
3
4
docker login # 로그인
docker build -t node-dep-example . # 이미지 생성
docker tag node-dep-example [docker id]/node-dep-example # 태그 지정
docker push [docker id]/node-dep-example # 푸시

도커 이미지 업데이트 방법

1
2
3
docker build -t node-dep-example . # 동일한 태그로 등록
docker tag node-dep-example [docker id]/node-dep-example:0.1 # 버전 명시
docker push [docker id]/node-dep-example:0.1 # 푸시

도커 이미지 가져오기

1
docker pull [docker id]/node-dep-example:0.1

팁으로 도커 이미지의 변화없이 같으면 이미지의 이름은 다르지만 이미지ID가 같아서 삭제가 안되는 경우가 있다. 이럴 때는 아래와 같이 태그를 명시해서 제거할 수 있다.

1
docker rmi [이미지이름:tag]

쿠버네티스

쿠버네티스에서 사용자가 유의해야 할 것은 클러스터와 노드 생성이다.

mac apple arm 기준 설치

1
brew install kubectl

VitureBox 설치 후 minikube 설치

1
2
3
brew install minikube
minikube start --driver=virtualbox # 이게 안되면
minikube start --driver=docker # 이거

설치 확인

1
minikube status

image01

대시보드 확인

1
minikube dashboard

쿠버네티스의 주요 개념 중 하나는 파드(Pod)입니다.
파드는 쿠버네티스에서 실행되는 가장 작은 배포 단위이며, 일반적으로 파드는 하나 이상의 컨테이너로 구성되며, 이 컨테이너들은 동일한 호스트에서 동작하고 동일한 네트워크 네임스페이스와 IP 주소를 공유합니다.

kubectl api-resources를 입력하면 kubectl의 명령어를 어느 정도 확인 할 수 있습니다.

Pod란?

Kubernetes(K8s)에서 Pod는 가장 작은 배포 단위이며, Pod는 K8s 클러스터 내에서 실행되는 하나 이상의 컨테이너 그룹입니다. Pod는 논리적인 호스트 또는 노드에서 실행되며, 컨테이너, 저장소, 네트워크 리소스 등을 공유할 수 있습니다.
각각의 Pod는 고유한 IP 주소를 가지며, 포트 공간을 공유하여 서로 통신할 수 있습니다. Pod는 주로 관련된 서비스를 함께 실행하기 위해 사용되며, 서비스 디스커버리, 로깅, 모니터링 등을 위한 사이드카 컨테이너를 함께 포함할 수도 있습니다.

Pod는 일시적인 존재이며, 언제든지 새로운 Pod로 교체될 수 있으며, 이는 확장성과 견고성을 높이기 위한 K8s의 핵심 개념 중 하나입니다.

노드(Node)는 K8s 클러스터의 물리적 또는 가상의 서버입니다. 노드는 Pod를 실행하는 호스트로 사용되며, 컨테이너 런타임(예: Docker)과 K8s 에이전트가 설치되어 있습니다. 각 노드는 일련의 리소스(CPU, 메모리, 디스크 등)를 제공하고, Pod를 스케줄링하여 실행합니다. 여러 개의 Pod는 여러 노드에 분산되어 실행될 수 있습니다.