2024.09.16 - [DevOps/Docker] - [DOCKER] Docker 명령어 총정리
이전 포스팅에서 Docker에서 컨테이너를 관리하기 위한 명령어를 살펴봤다.
컨테이너 데이터 보존
- Image Layer (Read Only Layer)
- Container Layer(가변)
이 두 가지로 구분되는 Docker의 특성상 컨테이너를 삭제한다면 이때까지 작업했던 내용은 반영되지 않고, 영구 삭제 된다.
- 그렇다면 이러한 컨테이너를 영구 보존하려면 어떻게 해야 할까?
- 여러 개의 컨테이너가 데이터를 공유할 수 없나?
volume mount
- v [호스트 경로]:[컨테이너 마운트 경로]
- v [호스트 경로]:[컨테이너 마운트 경로]:[읽기 모드]
볼륨 마운트를 통해 영구 보존 및 공유가 가능하다.
직접 EC2에 접속해서 Docker로 접속해보자.
ssh -i [pem 키 파일] [사용자이름]@[Public IP 주소]
이전 포스팅에서 실험했던 nginx 컨테이너의 index.html 파일을 'docker cp' 명령어로 변경 하고, curl 명령어로 응답을 확인 했던 내용은, 컨테이너를 삭제하고 나면 다시 원래 상태로 돌아온다.
- HOST에 컨테이너가 공유하는 영구적인 데이터 만들기 (관리자 권한이 필요함)
- 컨테이너 실행 (Read/Write 레이어 생성) -> 볼륨 마운트
docker run --name web -d -v /webdata:/usr/share/nginx/html:ro nginx
> 읽기전용으로 마운트 시켜줌
> 성공
- 컨테이너 삭제 이후 재실행
> 항상 호스트의 동일 디렉터리에서 데이터를 마운트하므로, 변하지 않는다.
- 호스트의 디렉터리를 이용해서 다양한 컨테이너에서 사용 할 수 있다.
MySQL 컨테이너에서 만들어진 DB를 영구 보존
위 개념과 정반대로 컨테이너 내부의 폴더를 호스트 디렉터리로 마운트 시켜야한다.
docker run --name db -d -v dbdata:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=pass mysql:8
> :ro (read only)가 빠져있다. (역으로 마운트 하기 위해)
> docker가 관리하는 voulmes 디렉터리는 위 MySQL 실행 명령어에서 호스트의 디렉터리에 "/"를 붙이지 않으면 자동으로 volumes 디렉터리에서 관리하게 된다.
> 위 명령어를 실행하면 /volumes/dbdata 라는 디렉터리가 생성된다.
docker inspect db
> 볼륨 마운트에 대한 정보가 있다.
> "RW (Read/Write)" 가 가능하므로, 컨테이너 내부에서의 데이터와 호스트의 데이터 모두 동기화 된다.
> 컨테이너를 삭제한 이후에도 MySQL 컨테이너 내부의 데이터의 보존 확인
> 이후 MySQL을 볼륨 마운트로 다시 실행 시키면 데이터는 안정적으로 남아있다!
영구보존된 데이터 삭제
docker volume --help
> 볼륨 관리에 대해서 위와 같은 명령어로 볼륨 조작 명령어를 확인 할 수 있다.
- docker volume ls : 볼륨들 전부 보여줌
- docker volume prune : 사용하지 않는 모든 로컬 볼륨 삭제
- docker volume rm : 특정 볼륨 삭제
'DevOps > Docker' 카테고리의 다른 글
[DOCKER] Docker 명령어 총정리 (2) | 2024.09.16 |
---|---|
[DOCKER] Docker 아키텍처 (0) | 2024.09.15 |
[DOCKER] 도커 설치 및 컨테이너 개념과 동작 원리 (2) | 2024.09.15 |