docker build -t app . 과 같이 현재 경로를 바탕으로 이미지를 빌드하게 되면
Dockerfile 명세를 기반으로 도커 이미지가 빌드된다
해당 이미지를 확인해보면 이미지 레이어와 같이 여러 레이어로 분리가 되어있다
여러 명령어들이 순차적으로 레이어가 쌓이듯 저장되는 방식이다
도커 컨테이너의 이미지의 경우 이런 레이어 구조를 적용함으로써
추후 이미지에 Layer 4 에 해당하는 소스코드 변경이 있다 하더라도
Layer 1~3 까지는 변경되지 않고 Layer 3 으로부터 별도 브랜치가 생성되어
새로운 소스코드가 업로드 되는 방식이다
호스트 볼륨
컨테이너 상에서 볼륨을 영구적으로 사용하는 방법 1 : 호스트 볼륨을 이용
호스트의 디렉토리를 컨테이너의 특정 경로에 마운트하는 방식
예시에서는 호스트의 /opt/html 디렉토리를 Nginx 의 웹 루트 디렉토리로 마운트 한다
#!/usr/bin/env sh
docker run \
-d \
-v $(pwd)/html:/usr/share/nginx/html \
-p 80:80 \
nginx
호스트 볼륨 기능을 사용할 경우 -v 옵션을 사용하여 마운트 할 수 있음
따라서 위 예시에서는 현재 경로(pwd)의 html 경로에 컨테이너의 /usr/share/nginx/html 경로를 마운트하게 된다
root@mobius-pub:~/docker/volume/fastcampus-devops/3-docker-kubernetes/2-docker-volume# cat html/index.html
<h1>Hello fastcampus!!</h1>
root@mobius-pub:~/docker/volume/fastcampus-devops/3-docker-kubernetes/2-docker-volume# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3ad5bf9ede58 nginx "/docker-entrypoint.…" About a minute ago Up About a minute 0.0.0.0:80->80/tcp angry_goldwasser
23dde9c5b54d ubuntu:focal "bash" 12 minutes ago Up 12 minutes heuristic_hellman
root@mobius-pub:~/docker/volume/fastcampus-devops/3-docker-kubernetes/2-docker-volume# docker exec -it 3a bash
root@3ad5bf9ede58:/# cat /usr/share/nginx/html/index.html
<h1>Hello fastcampus!!</h1>
root@3ad5bf9ede58:/#
호스트의 현재 경로(pwd) 의 html/index.html 파일이 컨테이너상 맵핑된 /usr/share/nginx/html/index.html 에도 존재하는 것을 확인할 수 있다
해당 컨테이너(nginx) 에 직접 들어가보면 현재 경로가 마운트 되어있는걸 확인할 수 있음
도커 볼륨
도커가 제공하는 볼륨 관리 기능을 활용하여 볼륨을 생성, 삭제 등으로 데이터를 보존한다
기본적으로 /var/lib/docker/volumes/${volume-name}/_data 에 데이터가 저장된다
# db 라는 이름의 도커 볼륨 생성
docker volume create --name db
# 볼륨 목록 확인
docker volume ls
# 도커의 db 볼륨을 MySQL 의 /var/lib/mysql 디렉토리(MySQL 이 데이터를 쌓는 경로)로 마운트
docker run \
-d \
--name fastcampus-mysql \
-e MYSQL_DATABASE=fastcampus \
-e MYSQL_ROOT_PASSWORD=fastcampus \
-v db:/var/lib/mysql \
-p 3306:3306 \
mysql:5.7
#!/usr/bin/env sh
# 현재 경로의 html 디렉토리를 Nginx의 웹 루트 디렉토리로 읽기 전용 마운트
docker run \
-d \
-v $(pwd)/html:/usr/share/nginx/html:ro \
-p 80:80 \
--name ro-nginx \
nginx
07. 도커 컨테이너 다루기 - 볼륨
도커 레이어 아키텍처
docker run app
과 같이 실행시켜 도커 컨테이너가 되는데docker build -t app .
과 같이 현재 경로를 바탕으로 이미지를 빌드하게 되면호스트 볼륨
/opt/html
디렉토리를 Nginx 의 웹 루트 디렉토리로 마운트 한다-v
옵션을 사용하여 마운트 할 수 있음/usr/share/nginx/html
경로를 마운트하게 된다/usr/share/nginx/html/index.html
에도 존재하는 것을 확인할 수 있다볼륨 컨테이너
--volumes-from ${VOLUME_NAME}
옵션으로 my-volume 컨테이너의 볼륨을 마운트하여 사용하는 방식inspect
로 해당 컨테이너를 조회해보면 Mounts 에 source, destination 으로 볼륨 컨테이너의 마운트 내용이 들어가있는 것을 확인할 수 있다도커 볼륨
/var/lib/docker/volumes/${volume-name}/_data
에 데이터가 저장된다inspect
로 마운트 포인트 확인이 가능하다읽기 전용 볼륨 연결
변경이 되어서는 안되는 디렉토리나, 파일을 마운트 할 때 사용
docker exec ro-nginx touch /usr/share/nginx/html/hello