컨테이너와 이미지

hyHA·2023년 11월 29일
0
post-custom-banner

도커 이미지와 컨테이너의 관계를 살펴보자.
이후 도커 이미지를 내려받아(빌드) 컨테이너로 실행 도커 이미지와 컨테이너를 삭제하는 사이클을 살펴볼 것이다.

이미지 빌드

docker build -t app [경로] 명령어를 실행하면 Dockerfil이라는 명세서를 기반으로 도커 이미지가 빌드된다.

이미지란

  • 컨테이너 생성 지침이 포함된 읽기 전용 템플릿
  • 컨테이너 실행에 필요한 모~든 파일과 설정값 등을 포함한 것.
    • 이미지는 특정 프로세스(프로그램)을 실행하기 위한 모든 파일과 설정값 등을 지닌 것으로 더
      이상의 의존성 파일을 컴파일하거나 설치할 필요가 없다.
  • 이미지만 다운받고 실행하면 하나의 컨테이너가 실행됨
  • 여러 개의 계층으로 된 바이너리 파일로 존재, 컨테이너를 생성하고 실행할 때 읽기 전용으로 사용됩니다.
  • 도커에서 사용하는 이미지의 이름은 [저장소 이름]/[이미지 이름]:[태그] 의 형태로 구성됩니다.
    • 저장소 이름 : 이미지가 저장된 장소를 의미. 저장소 이름이 명시되지 않는 이미지는 도커에서 기본적으로 제공하는 이미지 저장소인 도커 허브의 공식 이미지를 말함. ( 저장소 이름을 명시할 필요는 없으므로 생략하는 경우도 있슴 )
    • 이미지 이름 : 해당 이미지가 어떤 역할을 하는지 나타냄.
    • 태그 : 이미지의 버전 관리 혹은 리비전(revision) 관리에 사용.

이미지 레이어

도커 이미지는 레이어 구조로 되어있는데, Dockerfile 내에 작성되어있는 여러 명령어들이 순차적으로 레이어가 쌓이듯이 저장된다.

도커 컨테이너와 이미지는 레이어 구조를 취하면서 여러 장점을 가지게 된다.
만약, 추후에 이미지에 특정 변경사항을 가할 때, 소스코드 상에 변경이 있었다면 레이어1~3까지는 변경될 필요가 없다. 그러므로, 레이어1~3은 변경하지 않고 레이어4~5가 생성이 된다.

이러한 방식으로 도커 이미지는 이미지의 여러 버전들이 생긴다고 하더라도 저장공간을 차지하지 않는 레이어 구조를 가진다. 💦

이미지를 'Run'하면 컨테이너

이 도커 이미지를 도커 컨테이너로 docker run 명령어로 이미지를 실행하면 컨테이너가 된다.
컨테이너는 이미지를 실행한 상태로 봐도 무방하다.
실행한 컨테이너는 두가지 레이어를 가지게 된다.
첫번째는 이미지 레이어, 두번째는 컨테이너 레이어이다.

  • 이미지 레이어에서 이미지는 항상 동일하고 Read Only(읽기 전용)으로 사용하게 된다. 이 읽기 전용 이미지 레이어는 변경사항을 적용할 수 없다.

  • 컨테이너 레이어에서는 컨테이너 상에서 새로운 파일을 생성할 때 컨테이너 레이어에 파일을 쓰는데, 이 컨테이너 레이어는 Read, Write 권한을 가지고 있다.
    중요한 점은 컨테이너가 종료되면 컨테이너 레이어는 컨테이너 종료 시 함께 삭제가 된다.

SAPMLE

도커 이미지로 컨테이너를 생성하면 이미지는 읽기 전용이 되고 , 컨테이너의 변경 사항이 별도로 각 컨테이너 레이어에 보존된다. 이미 생성된 이미지는 읽기 전용이므로 어떠한 경우에도 변경되지 않고, 컨티에너 레이어에 원래 이미지에서 변경된 파일시스템 등을 저장한다.

이미지에 mysql을 실행하는데 필요한 애플리케이션 파일(mysql:5.7)이 들어있다면, 컨테이너 계층에는 워드프레스에서 쓴 로그인 정보나 게시글 등과 같이 DB를 운용하면서 쌓이는 데이터가 저장된다.

더 알아볼 것 - 볼륨으로 데이터 관리

그러나, 여기에는 치명적인 단점이 존재한다. mysql컨테이너를 삭제하면 컨테이너 계층에 저장되어 있던 데이터베이스의 정보도 삭제된다. 도커의 컨테이너는 생성과 삭제가 매우 쉬우므로 실수로 컨테이너를 삭제하면 데이터를 복구할 수 없다. 이를 방지하기 위해 컨테이너의 데이터를 영속성 데이터로 활용할 수 있는 방법이 몇가지 있다. 그 중 가장 활용하기 쉬운 방법이 볼륨을 활용하는 것이다.

참고
https://www.youtube.com/watch?v=EbTJtanJUfE&list=PLuHgQVnccGMDeMJsGq2O-55Ymtx0IdKWf&index=3
https://seosh817.tistory.com/374
https://tech.ktcloud.com/73

profile
룰루랄라
post-custom-banner

0개의 댓글