데이터 지속성을 위해 볼륨 마운트
이 단계에서는 Docker 컨테이너에서 생성되고 사용되는 데이터를 유지하기 위해 Docker 볼륨을 사용하는 방법을 배우게 됩니다. 기본적으로 컨테이너 내부의 데이터는 일시적입니다. 컨테이너가 제거되면 손실됩니다. 볼륨은 컨테이너 파일 시스템 외부에 데이터를 저장하는 방법을 제공하여 컨테이너가 중지되거나 제거된 후에도 데이터를 유지할 수 있도록 합니다.
먼저, 이전 단계에서 my-nginx 컨테이너를 중지하고 제거합니다.
docker stop my-nginx
docker rm my-nginx
이제 Docker 볼륨을 생성합니다. 볼륨은 Docker 에서 관리하며 호스트 머신의 전용 영역에 저장됩니다.
docker volume create my-volume
볼륨 이름 (my-volume) 이 출력되어 생성되었음을 확인해야 합니다.
docker volume ls 명령을 사용하여 기존 볼륨을 나열할 수 있습니다.
docker volume ls
볼륨 목록에 my-volume이 표시되어야 합니다.
이제 새로운 nginx 컨테이너를 실행하고 my-volume을 컨테이너 내부의 기본 Nginx 웹루트 디렉터리인 /usr/share/nginx/html에 마운트합니다. 즉, 컨테이너 내부의 /usr/share/nginx/html에 배치된 모든 파일은 실제로 호스트의 my-volume에 저장됩니다.
컨테이너를 분리 모드 (-d) 로 실행하고, 컨테이너 내부의 포트 80 을 호스트의 포트 8081 에 게시 (-p 8081:80) 하고, 이름을 할당 (my-nginx-volume) 하고, -v 플래그를 사용하여 볼륨을 마운트합니다. 명명된 볼륨을 마운트하는 형식은 volume_name:container_path입니다.
docker run -d --name my-nginx-volume -p 8081:80 -v my-volume:/usr/share/nginx/html nginx
컨테이너 ID 가 출력되어 컨테이너가 실행 중임을 나타냅니다.
이제 마운트된 볼륨에 간단한 HTML 파일을 배치해 보겠습니다. docker exec를 사용하여 실행 중인 컨테이너 내부에서 명령을 실행하여 이 작업을 수행할 수 있습니다. 간단한 내용으로 /usr/share/nginx/html에 index.html이라는 파일을 생성합니다.
docker exec my-nginx-volume sh -c 'echo "<h1>Hello from the volume!</h1>" > /usr/share/nginx/html/index.html'
이 명령은 my-nginx-volume 컨테이너 내부에서 셸 (sh -c) 을 실행하고 echo 명령을 실행하여 index.html 파일을 생성합니다.
이제 호스트의 포트 8081 에서 웹 서버에 액세스하여 방금 생성한 index.html 파일의 내용을 확인해 보겠습니다.
curl http://localhost:8081
출력에 <h1>Hello from the volume!</h1>이 표시되어야 합니다. 이는 컨테이너 내부에서 생성한 파일이 Nginx 에서 제공되고 있으며, 마운트된 볼륨에 기록되었으므로 데이터가 유지됨을 확인합니다.
유지성을 시연하기 위해 my-nginx-volume 컨테이너를 중지하고 제거해 보겠습니다.
docker stop my-nginx-volume
docker rm my-nginx-volume
이제 새로운 컨테이너를 실행하여 동일한 볼륨을 마운트해 보겠습니다. 이 새 컨테이너의 이름을 my-nginx-volume-new로 지정하고 포트 80 을 호스트 포트 8082 에 게시합니다.
docker run -d --name my-nginx-volume-new -p 8082:80 -v my-volume:/usr/share/nginx/html nginx
새 컨테이너가 실행 중이며 동일한 my-volume을 사용하고 있습니다. 포트 8082 에서 웹 서버에 액세스해 보겠습니다.
curl http://localhost:8082
출력에 여전히 <h1>Hello from the volume!</h1>이 표시되어야 합니다. 이는 index.html 파일이 my-volume에 저장되었고, 원래 컨테이너가 제거된 후에도 유지되었기 때문입니다. 새 컨테이너는 동일한 볼륨을 마운트하여 이전에 기록된 데이터에 액세스할 수 있습니다.
이는 컨테이너 수명 주기와 독립적으로 데이터를 유지하기 위한 볼륨의 강력함을 보여줍니다.