이전에 docker로 Laravel 개발 환경을 구축하는 포스트 3편에서 '개발 중에 컨테이너를 파기해도 DB 데이터를 영속화하는 방법'을 다뤘었다.
그때 "이 방식은 개발 환경에서는 자주 쓰이나, 프로덕션 환경에서는 도커가 관리하는 named volume을 더 권장한다. 이에 대한 내용은 기회가 되면 추후에 포스팅하거나 내용을 추가하겠다."라고 했었는데, 지금 그 내용을 정리하려고 한다.
이전 포스트
docker로 Laravel 개발 환경 구축 3편 (MariaDB 컨테이너 생성)
docker-compose.yml 파일 수정 (코드 추가)
docker-compose.yml
version: '3.8'
volumes: #여기를 추가한다.
db-data:
services:
# php Service
app:
#생략
environment:
- DB_CONNECTION=mysql
- DB_HOST=db
- DB_PORT=3306
- DB_DATABASE=${DB_NAME}
- DB_USERNAME=${DB_USER}
- DB_PASSWORD=${DB_PASSWORD}
# NGiNX Service
web:
#생략
# MariaDB Service
db:
build:
context: .
dockerfile: ./docker/mariadb/Dockerfile
ports:
- ${DB_PORT}:3306
environment:
MYSQL_DATABASE: ${DB_NAME}
MYSQL_USER: ${DB_USER}
MYSQL_PASSWORD: ${DB_PASSWORD}
MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD}
TZ: 'Asia/Seoul'
volumes:
- db-data:/var/lib/mysql #여기를 Named Volume 방식으로 변경한다.
위에 링크한 이전 포스트에서 보여준 docker-compose.yml 파일에서 바뀐 부분에만 주석을 넣었다.
Named Volume을 사용하려면, docker-compose.yml 파일의 최상위 레벨에 volumes: db-data:를 선언하고, db 서비스의 volumes 설정도 Named Volume 방식으로 변경해야 한다.
db 서비스의 volumes 설정은 이전의 Bind Mount 방식과 비교했을 때, ./를 삭제한 것 밖에 없다.
Named Volume의 장점
Named Volume을 사용할 경우, Bind Mount 방식처럼 최상위 디렉터리에 db-data라는 디렉터리가 생성되지 않는다.
docker가 관리하는 Named Volume은 호스트 파일 시스템의 특정 내부 경로에 저장되며, 이 경로는 도커 엔진이 관리한다.
사용자가 직접 이 경로에 접근하거나 조작할 필요가 없다.
이렇게 데이터 폴더가 생기지 않아 개발 환경의 프로젝트 디렉터리가 깔끔하게 유지되는 이점이 있다.
Named Volume을 삭제하는 방법
Named Volume을 사용하는 프로젝트가 실습을 위한 프로젝트일 경우, 나중에는 DB의 데이터를 깔끔하게 삭제하고 싶을 수도 있다.
docker-compose 명령어로 개발 환경을 깨끗하게 정리할 수 있다.
docker-compose down -v
docker-compose down은 해당 docker-compose.yml 파일에 정의된 컨테이너와 네트워크를 중지하고 제거하는 명령어다.
하지만 이 명령어로는 Named Volume(db-data 등)을 함께 삭제하지 않는다. (덕분에 docker 컨테이너를 다 지우고 새로 생성해도 DB의 데이터는 남아있을 수 있었던 것)
docker가 관리하는 Named Volume을 포함하여 프로젝트 관련 모든 것을 삭제하려면, 단순히 컨테이너만 내리는 것이 아니라 볼륨 삭제 옵션(-v)을 반드시 추가해야 한다.
특정 볼륨을 삭제하는 방법
실습 중이던 프로젝트를 삭제할 때, 프로젝트와 관련된 모든 파일을 제거해 버렸는데 Named Volume만 깜빡하고 제거하지 않는 경우도 생길 수 있다.
그런 경우에는 다음과 같이 삭제할 수 있다.
docker volume ls
볼륨을 확인하는 명령어다.
docker volume rm [볼륨 이름]
이렇게 삭제하면 된다.
이런 식으로 이젠 필요 없는 Named Volume들을 삭제할 수 있다.
응원이나 피드백이 담긴 댓글은 제가 계속 블로그를 해나갈 수 있는 원동력이 됩니다. 😊
지인에게 보여주고 싶은 글이었다면 URL을 복사해서 메신저나 소셜 미디어에 공유해 주세요.

0 Comments
댓글 쓰기
🔸 댓글은 블로그 운영자의 승인 후에 블로그에 표시됩니다.
🔸 비로그인 방문자 분께서는 '익명'보다 이름/URL로 댓글을 남겨주시면 감사하겠습니다. (URL은 생략 가능합니다.)
🔸 구글 로그인 방문자는 '알림 사용'에 체크를 하시면, 남겨주신 댓글에 대한 답글 알림을 메일로 받아볼 수 있습니다. 📩