본문 바로가기
스터디/쿠버네티스 & 도커

[쿠버네티스 / 도커] 04. 쿠버네티스를 이루는 컨테이너 도우미, 도커

by 디토20 2022. 7. 6.
반응형

 

 

 

[쿠버네티스 / 도커] 04. 쿠버네티스를 이루는 컨테이너 도우미, 도커

 

 

1. 도커를 알아야 하는 이유

- 최근에는 여러 공급사에서 만들어둔 컨테이너 이미지로 인해, 도커를 몰라도 쿠버네티스를 배우고 사용하는 것이 가능해졌다. 하지만 쿠버네티스를 이루고 있는 기술 자체는 컨테이너를 벗어날 수 없기 때문에, 트러블 슈팅을 제대로 하려면 컨테이너를 잘 알아야한다. 또한 CI/CD와 모니터링 모두 컨테이너로 관리되기 때문에 컨테이너와 이를 다루는 도커를 자세히 알면 컨테이너 인프라 환경을 한층 더 이해할 수 있다.

 

 

1.1 파드, 컨테이너, 도커, 쿠버네티스의 관계

  • 쿠버네티스 클러스터는 워커 노드와 마스터 노드로 이루어져있다.
  • 워커 노드라는 노드 단위로 파드를 관리한다.
  • 파드는 1개 이상의 컨테이너로 이루어져있다.

파드는 쿠버네티스로부터 IP를 받아 컨테이너가 외부와 통신할 수 있는 경로를 제공한다. 컨테이너들이 정상 작동 하는지 확인하고 네트워크나 저장 공간을 서로 공유하게 한다. 컨테이너는 하나의 운영 체제 안에서 커널의 공유하며 개별적인 실행 환경을 제공하는 격리된 공간이다. 컨테이너 내부에서 실행되는 애플리케이션들은 서로 영향을 미치지 않고 독립적으로 작동하는데, 이런 독립적인 여러 컨테이너를 효과적으로 다룰 방법이 필요해져 등장한 것이 도커이다.

 

 

 

 

2. 도커로 컨테이너 다루기

도커로 컨테이너를 생성할 때는 도커 이미지를 내려 받아 컨테이너로 실행하고, 컨테이너를 삭제할 때는 내려받은 이미지와 이미 실행된 컨테이너를 모두 삭제해야만 디스크의 용량을 온전히 확보할 수 있다.

 

 

2.1 이미지 검색하고 내려받기

- 이미지는 레지스트리라고 하는 저장소에 모여있다. 레지스트리는 도커 허브처럼 공개된 유명 레지스트리일 수도 있고, 내부에 구축한 레지스트리일 수도 있다. 이미지는 레지스트리 웹 사이트에서 직접 검색해도 되고, 슈퍼푸티 명령 창에서 쿠버네티스 마스터 노드에 접속해 검색할 수도 있다. 이 때 별도의 레지스트리를 지정하지 않으면 기본으로 도커 허브에서 이미지를 찾는다.

 

docker search <검색어> // 이미지 검색
docker pull <이미지이름> // 이미지 내려받기

 

이미지 태그

태그는 이름이 동일한 이미지에 추가하는 기본 식별자이다. 이름이 동일해도 도커 이미지의 버전이나 플랫폼이 다를 수 있기 때문에 이를 구분하는데 사용한다. 태그를 명시하지 않으면 latest 태그를 기본으로 사용한다.

docker pull nginx // nginx 최신 버전이 다운로드
docker pull nginx:1.19.2 // nginx 이미지 1.19.2 버전 다운로드
docker pull nginx:stable // nginx 이미지 안정화 버전 다운로드

 

이미지의 레이어 구조

이미지는 애플리케이션과 각종 파일을 담고 있다는 점에서 압축파일에 가깝다. 하지만 이미지는 같은 내용일 경우 여러 이미지에 동일한 레이어를 공유하므로 전체 용량이 감소한다.

 

 

 

2.2 컨테이너 내부 파일 변경하기

도커는 컨테이너 내부에서 컨테이너 외부 파일을 사용할 수 있는 방법으로 크게 4가지를 제공한다.

구분 docker cp Dockerfile ADD 바인드 마운트 볼륨
컨테이너 적용 구동 중 복사 이미지 생성 시 복사 구동 시 디렉터리 연결 구동 시 도커의 볼륨 연결
파일 보관 위치 컨테이너 내부 컨테이너 내부 호스트(디렉터리) 호스트(도커 볼륨)
주 활동 용도 임시 파일 컨테이너 생성 시 필요한 타입 보존이 필요한 파일 보존이 필요한 파일
관리 편의성 좋지 못함 좋음 좋음 매우 좋음
파일 보존성 좋지 못함 좋음 매우 좋음 매우 좋음

 

 

 

3. 4가지 방법으로 컨테이너 이미지 만들기

컨테이너 이미지를 만드는 방법은 다음과 같이 4가지다.

 

3.1 기본 방법으로 빌드하기

  • 가장 간단한 방법
  • 자바 소스 빌드 -> 도커파일 작성 -> 도커파일 빌드 -> 빌드 완료

 

3.2 컨테이너 용량 줄이기

  • 불필요한 공간을 점유하는 건 비용 낭비이기도 하지만, 성능에 영향을 미칠 수 있다.
  • 도커파일 작성 -> 도커파일 빌드 -> 빌드 완료
  • 기초 이미지를 openjdk 대신 GCR(Google Container Registry)에서 제공하는 distroless로 변경

 

3.3 컨테이너 내부에서 컨테이너 빌드하기

  • 자바 소스를 컨테이너 이미지에서 바로 빌드
  • 도커파일 작성 -> 도커파일 빌드 -> 빌드 완료
  • 용량이 가장 큼
  • 편하긴 하나, 비효율적

 

3.4 최적화해 컨테이너 빌드하기

  • 도커파일 작성 -> 도커파일 빌드 -> 빌드 완료
  • 최종 이미지의 용량을 줄일 수 있고 호스트에 빌드 도구 설치 필요 x
  • 컨테이너에서 자바 파일을 빌드하고, 빌드된 파일을 경량화 이미지에 복사 후 자바 빌드 시 생성된 이미지 삭제

 

 

4. 쿠버네티스에서 직접 만든 컨테이너 사용하기

쿠버네티스에서 이미지를 사용하려면 쿠버네티스가 이미지를 불러올 수 있는 공간에 이미지를 넣어 두어야 한다. 이미지 레지스트리를 만들어 보자.

 

 

4.1 이미지 레지스트리 구성하기

  • 인터넷이 연결되어 있다면 도커 허브를 이용
  • 제약없는 private 저장소가 필요하다면 직접 구축

 

4.2 레지스트리 종류

구분 하버 넥서스 리포지터리 도커 레지스트리
가격 유/무료 무료 유/무료 무료
저장 형식 도커 이미지, 헬름 도커 이미지, 헬름 다양함 도커 이미지
설치 방법 직접 설치, 클라우드 직접 설치 직접 설치 직접 설치
기능 부가 기능 있음 부가 기능 있음 매우 많음 최소
관련 자료 적음 보통 많음 많음

 

728x90
반응형

댓글