////
Search

4장 - 쿠버네티스를 이루는 컨테이너 도우미, 도커

Created
2022/09/03 11:25
Tags

4.1 도커를 알아야 하는 이유

쿠버네티스를 이루는 기본 오브젝트가 파드고, 파드는 컨테이너로 이루어져 있으며, 컨테이너를 만들고 관리하는 도구가 도커이기 때문
하지만 최근엔 도커를 몰라도 쿠버네티스를 사용하는게 가능해짐
하지만 쿠버네티스를 이루고 있는 기술 자체는 컨테이너를 벗어날 수 없는 만큼 트러블 슈팅을 하기위해서 컨테이너를 알고 있어야 함

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

쿠버네티스 클러스터의 구조
쿠버네티스, 파드 그리고 컨테이너 간의 연결 구조
파드는 쿠버네티스로부터 IP를 받아 컨테이너가 외부와 통신할 수 있는 경로를 제공
쿠버네티스 마스터 역시파드로 이루어져 있음
컨테이너는 하나의 운영 체제 안에서 커널을 공유하며 개발젹인 실행 환경을 제공하는 격리된 공간
개별적 환경이란 CPU, 네크워크, 메모리 같은 자원을 독자적으로 사용하도록 할당된 자원
각 컨테이너가 독립적으로 작동하기 때문에 컨테이너를 효과적으로 다룰 방법이 필요했음
파일을 설정하고, 자원과 공간을 관리하는 등 복잡한 과정을 수행하는 과정을 간편하게 만든도구가 바로 도커!

4.1.2 다양한 컨테이너 관리 도구

도커 이외에도 다양한 컨테이너 관리도구들이 존재함
구분
컨테이너디
크라이오
카타 컨테이너
도커
명령어 도구
별도 지원
타 도구 사용
자체 지원
자체 지원
내부 구조
단순
매우 단순
복잡
복잡
확장성
좋음
좋지 못함
좋지 못함
매우 좋음
컨테이너 관리
좋음
좋음
좋음
매우 좋음
이미지 관리
좋음
좋음
좋음
매우 좋음
보안성
좋음
좋음
매우 좋음
좋음
자원 사용량
매우 좋음
매주 좋음
좋지 못함
좋음
정보량
적음
거의 없음
거의 없음
매우 많음
결론? 정보 많은 도커가 짱짱이다!

4.2 도커로 컨테이너 다루기

4.2.1 컨테이너 이미지 알아보기

이미지 검색하고 내려 받기

태그 : 태그 이름을 통해 이미지를 내려받을 때 사용한 태그를 알 수 있음
latest는 가장 최신 이미지를 의미
레이어 : pull을 수행해 내려받은 레이어
하나의 이미지는 여러 개의 레이어로 이루어져 있음
다이제스트 : 이미지의 고유 식별자, 이미지에 포함된 내용과 이미지 생성 환경등 식별
다이제스트는 고유한 값 이미지의 이름이나 태그가 다르더라도 다이제스트가 동일하면 같은 이미지
상태 : 이미지를 내려받은 레지스트리, 이미지, 태그 등의 상태 정보

이미지 태그

이미지 태그를 통해서 동일한 이미지의 버전이나 플랫폼 등을 구분할 수 있음

이미지의 레이어 구조

컨테이너는 각종 파일을 담고 있다는 점에서 ZIP과 같은 압축파일에 가깝다고 할 수 있음
이미지는 같은 내용일 경우 여러 이미지에 동일한 레이어를 공유
전체 용량 감소

4.2.2 컨테이너 실행

docker run -d --restart always nginx
Shell
복사
단순한 이미지 실행
책에도 여러 방법이 소개 되지만 가장 좋은 방법은 공식 문서를 참고하기!

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

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

4.2.4 사용하지 않는 컨테이너 정리하기

사용이 끝나고 더 이상 사용하지 않을 컨테이너라면 공간을 확보하기 위해 삭제하는 편이 좋음
컨테이너 삭제 전 컨테이너를 정지해야 함
docker stop <Container ID / Conainer Name> docker rm <Container ID / Conainer Name> --force
Shell
복사
force 옵션의 경우 강제 삭제
오류가 발생할 수 있으니 주의

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

