소개
이 섹션에서는 볼륨 (volumes) 이라 불리는 Docker 환경의 영구 데이터 저장소 사용법을 다룹니다. 내부 및 외부 볼륨의 차이점과 같은 영구 데이터 저장소의 특성을 배우고, 상황에 맞는 적절한 활용 방법을 익히게 됩니다.
데이터 볼륨 관리
데이터 볼륨은 Docker 에서 데이터를 영구적으로 보존하기 위한 표준적인 방식입니다. 이 섹션에서는 실무에서 데이터 볼륨을 다루는 표준적인 조작법을 실습합니다.
목표
docker 명령어를 사용하여 my-vol이라는 이름의 데이터 볼륨을 생성하고, 해당 볼륨 안에 test.txt 파일을 추가하는 것이 목표입니다.
결과 예시
이 챌린지를 마쳤을 때 다음과 같은 결과가 나타나야 합니다:
my-vol이라는 이름의 데이터 볼륨 생성.
labex:~/ $ docker volume ls
DRIVER VOLUME NAME
local jenkins-data
local minikube
local my-vol
- 데이터 볼륨 상세 정보에서
Mountpoint확인.
[
{
"CreatedAt": "2024-01-20T17:37:33+08:00",
"Driver": "local",
"Labels": {},
"Mountpoint": "/var/lib/docker/volumes/my-vol/_data",
"Name": "my-vol",
"Options": {},
"Scope": "local"
}
]
Mountpoint경로로 이동하여test.txt파일 생성.
root@iZj6cj604ytlr2cacq6vi2Z:/var/lib/docker/volumes/my-vol/_data## pwd
/var/lib/docker/volumes/my-vol/_data
root@iZj6cj604ytlr2cacq6vi2Z:/var/lib/docker/volumes/my-vol/_data## ls
test.txt
요구 사항
이 챌린지를 완료하려면 다음 지식이 필요합니다:
docker명령어를 사용하여 데이터 볼륨을 생성하는 방법.root사용자로 파일을 생성하는 방법.sudo su를 사용하여root사용자로 전환하고,sudo passwd root를 사용하여root비밀번호를 설정하는 방법.
데이터 볼륨을 사용한 컨테이너 생성
이 섹션에서는 Docker 데이터 볼륨을 사용하는 컨테이너를 생성하고 파일을 복사하는 작업을 수행합니다.
목표
nginx-vol이라는 이름의 Docker 볼륨을 생성한 후, nginx라는 이름의 컨테이너를 시작하면서 이 볼륨을 마운트합니다. 마지막으로 /home/labex/project/index.html 파일을 nginx 컨테이너로 복사하는 것이 목표입니다.
결과 예시
이 챌린지를 마쳤을 때 다음과 같은 결과가 나타나야 합니다:
nginx-vol이라는 이름의 데이터 볼륨 생성.
labex:~/ $ docker volume ls
DRIVER VOLUME NAME
local jenkins-data
local minikube
local my-vol
local nginx-vol
- nginx 이미지를 기반으로
nginx컨테이너를 생성하고, 컨테이너의/usr/share/nginx/html디렉토리를nginx-vol데이터 볼륨에 마운트.
labex:~/ $ docker ps | grep nginx
c39296aaf39e nginx "/docker-entrypoint.…" 35 seconds ago Up 31 seconds 80/tcp nginx
/home/labex/project/index.html파일 준비.
labex:/tmp/ $ pwd
/tmp
labex:/tmp/ $ cat index.html
hello world
/home/labex/project/index.html파일을nginx컨테이너 내부로 복사.
labex:/tmp/ $ docker exec nginx cat /usr/share/nginx/html/index.html
hello world
요구 사항
이 챌린지를 완료하려면 다음 지식이 필요합니다:
docker명령어를 사용하여 데이터 볼륨을 생성하는 방법.- 컨테이너를 시작하는 방법.
- 로컬 파일을 컨테이너로 복사하는 방법.
호스트 경로를 사용한 컨테이너 생성
많은 경우 데이터 볼륨 대신 호스트의 네이티브 디렉토리를 직접 사용하여 데이터를 보존하기도 합니다. 이 섹션에서는 호스트 경로 (Host Path) 를 사용하여 컨테이너를 생성해 보겠습니다.
목표
Host Path를 사용하는 컨테이너를 생성하고, /home/labex/project/nginx.txt 파일을 컨테이너 내부로 복사한 뒤, 컨테이너 안의 파일이 호스트 경로의 파일과 동일한지 확인하는 것이 목표입니다.
결과 예시
이 챌린지를 마쳤을 때 다음과 같은 결과가 나타나야 합니다:
/tmp디렉토리 아래에nginx디렉토리 생성.
labex:/tmp/ $ ls | grep nginx
nginx
- nginx 이미지를 기반으로
nginx-host컨테이너를 시작하고, 호스트의/tmp/nginx디렉토리를 컨테이너의/usr/share/nginx/html디렉토리에 마운트.
labex:/tmp/ $ docker ps | grep nginx-host
6fc2d40e12df nginx "/docker-entrypoint.…" 44 seconds ago Up 43 seconds 80/tcp nginx-host
docker inspect명령어로 구체적인 마운트 상세 정보 확인.
"Mounts": [
{
"Type": "bind",
"Source": "/tmp/nginx",
"Destination": "/usr/share/nginx/html",
"Mode": "",
"RW": true,
"Propagation": "rprivate"
}
],
/home/labex/project/nginx.txt파일 준비.
labex:/tmp/ $ pwd
/tmp
labex:/tmp/ $ cat nginx.txt
hello nginx
/home/labex/project/nginx.txt파일을nginx-host컨테이너의/usr/share/nginx/html디렉토리로 복사.
labex:nginx/ $ docker exec nginx-host cat /usr/share/nginx/html/nginx.txt
hello nginx
- 로컬 머신의
/tmp/nginx디렉토리에nginx.txt파일이 존재하는지 확인.
labex:nginx/ $ pwd
/tmp/nginx
labex:nginx/ $ cat nginx.txt
hello nginx
요구 사항
이 챌린지를 완료하려면 다음 지식이 필요합니다:
- 사용하려는
Host Path경로를 파악하는 방법. - 컨테이너 내부에서 관련 명령어를 사용하여 호스트 디렉토리나 파일에 접근 가능한지 확인하는 방법.
- 호스트 경로를 사용하여 컨테이너를 시작하는 방법.
cd,mkdir,touch등 기본적인 Linux 명령어 숙지.
컨테이너 간 데이터 공유
컨테이너화된 환경에서는 한 컨테이너의 데이터를 다른 컨테이너와 공유해야 할 때가 있습니다. 데이터 공유를 위해 다양한 기술을 사용할 수 있으며, 이번 챌린지에서는 컨테이너 간에 데이터를 공유하는 방법을 탐구합니다.
목표
두 컨테이너 간의 데이터 공유를 구현하는 것이 목표입니다. 구체적으로, Host Path를 사용하여 컨테이너 A를 시작한 다음, 또 다른 컨테이너 B를 시작할 때 A 의 저장 볼륨을 마운트하여 최종적으로 두 컨테이너가 데이터를 공유하도록 설정합니다.
결과 예시
이 챌린지를 마쳤을 때 다음과 같은 결과가 나타나야 합니다:
- 로컬 호스트에
/tmp/share디렉토리 생성.
labex:/tmp/ $ ls -ld /tmp/share
drwxr-xr-x 2 labex labex 4096 Jan 20 18:20 /tmp/share
- nginx 이미지를 기반으로
nginx-share컨테이너를 생성하고, 로컬의/tmp/share디렉토리를 컨테이너의/usr/share/nginx/html디렉토리에 마운트.
labex:/tmp/ $ docker ps | grep nginx-share
216d02d94f39 nginx "/docker-entrypoint.…" 55 seconds ago Up 55 seconds 80/tcp nginx-share
- busybox 이미지를 기반으로
busybox-share컨테이너를 생성하고,nginx-share컨테이너의 볼륨을 상속받아 마운트.
labex:/tmp/ $ docker ps | grep busy
30bf04aee681 busybox "sh" 43 seconds ago Up 42 seconds busybox-share
/home/labex/project/share.txt파일 준비.
labex:/tmp/ $ pwd
/tmp
labex:/tmp/ $ cat share.txt
hello share
/home/labex/project/share.txt파일을nginx-share컨테이너로 복사.
labex:/tmp/ $ docker exec nginx-share cat /usr/share/nginx/html/share.txt
hello share
busybox-share컨테이너로 이동하여share.txt파일이 존재하는지 확인.
labex:/tmp/ $ docker exec busybox-share cat /usr/share/nginx/html/share.txt
hello share
요구 사항
이 챌린지를 완료하려면 다음 지식이 필요합니다:
- Docker 컨테이너의 기본 조작 및 개념 숙지.
- Docker 명령줄 도구를 사용하여 컨테이너를 생성, 실행 및 중지하는 방법.
- 데이터 볼륨의 개념과 사용법 이해.
- 컨테이너에 데이터 볼륨을 마운트하는 방법 이해.
cd,mkdir,touch등 기본적인 Linux 명령어 숙지.
요약
챌린지를 성공적으로 완료하신 것을 축하드립니다! 이제 컨테이너에서 저장소 볼륨을 능숙하게 다룰 수 있게 되셨으니, 다음 단계로 나아가 보세요.



