먼저 도커 이미지는 read only로 수정이 불가능한 상태이다. 이미지를 docker run으로 실행을 시켜도 여전히 read only 상태의 프로세스이다. 따라서 컨테이너에 추가되는 데이터들은 별도의 read write 레이어에 저장된다.
Union FIle System (= Overlay)
여러 개의 파일 시스템을 하나의 파일 시스템에 마운트하는 기능을 말한다.
여러 파일을을 하나의 파일 시스템으로 합칠때, 중복되는 파일이 존재한다면 UFS에서는 나중에 마운트된 파일로 덮어쓴다.
Docker의 Union FIle System
도커의 컨테이너는 UFS 를 기반으로 동작한다.
컨테이너의 read only layer와 read write layer가 하나인것처럼 보이게 만드는 것을 말한다.
기존 레이어 위에 새로운 레이어가 쌓일 경우 , 하위 레이어(=기존 레이어)는 읽기 전용 상태가 된다.
또한 상위 레이어에서 하위 레이어에 쓰기 작업을 수행할 경우, 하위 레이어를 복사해 사용하기 때문에 상위 레리어에서는 하위 레이어에 아무런 영향을 주지 않는다. 따라서 wirte는 최상위 layer에서만 발생하게 된다.
데이터 보존하기
만약에 mysql db를 운영하다가 컨테이너를 삭제한다면 read write layer에쌓여있던 데이터가 영구적으로 삭제된다.
따라서 데이터를 도커 호스트의 특정 공간에 저장하는 방법을 이용하여 데이터를 영구 보존할 수 있다.
이를 막기 위한 방법은 volume , bind mount로 2가지가 존재한다.
1. 도커 바인드 마운트 (Bind Mount)
도커 호스트에 특정 저장소 공간을 만드는 방법이며 호스트 시스템의 어느 곳에나 저장할 수있다.
#컨테이너 생성 시 -v 옵션을 사용해 바인드 마운트하기
docker run -d --name db -v /dbdata:/var/lib/mysql -e MYSQL_ALLOW_EMPTY_PASSWORD=pass mysql:latest
- -v : [호스트 공유 디렉토리]:[컨테이너 공유 디렉토리]를 통해서 rw 레이어에서 만들어진 데이터가 도커 호스트 공간에 저장된다. 즉 호스트 디렉토리가 컨테이에 마운트 된다.
2. Volume
바인드 마운트보다 좀 더 좁은 범위의 마운트로 , 도커 엔진이 관리하는 도커 스토리지 영역 볼륨을 생성해 데이터를 저장한다.
#도커 볼룸 생성
docker volume create my-vol
#도커 볼륨 확인
docker volume ls
#도커 볼륨 마운트 하기
docker run -d --name db -v my_vol:/var/lib/mysql -e MYSQL_ALLOW_EMPTY_PASSWORD=pass mysql:latest
- -v : [볼륨명]:[컨테이너 공유 디렉토리]를 통해서 볼륨을 마운트한다.
'CS > 서버' 카테고리의 다른 글
도커 컴포즈(Docker Compose) (0) | 2023.05.25 |
---|---|
도커 컨테이너 하드웨어 리소스 제한 관리 - Memory, CPU (0) | 2023.05.23 |
Docker로 mysql 설치 및 접속하기 (0) | 2023.05.23 |
Dockerfile 이용해서 이미지 만들고, 도커 허브에 배포하기 (0) | 2023.05.23 |
AWS - EC2, Elastic Beanstalk, Fargate, ECR, Lambda, ECS (1) | 2023.05.08 |