Docker 기초 (8) - 볼륨

3655 단어 devopsdockerdevops

볼륨 이란?

  • 도커에서 데이터 영속성을 보장하기 위한 방법 중 하나!

여러가지 방법들이 있지만 우선 이렇게만 알고 있으면 이해하기 편하다.

도커 레이어 아키텍처

도커는 컨테이너 레이어와 이미지 레이어로 나눠져있는것을 볼 수 있다.

이미지를 빌드하고 이미지 레이어를 보면 5개의 또 다른 레이어로 나눠져 있다.
이미지를 예를 들면
Layer 1: 우분투 베이스
Layer 2: apt 패키지로 필수 프로세스 다운로드
...
Layer 5:
까지 쌓여져 있는 구조이다.

만약에 새로운 이미지가 필요할때 소스코드를 바꿔서 빌드를 하고 싶다면
레이어 1 ~ 3 까지는 유지하고 4부터만 변경해주면 되는 이점을 가질 수 있다.

컨테이너를 실행시킨다면 이미지 레이어는 읽기 전용이므로 변경을 할 수 없다.

볼륨 다루기

호스트 볼륨

  • 가장 간단하고 직관적인 방법

호스트의 디렉토리를 컨테이너의 특정 경로에 마운트한다.

docekr run -d \
--name nginx \
-v /opt/html:/usr/share/nginx/html \
nginx

호스트의 /opt/html 디렉토리를 Nginx의 웹 루트 디렉토리로 마운트

실습

바탕화면에 html 이라는 폴더에 index.html 라는 파일을 생성한다.

<h1>Hello world!</h1>

index.html은 위와 같은 코드가 적혀져 있다.

그리고

docekr run -d \
--name nginx \
-p 80:80 \
-v /$(pwd)/html:/usr/share/nginx/html \
nginx

// $(pwd)는 현재 호스트의 워킹 디렉토리 경로

명령어를 실행!

호스트의 80포트와 컨테이너의 80포트를 연결한 nginx에 -v 명령어 이후의 파일을 컨테이너의 경로로 마운트 한다 라는 뜻의 명령어이다.

그 후

curl localhost

명령어를 통해 리스폰스를 확인하거나

웹 브라우저에 localhost로 접속해보자

잘 된다


볼륨 컨테이너

  • 데이터 온리 컨테이너

특정 컨테이너의 볼륨 마운트를 공유할 수 있다.

docker run -d \
--name my-volume \
-it \
-v /$(pwd)/html:/usr/share/nginx/html \
ubuntu:focal

// my-volume 컨테이너의 볼륨을 공유
docker run -d \
--name nginx \
--volumes-from my-volume \
-p 80:80 \
nginx

--volumes-from 명령어를 사용한다.

위 명령어를 차례로 실행시킨 뒤 docker inspect를 사용해 nginx 컨테이너의 Mounts 정보를 확인하면 데이터의 소스와 목적지가 나와있다
ubuntu 볼륨 컨테이너를 거쳐서 왔지만 Source는 호스트경로가 있다.


도커 볼륨

도커가 제공하는 볼륨 관리 기능을 활용하여 데이터를 보존
기본적으로 /var/lib/docker/volumes/${volume-name}/_data 에 데이터가 저장된다

// db 도커 볼륨 생성
docker volume create --name db

// 도커의 db 볼륨을 nginx의 웹 루트 디렉토리로 마운트
docker run -d \
-e MYSQL_DATABASE=simon \
-e MYSQL_ROOT_PASSWORD=simon \
-v db:/var/lib/mysql \
-p 3306:3306 \
mysql:5.7

mysql 컨테이너를 띄울때 두가지 환경변수를 무조건 지정해줘야 하는데 MYSQL_DATABASE : 최초로 생성될 데이터베이스의 이름
MYSQL_ROOT_PASSWORD: 루트 계정 비밀번호
-e 명령어로 같이 지정해준다.
/var/lib/mysql : mysql이 데이터를 쌓는 경로


읽기전용 볼륨 연결

볼륨 연결 설정에 :ro(read only) 옵션을 통해 읽기 전용 마운트 옵션을 설정할 수 있다.

// 호스트 볼륨을 nginx의 웹 루트 디렉토리로 읽기 전용 마운트
docker run -d \
-v $(pwd)/html:/usr/share/nginx/html:ro \
nginx

도커 컨테이너에 bash로 명령어 상의 경로로 접속후 파일을 생성하려고 시도하면 위와 같은 경고가 뜬다.


좋은 웹페이지 즐겨찾기