실습) 컨테이너 저장소 만들기

이정훈·2024년 8월 20일

Docker

목록 보기
30/34

컨테이너는 stateless입니다.
즉, 컨테이너에 데이터를 저장한다 하여도 컨테이너가 삭제되고 다시 만들어지면 컨테이너에 저장된 데이터는 사라집니다.
이를 확인해보겠습니다.
ubuntu:22.04 이미지로 컨테이너를 실행하겠습니다.

docker run -it --rm ubuntu:22.04

데이터를 저장하고 바로 컨테이너를 삭제할 것이기 때문에 --rm 옵션을 사용하였습니다.
이제 컨테이너에 데이터를 저장해 봅시다.
먼저 mkdir를 통해 my-data폴더를 만듭시다.

mkdir my-data

그리고 my-data 폴더에 아무 텍스트 문서를 만듭시다.

echo 'hellowolrd!' > /my-data/helloworld.txt

참고로 echo는 우분투에서 지정된 문자열을 출력하는 명령어입니다.
그리고 '>'는 리다이렉션 연산자로 출력 리다이렉션에 사용됩니다.
즉, '>'는 echo를 통해 출력하는 문자열을 특정 파일로 보냅니다.
위 명령어는 'helloworld!'를 my-data폴더의 helloworld.txt.파일에 출력하는 것입니다.

이제 파일이 생성되었는지 확인해 봅시다.
dir 명령어와 cd 명령어를 이용하면 됩니다.
dir은 현재 디렉터리 내의 모든 폴더와 파일을 보는 것이고
cd는 특정 폴더로 이동하는 명령어입니다.

만약 텍스트 파일을 읽고 싶으시다면 cat 명령어를 이용하십시오.

이제 컨테이너를 나가 봅시다.

exit

이제 새로운 컨테이너를 실행시켜 봅시다.

docker run -it --rm ubuntu:22.04

그리고 우리가 이전에 컨테이너에서 만들었던 폴더가 존재하는지 확인해봅시다.

dir

없습니다. 어쩌면 우리가 폴더를 못 찾은 것일 수도 있지요 그러니 파일을 출력해봅시다.

cat /my-data/helloworld.txt


없다고 나옵니다. 컨테이너는 상태를 저장하지 않는 것입니다.

그럼 어떻게 컨테이너에 데이터를 저장하고 싶다면 어떻게 해야 할까요?
docker 에서는 volume이라는 것을 지원합니다.
이 volume은 docker과 관리하는 저장공간입니다.
volume은 직접 삭제하지 않는 이상 영구적이죠.
이 volume을 컨테이너와 연동하면 됩니다.
이 방법을 아래에서 알아보겠습니다.

먼저 docker에서 volume를 만들어 봅시다.
docker volume create 명령어를 통해 만들 수 있습니다.

docker volume create myVolume

정상적으로 만들어졌는지 확인해 봅시다.
docker volume ls로 볼륨들의 리스트를 가져옵니다.

docker volume ls

이제 컨테이너를 실행하면서 해당 volume을 같이 탑재하면 됩니다.
--mount 옵션을 통해 볼륨을 컨테이너에 할당하면 됩니다.

docker run -it --rm --mount source=my-volume,target=/my-data ubuntu:22.04

위에서 source는 컨테이너에 할당할 볼륨을 넣어주면 되고 target은 컨테이너 볼륨을 위치시킬 곳을 넣어주면 됩니다.
위 명령어는 ubuntu:22.04를 컨테이너로 실행하는데 my-volume 볼륨을 컨테이너에 할당하고 있으며 해당 볼륨이 연동되어 위치하는 곳은 컨테이너의 /my-data 폴더입니다.

이제 앞서 한 것처럼 my-data폴더에 텍스트 파일을 만들어 봅시다.

그리고 컨테이너를 나가줍니다.

exit

이제 다시 컨테이너를 실행합시다. 똑같이 볼륨을 할당해줘야 합니다. 볼륨에 영구적인 데이터가 저장되기 때문입니다.

docker run -it --rm --mount source=my-volume,target=/my-data ubuntu:22.04

이제 작성한 텍스트 문서가 현 컨테이너에도 존재하는지 확인해 봅시다.

위와 같이 볼륨에 저장된 데이터는 영구적인 것을 확인할 수 있습니다.

참고로 volume은 docker가 Linux를 기반으로 관리하는 스토리지입니다.
그리고 volume은 데이터베이스를 컨테이너로 실행하고 데이터베이스의 데이터를 영구적으로 저장하기 위해 사용되는 경우가 많습니다.

위와 같이 volume을 만드는 방법이 아닌 로컬 시스템의 폴더를 컨테이너에 할당하는 방법도 있습니다.
--mount 옵션에서 type=bind 옵션을 넣으면 바인드 마운트라고 해서 로컬 폴더를 컨테이너 폴더에 연동시킬 수 있습니다.

docker run -it --rm --mount type=bind,source="%cd%/my-data",target=/my-data ubuntu:22.04

위에서 %cd%는 window에서 현재 디렉터리 위치를 가리킵니다.
위에서 volume을 마운트 했던것처럼 파일을 만들고 컨테이너를 나간뒤 새로운 컨테이너에서 데이터가 영구적으로 저장되었는지 확인해봅시다.

잘 되는 것을 확인할 수 있습니다.

로컬에서도 저장된 데이터를 볼 수 있습니다.

profile
기록으로 흔적을 남깁니다.

0개의 댓글