오늘 배운 것🤓
Docker Volume
- Docker Container가 실행 중에 중단된다면 데이터는 저장되지 않고 모두 날라간다.
- Docker Container로 실행하는 애플리케이션이 일회성으로 동작하는 것이 아니라 계속 동작해야 한다면(예. DB) 데이터가 영구적으로 보관되어야 한다.
- Data Persistence를 보장하기 위해 Docker Volume을 사용한다.
- Docker Container 내의 가상 파일 시스템과 호스트 시스템의 파일 시스템을 mapping 하는 방식이다.
Volume 종류
- Host Volumes
- 호스트 파일 시스템 경로와 컨테이너 파일 시스템 경로를 페어로 지정한다.
$ docker run -v 호스트경로:컨테이너경로
- Anonymous Volumes
- 컨테이너 경로만 지정하면, 호스트에 임의의 경로를 생성하여 그 안에 저장한다.
- 저장된 위치를 찾아야한다는 번거로움으로 많이 사용하지 않는다.
- docker file을 사용하여 이미지를 생성할 때 사용할 수 있는 방법이다.
$ docke run -v 컨테이너경로
- Named Volumes
- Anonymous Volumes의 문제점을 해결한 방식으로, 현재 가장 많이 선호되는 방식이다.
- 저장되는 path에 별칭을 부여하여 관리한다.
- 하나의 volume을 다수의 container에서 공유할 수 있도록 한다.
- docker-compose를 통해 이미지 생성 시 사용할 수 있다.
$ docker run -v 별칭:컨테이너경로:ro
여기서 :ro
는 읽기 전용(read only)이라는 뜻!
명령어 정리
$ docker volume ls
: Volume의 목록
$ docker volume rm 볼륨이름
: 특정Volume 삭제
$ docker volume prune
: 사용되지 않는 모든 Volume 삭제
$ docker volume inspect 볼륨이름
: 특정 Volume의 자세한 정보
Docker Clean-Up
방식이 2가지 있다. 하나는 CLI방식, 다른 하나는 docker desktop을 사용하는 방식. GUI가 더 간단하고 명료하기 때문에 desktop을 사용하도록 하자.
1. CLI 사용해서 clean-up
$ docker container rm -f $(docker container ls -aq)
$ docker image rm -f $(docker image ls -q)
$ docker ps
$ docker images
2. Docker Desktop 사용
- Trouble Shoot 메뉴 선택(벌레 모양)
-> Clean/Purge data 클릭
또는 Reset to factory defaults 클릭 (이 경우 모든 설정이 초기화 되기 때문에 주의할 것!)
Docker Network
- 다수의 Container로 구성된 소프트웨어끼리 Network를 연결해주기 위해 사용
- 기존에는 docker의
link
옵션을 사용했다.
- 현재는
network
를 하나 만들고 연관된 모든 container를 network
안으로 지정하는 방식을 사용한다.
- 연결 상황에 따라 별개의 네트워크를 만들고 사용하기도 한다. (예. back-tier, front-tier)
$ docker network create 네트워크이름
$ docker run --name=컨테이너이름 --network 네트워크이름 이미지이름
- 여기서 주의!
--name
옵션에는 =이 들어가지만 --network
옵션에는 =이 없다!
느낀 점😊
볼륨과 네트워크는 도커를 사용할 때 필수적으로 사용하는 내용이라고 생각한다! 너무 중요한 핵심 포인트니 다시 한번더 복습 필요!