[도커] 이미지와 컨테이너가 작동하는 방식

김성환·2022년 6월 5일
0

도커

목록 보기
5/10

컨테이너가 생성되는 과정

이미지를 이용해 컨테이너를 생성할 때, copy명령어에 의해 지정된 폴더내의 모든것을 지정된 폴더에 복사하도록 합니다.
이때, 소스코드의 경우 복사한 시점소스코드의 스냅샷을 만듭니다.
즉, 소스코드를 변경하고 해당 소스코드를 포함하는 컨테이너를 실행할 경우 변경된 내용이 해당 컨테이너에 포함되지 않는다.
이를 해결하기 위해서는 새로운 이미지를 다시 빌드하고 그 이미지를 사용해 컨테이너를 생성하면 된다.(다른 방법도 있으나 다음시간에)
결론적으로 이미지의 모든 것은 읽기 전용이다.

스냅샷이란?

특정 시점에 특정 시스템(스토리지 파일시스템,저장장치 상태
)등을 포착해 보관하는 기술을 의미

이미지는 레이어 기반이다.

도커는 이미지를 생성할때 케시를 사용하게 된다. 이를 레이어 기반 아키텍처라고 부른다.
도커파일의 모든 명령(FROM,COPY등등)은 하나의 레이어로 볼 수 있다.(정확하게는 하나의 명령 == 하나의 레이어 는 아니다)
이때, 이러한 레이어는 캐시된다.(케시에 저장된다는 의미)
즉, 다시 실행해야 하는 항목만을 다시 빌드해 이미지 생성 속도를 높이게 된다.
아래는 도커파일의 예시이다.

FROM ubuntu:14.04 // 레이어
MAINTAINER wjdrbs96 // 레이어
RUN apt-get update // 레이어 ...
RUN apt-get install apache2 -y
ADD test.html /var/www/html
WORKDIR /var/www/html
RUN ["/bin/bash", "-c", "echo hello >> test2.html"]
EXPOSE 80
CMD apachectl -DFOREGROUND 

여기서 중요한 건 다시 실행되는 항목이 발견되면 그 이후 모든 레이어들도 모두 다시 실행된다.(변경이 없는 레이어들도)
예를들어 위의 도커파일로 이미지를 생성한 뒤 해당 도커파일의 6번째 명령줄인 WORKDIR를 변경할 경우 6번째 줄(포함) 이후 모든 명령들이 다시 실행되게 된다.
이때문에 레이어 개념으로 최적화가 가능하게 된다.

케시란?

자주 사용하는 데이터나 값을 미리 복사해 놓는 임시장소를 의미
저장장치 구조를 살펴보면 레지스터->케시->메인메모리->ssd/hdd 순의 계층구조를 가진다.
레지스터로 갈 수록 작아지고 비용이 비싸지며 속도가 빠르다.

profile
개발자가 되고 싶다

0개의 댓글