docker 데이터 활용 - volume 사용하기(2)
이번 포스팅에서는 지난번에 이어 docker container안에서 발생한 데이터를 host에
저장하는 또 다른 방식을 정리해볼까 합니다.
volume
volume을 사용하는 방식은 지난번의 bind mount 방식과 세 가지 차이점이 있습니다.
1. bind mount 방식은 host os에서 본인이 지정한 경로를 사용할 수 있는
반면에 volume 방식은 host os에서 /var/lib/docker/volumes 라는 지정된 경로에 저장됩니다.
(정확하게는 bind mount는 docker에서 지정한 경로와 사용자가 지정하는 임의의 경로 둘다 저장됩니다.
단, docker가 제공하는 경로에는 폴더 이름이 아닌 hash 값이 폴더의 이름이 됩니다.)
2. bind mount 방식은 container를 생성하기 전에 host에서 사용할 경로를 미리 생성해 놓아야 합니다.
반면에 volume 방식은 container를 생성하면서 volume을 지정해 놓으면 host에 docker가 지정한
경로를 만듭니다.
3. bind mount 방식은 docker cli로 컨트롤 할 수 없습니다.
반면에 volume 방식은 docker cli로 컨트롤 할 수 있습니다.
이번 포스팅에서는 docker volume을 미리 생성하여 진행해보도록 하겠습니다.
docker 명령어 방식
1. docker volume 생성
# docker volume 생성(test)
$ docker volume create test
# docker volume 조회
$ docker volume ls
DRIVER VOLUME NAME
local test
2. docker container 생성
# docker container 생성
$ docker run -d -it --name app-server -v test:/test node
# docker container 안에 들어가서 data 생성
$ docker exec -it app-server bash
root@b27a3772fb67:/# ls
bin dev home lib64 mnt proc run srv test usr
boot etc lib media opt root sbin sys tmp var
root@b27a3772fb67:/# cd test
root@b27a3772fb67:/# echo test > app-server
root@b27a3772fb67:/test# ls
app-server
# /var/lib/docker/volumes 경로에서 volume 확인
$ sudo su -
root@ip:~# cd /var/lib/docker/volumes
root@ip:~# ls
metadata.db test
root@ip:~# cd test/_data/
root@ip:~# cat app-server
test
위 시나리오는
1. host에서 volume을 만들고 docker container를 실행합니다.
2. container에서 데이터를 생성합니다.
3. host에서 volume이 관리되는 경로로 들어갑니다. (root 계정으로만 가능)
4. volume 경로에서 데이터를 확인합니다.
docker-compose 방식
1. docker-compose.yaml 파일 생성
# docker-compose.yaml 파일 내용입니다.
# Copyright IBM Corp. All Rights Reserved.
#
# SPDX-License-Identifier: Apache-2.0
#
version: '3.4'
volumes:
test:
services:
mariadb:
container_name: mariadb
image: mariadb:latest
environment:
- CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock
- CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=net
- MYSQL_ROOT_PASSWORD=1234
- MYSQL_USER=test
- MYSQL_PASSWORD=1234
- TZ="Asia/Seoul"
volumes:
- test:/test
2. docker-compose.yaml 파일을 이용해 container 생성
$ docker-compose -f docker-compose.yaml up -d
3. docker container안에 들어가 데이터 생성
# container 안에 진입
$ docker exec -it mariadb bash
# 데이터 생성
root@f86da74eca46:/# cd test
root@f86da74eca46:/test# ls
root@f86da74eca46:/test# echo test > maria
root@f86da74eca46:/test# ls
# host로 이동하여 데이터 확인
$ sudo su -
root@ip:~# cd /var/lib/docker/volumes/
root@ip:~# ls
f48f0a3640f5315e5fc1c93e7028076f462606cf498cf7f5a995f4d92572929b ubuntu_test
metadata.db
root@ip:~# cd ubuntu_test/_data/
root@ip:~# cat maria
test
여기까지 해서 volume을 사용하여 container 내부에서 발생한 데이터를
보존하는 방법을 알아보았습니다.