# 1. 볼륨 생성
docker volume create datavol
# 2. 볼륨 리스트 확인
docker volume ls
# 3. Alpine 컨테이너에서 볼륨 사용
docker container run -ti --rm -v datavol:/data alpine
# 4. 컨테이너 내부에서 파일 생성
echo "볼륨 데모" > /data/demo.txt
exit
# 5. 볼륨 데이터 확인
docker container run --rm -v datavol:/data ubuntu cat /data/demo.txt
# 6. 호스트 머신에서 디렉토리 구조 확인
sudo apt update; sudo apt install -y tree
sudo tree -a /var/lib/docker/volumes/datavol
볼륨 정보 확인
docker volume inspect datavol
2. 암시적 볼륨 마운트 실습
예제 코드
# 1. MySQL 컨테이너 실행
docker run -d --name mysqltest -v /var/lib/mysql mysql:latest
# 2. 컨테이너 정보 확인
docker inspect mysqltest | jq .[].Mounts
# 3. 볼륨 리스트 확인
docker volume ls
3. Bind Mount 실습
디렉토리 마운트
# 1. 호스트 머신에서 디렉토리 생성
cd ~
mkdir test-app
cd test-app
touch run.sh
chmod +x ./run.sh
# 2. Bind Mount 컨테이너 실행
docker run -ti --rm -v .:/app alpine
# 3. 컨테이너 내부에서 파일 확인
cd /app
ls -ahlvF
Read-Only 및 Read-Write 마운트
# 1. Read-Only 및 Read-Write 디렉토리 생성
mkdir ~/readonly
mkdir ~/readwrite
# 2. 컨테이너 실행
docker run -ti \
-v ~/readonly:/readonly:ro \
-v ~/readwrite:/readwrite:rw \
ubuntu
# 3. 컨테이너 내부에서 파일 쓰기 테스트
echo "test" > /readonly/readonly.txt # 파일 쓰기 불가
echo "test" > /readwrite/readwrite.txt # 파일 쓰기 가능
exit
# 4. 호스트 머신에서 파일 확인
cat ~/readwrite/readwrite.txt
# 1. 컨테이너 내부에서 MySQL 접속
docker exec -ti mysqltest /bin/bash
mysql -h localhost -u root -p
# 2. MySQL 명령 실행
show databases;
use mysqltest;
create table mysqltest(id int, name varchar(50));
insert into mysqltest values(1, 'testname');
select * from mysqltest;
# 3. 데이터 확인 후 종료
exit
데이터 파일 확인
# 1. 컨테이너 내부 데이터 확인
ls -ahlvF /var/lib/mysql/mysqltest
# 2. 호스트 머신에서 데이터 확인
ls -ahlvF ~/mysqldata/mysqltest
다른 컨테이너에서 동일 데이터 사용
# 1. 기존 컨테이너 중지
docker stop mysqltest
# 2. 새 컨테이너 실행
docker run -ti --rm -d \
--name mysqltest2 \
-e MYSQL_ROOT_PASSWORD=123! \
-e MYSQL_DATABASE=mysqltest \
-v ~/mysqldata:/var/lib/mysql \
mysql:latest
# 3. 새 컨테이너에서 데이터 확인
docker exec -ti mysqltest2 /bin/sh
mysql -h localhost -u root -p
use mysqltest;
select * from mysqltest;