비전공자도 이해할 수 있는 Docker 입문/실전 (박재성)
🎈 컨테이너의 휘발성
컨테이너에서 사용하는 데이터는 컨테이너 내부에 존재하기 때문에 컨테이너를 삭제하는 경우 데이터까지 모두 제거된다.
📯 볼륨
컨테이너가 제거되더라도 데이터는 보존하여 이후 새롭게 생성된 컨테이너에 복구 또는 기존 데이터를 활용할 수 있게 해주는 것이 볼륨이다. 이를 통해 컨테이너의 영속성을 확보할 수 있다.
1️⃣ 볼륨 생성하기
✅ docker volume create 명령어를 통해서 볼륨을 생성할 수 있다.
docker volume create 볼륨명
볼륨이 생성되는 위치는 다음과 같다.
- 리눅스: /var/lib/docker/volumes/
- Windows: C:\ProgramData\Docker\volumes\
✅ docker run 명령어 실행 시 옵션을 통해 볼륨을 생성할 수 있다.
docker run -v [호스트의 디렉토리 절대경로]:[컨테이너 디렉토리 절대 경로] [이미지명]:[태그명]
- 컨테이너 생성 및 실행과 동시에 볼륨 또한 생성이 되고 컨테이너와 연결해준다.
- docker volume create 시에는 원하는 경로 설정이 불가능하지만, 위 명령어를 통해서 생성할 땐 원하는 경로로 설정이 가능하다.
2️⃣ 볼륨 조회하기
✅ docker volume ls 명령어를 통해 생성된 볼륨을 확인할 수 있다. docker volume create 명령어를 통해서 생성된 볼륨만 확인 가능하다.
docker volume ls
- docker run 시에 생성된 볼륨을 조회가 불가능하다.
3️⃣ 볼륨 연결하기
✅ docker run 명령어 실행 시 옵션을 통해 볼륨을 연결할 수 있다.
docker run -v [호스트의 디렉토리 절대경로|볼륨 이름]:[컨테이너 디렉토리 절대 경로] [이미지명]:[태그명]
- 볼륨 생성하기와 동일한 명령어이다.
- 볼륨이 존재하지 않는 경우 볼륨을 생성해주고, 볼륨이 존재하는 경우에는 기존 볼륨을 연결해준다.
🛒 주의사항
1️⃣ 기존 볼륨이 존재 시 볼륨의 정보로 덮어씌운다.
컨테이너 생성 시 기존에 존재하는 볼륨과 연결한다고 하자. 컨테이너 생성 시 전달한 정보는 저장되지 않고 기존 볼륨에 정보로 덮어씌워진다.
예를 들어 mysql 이미지를 가지고 컨테이너를 생성하려고 한다.
vvvvv라는 볼륨에 mysql 정보를 저장하도록 연결하였다.
docker run -d -e MYSQL_ROOT_PASSWORD=1234 -v vvvvv:/var/lib/mysql mysql
컨테이너에 bash로 접속 후 아래와 같이 mysql에 접속해보았다. 환경변수로 전달한 비밀번호를 입력하면 정상적으로 접속되는 것을 확인할 수 있다.
mysql -u root -p
컨테이너를 삭제한 후 이번에는 비밀번호를 12345로만 변경 동일하게 생성하였다. 그리고 마찬가지로 mysql에 접속 후 이번에 새롭게 전달한 12345로 접속하려고 하면 비밀번호가 일치하지않아 접속이 되지 않는다.
docker run -d -e MYSQL_ROOT_PASSWORD=12345 -v vvvvv:/var/lib/mysql mysql
mysql의 경우 처음 생성 시 전달받은 MYSQL_ROOT_PASSWORD로 root 비밀번호를 생성하게 된다. 하지만 볼륨이 존재하기 때문에 기존 볼륨의 데이터로 덮어씌워져서 새로운 데이터를 사용할 수 없다. 이점에 유의하여 사용하도록 하자.
2️⃣ 호스트 디렉토리에 파일이 존재하는 경우 무조건 덮어씌운다.
컨테이너와 연결하려는 호스트 디렉토리가 이미 존재하는 경우 호스트 디렉토리의 정보로 덮어씌우게 된다. 실제 호스트 디렉토리에 존재하는 파일의 유효한지 여부와는 상관없이 덮어씌우게 된다.
- 새로운 볼륨을 생성할 때는 실제 존재하지 않는 경로로 선택해야한다.
- 기존 볼륨의 데이터로 덮어씌우고 싶으면 유효한 경로로 설정하자.
볼륨으로 사용할 디렉토리를 먼저 만들고, 그 안에 임의로 파일을 생성한 후, 나중에 그 디렉토리를 컨테이너에 연결하면 처음 연결하기 때문에 컨테이너의 데이터를 호스트에 저장해준다고 착각할 수 있다.
✨ 하지만 그렇지 않다. 이미 존재하는 경우 무조건 덮어씌움에 주의하자.
'Docker' 카테고리의 다른 글
[Docker] Dockerfile 만들어보기 (0) | 2025.05.04 |
---|---|
[Docker] 도커 컨테이너, 이미지 CLI (0) | 2025.04.19 |