컨테이너 이미지 생성방법

4.3.1 기본 방법으로 빌드

FROM openjdk:8 LABEL description="Echo IP Java Application" EXPOSE 60431 COPY ./target/app-in-host.jar /opt/app-in-image.jar WORKDIR /opt ENTRYPOINT [ "java", "-jar", "app-in-image.jar" ]
Docker
복사
일반적으로 gadle 혹은 maven을 통해서 프로젝트를 빌드 한 후 도커 파일에 빌드 파일의 path를 맞춘후 빌드

docker가 외부와 연결되는 방법

도커는 172.17.0.0/16 범위에서 IP를 할당 받음
컨테이너는 네트워크 어댑터(0.0.0.0)를 통해서 특정 포트로 들어오는 요청을 내부로 전달하도록 설정
반면 localhost와 같은 내부 IP에서 컨테이너 내부로 요청을 전달할 경우 docker-proxy 프로세스가 컨테이너 내부로 요청을 전달함

4.3.2 컨테이너 용량 줄이기

FROM gcr.io/distroless/java:8 LABEL description="Echo IP Java Application" EXPOSE 60432 COPY ./target/app-in-host.jar /opt/app-in-image.jar WORKDIR /opt ENTRYPOINT [ "java", "-jar", "app-in-image.jar" ]
Docker
복사
자바 실행을 위하 가볍게 설계된 이미지를 사용한다.

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

FROM openjdk:8 LABEL description="Echo IP Java Application" EXPOSE 60433 RUN git clone https://github.com/iac-source/inbuilder.git WORKDIR inbuilder RUN chmod 700 mvnw RUN ./mvnw clean package RUN mv target/app-in-host.jar /opt/app-in-image.jar WORKDIR /opt ENTRYPOINT [ "java", "-jar", "app-in-image.jar" ]
Docker
복사
별도로 빌드하는 과정이 없어서 간편하게 도커만드로 빌드가 가능하다.
하지만 도커 이미지가 매우커지기 때문에 좋은 방법은 아님

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

FROM openjdk:8 AS int-build LABEL description="Java Application builder" RUN git clone https://github.com/iac-source/inbuilder.git WORKDIR inbuilder RUN chmod 700 mvnw RUN ./mvnw clean package FROM gcr.io/distroless/java:8 LABEL description="Echo IP Java Application" EXPOSE 60434 COPY --from=int-build inbuilder/target/app-in-host.jar /opt/app-in-image.jar WORKDIR /opt ENTRYPOINT [ "java", "-jar", "app-in-image.jar" ]
Docker
복사
멀티스테이지를 이용한 도커 빌드
멀티스테이지는 docker-ce 17.06 버전부터 지원함
앞서 Dockerfile 하나만 가지는 간편한 빌드 방법을 따르면서 가벼운 이미지를 만들어냄
멀티스테이지의 핵심은 빌드 위치와 최종 이미지를 분리하는 것
이름이 없는 이미지를 댕글링 이미지라 함

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

4.4.1 쿠버네티스에서 도커 이미지 구동하기

4.4.2 레지스트리 구성하기

호스트에서 생성한 이미지를 쿠버네티스에서 사용하려면 모든 노드에서 공통으로 접근하는 레지스트리가 필요
직접 만든 이미지가 외부에 공개되기를 원하지 않는 경우엔 사설 레지스트리를 만들거나 유료 레지스트리를 이용할 수 있음
구분
하버
넥서스 리포지터리
도커 레지스트리
가격
유/무료
무료
유/무료
무료
저장 형식
도커 이미지, 헬름
도커 이미지, 헬름
다양함
도커 이미지
설치 방법
직접 설치, 클라우드
직접 설치
직접 설치
직접 설치
기능
부가 가능 있음
부가 가능 있음
매우 많음
최소
관련 자료
적음
보통
많음
많음