Docker 이론편

wononly.dev·2022년 9월 7일
0

DEV

목록 보기
2/3
post-thumbnail

🐳 도커란?

  • 컨테이너 기반 가상화 도구, 리눅스 상에서 컨테이너 방식으로 프로세스를 격리해서 실행하고 관리할 수 있도록 도와주며, 계층화된 파일 시스템에 기반해 효율적으로 이미지(프로세스 실행 환경)를 구축할 수 있도록 해준다.
  • 도커를 사용하면 이미지를 기반으로 컨테이너를 실행 할 수 있으며, 다시 특정 컨테이너의 상태를 변경해 이미지로 만들 수 있다.
    이렇게 만들어진 이미지는 파일로 보관하거나 원격 저장소를 사용해 쉽게 공유할 수 있으며, 도커만 설치되어 있다면 필요할 때 언제 어디서나 컨테이너로 실행하는 것이 가능하다.

    ℹ️ 도커에서는 어플리케이션을 실행하기 위한 파일들을 모아놓고, 어플리케이션과 함께 이미지로 만들 수 있다. 그리고 그 이미지를 기반으로 어플리케이션을 바로 배포 할 수 있음

도커 컨테이너 실행될 때 저장되는 프로세스

  1. 도커 컨테이너 실행
  2. 모든 읽기 전용 레이어들을 순서대로 쌓음
  3. 마지막에 쓰기 가능한 신규 레이어를 추가
  4. 컨테이너 안에 발생하는 결과물들이 쓰기 가능 레이어에 기록됨
  • 여러 도커 컨테이너를 실행하더라도 기존 읽기 전용 레이어는 변하지 않는다.
  • 컨테이너마다 생성된 쓰기 가능 레이어에 데이터가 쌓이기 때문에
    서로 수정사항이 공유되지 않고 컨테이너 종료시 모두 사라진다.

이미지와 컨테이너

이미지란?

어떤 환경이 구성되어있는 상태를 저장해놓은 파일 집합

  • 도커 이미지에 붙은 태그는 이미지의 특정 버전을 구분함
  • 도커 IMAGE ID의 값은 이미지마다 다르게 할당된 식별자로 이미지를 구별하기 위해 사용
  • IMAGE ID 는 도커 이미지의 버전 넘버 역할을 하며, 애플리케이션 수정 후 이미지를 빌드하면 다른 이미지가 됨. 이때 IMAGE ID 값은 새로운 값 할당
  • 도커 이미지 버전 = IMAGE ID
  • IMAGE ID 에 별명을 붙인것이 TAG
  • TAG 는 특정 IMAGE ID 를 쉽게 식별하기 위한 목적을 가짐

컨테이너란?

격리된 환경에서 실행되는 프로세스

  • 이미지는 파일들의 집합이며, 컨테이너는 이 파일들의 집합 위에서 실행되는 특별한 프로세스이다.

레이어

도커 이미지가 빌드될 때 Dockerfile 에 정의된 명령문(instructions)을 순서대로 실행하면서 만들어진다.

  • 이 레이어들은 각각 독립적으로 저장되며 읽기 전용이기 때문에 임의로 수정할 수 없음
  • 이미지를 빌드할 때마다 이미 생성된 레이어가 캐시되어 재사용됨 → 빌드시간 단축
  • But, Dockerfile 에 정의된 모든 명령문이 레이어가 되는 것은 아님

    ℹ️ RUN, ADD, COPY 이 3가지 단계만이 레이어로 저장
    (명령문 수정시 기존 캐시가 무효가 되어 새로운 레이어 생성)
    CMD, LABEL, ENV, EXPOSE 등과 같이 메타 정보를 다루는 부분은 임시 레이어로 생성되지만 저장되지 않아 도커 이미지 사이즈에 영향 주지 않음

도커라이징

어플리케이션 실행을 위해 도커 이미지를 만드는 작업을 뜻한다.

⭐️ 도커 이미지 잘 만드는 방법

1️⃣ 베이스 이미지는 사이즈가 작은 것을 선택

  • 보통 alpine 리눅스 도커 이미지로 시작하는 것을 추천한다.(그 이유는 다른 리눅스 배포판과 비교해 사이즈가 훨씬 작기 때문)

2️⃣ 이미지 레이어 개수를 줄이자

  • 도커 레이어 개수를 줄이는 것은 최적화 측면에서 도움이 된다.
  • 레이어는 RUN, ADD, COPY 명령문에서만 생성되기 때문에 아래와 같이 여러 개로 분리된 명령을 체이닝(chaining) 으로 엮으면 된다.

    ℹ️ 3개의 Layer → 1개의 Layer 로 줄일 수 있음

  • 체이닝시 설치 패키지 순서를 알파벳 순서로 정렬하면 가독성도 높고, 중복 설치를 방지할 수 있다.

3️⃣ 애플리케이션 코드를 복사하는 부분은 아래로

  • 애플리케이션 코드 복사 명령(COPY)은 자주 변경되지 않는 명령문 다음에 오는 것이 이미지 빌드 시간 단축에 유리하다.

4️⃣ 프로그래밍 언어마다 패키지 매니저가 제공하는 lock 파일 시스템을 활용

  • 캐시 레이어의 장점을 얻을 수 있고, 예상치 못한 패키지 버전 업데이트도 방지할 수 있다.

To Be Continue..

Docker 실전편 (Docker 명령어, Dockerfile 작성법..)

참고

profile
항상 이유와 과정을 궁금해하는🤔 백엔드 개발자의 기술 블로그 입니다!

0개의 댓글