도커 레이어 아키텍처
1. Image Layers
docker build -t app [경로] -> docker file을 기반으로 도커 이미지가 빌드됨
이미지를 분석해보면 레이어 구조로 되어있음
Docker file 내에 작성되어 있는 여러 명령어들이 순차적으로 layer가 쌓이듯이 저장됨
= 도커 컨테이너 이미지의 경우 layer 구조를 가짐
장점 : 이미지에 특정 변경이 필요할 경우, 변경할 layer 부분만 변경하여 업데이트 하면 됨
2. Container Layers
docker run app -> 컨테이너가 실행됨
컨테이너의 경우 두가지의 레이어를 가짐
1) Image Layer : 이미지를 불러들여 사용하는것이기 때문엔 항상 동일. 읽기전용으로 사용되기 때문에 변경 불가능
2) Container Layer : 컨테이너 상에서 새로운 파일을 작성할때 Container Layer에 저장. 읽고 쓰기 가능. Container Layer의 경우 컨테이너 종료 시 삭제됨. 임시데이터저장소라고 생각하면 됨
[컨테이너 상에서 볼륨을 영구적으로 사용할 수 있는 방법]
1. 호스트 볼륨
: 호스트의 디렉토리를 컨테이너의 특정 경로에 마운트한다.
ex) 호스트의 /opt/html 디렉토리를 Nginx의 웹 루트 디렉토리로 마운트
# docker run -d \
--name nginx \
-v /opt/html:/usr/share/nginx/html \
nginx
==> Host의 /opt/html 경로와 컨테이너의 /usr/share/nginx/html 경로를 서로 공유한다.
==> 결국 Host 디렉토리에 있는 데이터는 삭제되지 않기 때문에 컨테이너를 삭제 후 재기동하여도 영구적으로 데이터를 보관할 수 있다.
2. 볼륨 컨테이너
: 특정 컨테이너의 볼륨 마운트를 공유할 수 있다.
Data-only Container = 볼륨 컨테이너
볼륨을 특정 어플리컨테이너에서 마운트 시키는것이 아닌, 볼륨컨테이너에서 볼륨 마운트만 진행하고, 아무것도 하지 않은 컨테이너를 만들어둠
그 상태에서 어플리케이션 컨테이너는 Data-only Container를 참조하여 해당 컨테이너를 볼륨 컨테이너 같이 사용함
Data-only Container의 마운트 목록을 해당 어플리케이션 컨테이너가 공유 받을 수 있음.
# docker run -d \
--name my-volume \
-it \
-v /opt/html:/usr/share/nginx/html \
ubuntu:focal
my -volume 컨테이너의 볼륨을 공유 ( --volumes-from 옵션 사용)
# docker run -d \
--name nginx \
--volumes-from my-volume \
-p 80:80 \
nginx
3. 도커 볼륨
: 도커가 제공하는 볼륨 관리 기능을 활용하여 데이터를 보존한다.
생성된 볼륨은 도커가 관리하는 특정 호스트 경로에 데이터가 저장되는데, 기본적으로 /var/lib/docker/volumes/${volume-name}/_data 에 데이터가 저장된다.
'db'라는 이름으로 도커 볼륨 생성
# docker volume create --name db
볼륨 목록 확인
# docker volume ls
docker run 명령어로 mysql 실행
# docker run -d \
--name fastcampus-mysql \ 컨테이너 이름은 fastcampus
-e MYSQL_DATABASE=fastcampus \ 최초로 생성될 데이터베이스의 이름 지정
-e MYSQL_ROOT_PASSWORD=fastcampus \ mysql root 패스워드 입력
-v db : /var/lib/mysql \ 호스트 경로 대신 'db' 볼륨 이름을 작성하여 도커 볼륨 사용
-p 3306:3306 \
mysql:5.7
읽기전용 볼륨 연결
볼륨 연결 설정에 :ro 옵션을 통해 읽기 전용 마운트 옵션을 설정할 수 있다.
보통 읽기 전용 마운트는 변경이 되면 안되는 디렉토리나 파일을 연결할때 해당 옵션을 사용하여 마운트를 진행한다.
도커의 web-volume 볼륨을 Nginx의 웹루트 디렉토리로 읽기 전용 마운트
# docker run -d \
--name nginx
-v web-volume:/usr/share/nginx/html:ro \
-p 80:80 \
--name ro-nginx
nginx
'Docker' 카테고리의 다른 글
[Docker] 도커 이미지 다루기 : 이미지 빌드 (0) | 2023.09.22 |
---|---|
[Docker] 도커 컨테이너 다루기 : 로그 (0) | 2023.09.22 |
[Docker] 도커 컨테이너 다루기 : 네트워크 (0) | 2023.09.20 |
[Docker] 도커 컨테이너 다루기 : 환경변수 및 exec 명령어 사용법 (0) | 2023.09.19 |
[Docker] 도커 컨테이너 다루기 : 엔트리포인트와 커맨드 (0) | 2023.09.19 |