오늘은 Docker Volume과 Network에 대해 학습하였다.
Docker Volume은 이전에 사용한 적이 있어서 알고 있었는데, Docker Volume의 타입과 Docker Network는 이번에 처음 알게되어 정리해본다.
Docker Volume이란?
호스트 파일 시스템 폴더를 Docker Container 파일 시스템의 폴더로 마운트하는 것
쉽게 말해, Docker Container내의 가상 파일 시스템과 호스트 시스템의 파일 시스템을 맵핑하는 것이다 (특정 폴더를 공유하는 것)
이는 컨테이너가 중지되거나 삭제되어도, 데이터가 영구적으로 보관되고 재사용될 수 있도록 한다.
#️⃣ 1) Docker Volume 타입
Docker Volume에도 지정하는 방식에 따라 타입이 나뉜다.
만약 Volume을 Readonly로 지정한다면 뒤에 :ro를 붙이면 된다.
ex. name:/var/lib/mysql/data:ro
1. Host Volumes
docker run -v 명령어로 마운트할 호스트와 컨테이너의 파일시스템을 페어로 지정함
docker run -v /host/hyemin/project/airlfow/logs:/var/lib/airflow/logs
2. Anonymous Volumes
docker run -v를 실행할 때 컨테이너 패스만 지정함
docker run -v /var/lib/airflow/logs
3. Named Volumes
가장 선호되는 방식으로, docker run -v를 실행할 때 이름과 컨테이너 패스를 지정함
하나의 Volume을 다수의 컨테이너에서 공유하는 것도 가능하며, docker-compose에서도 사용한다.
docker run -v name:/var/lib/airflow/logs
#️⃣ 2) Docker Volume 관련 명령들
1. docker volum ls : Docker의 모든 volumes 조회
docker volume ls [OPTIONS]
https://docs.docker.com/engine/reference/commandline/volume_ls/
2. docker volum rm : 1개 이상의 volume 삭제
docker volume rm [OPTIONS] VOLUME [VOLUME...]
https://docs.docker.com/engine/reference/commandline/volume_rm/
3. docker volume prune : 도커 컨테이너에서 사용하지 않는 모든 docker volume 삭제
docker volume prune [OPTIONS]
https://docs.docker.com/engine/reference/commandline/volume_prune/
4. docker volume inspect: volume 자세한 정보 조회
docker volume inspect [OPTIONS] VOLUME [VOLUME...]
https://docs.docker.com/engine/reference/commandline/volume_inspect/
#️⃣ 3) 이미지 생성 시 Docker Volume 사용법
Dockerfile의 경우, VOLUME 명령어로 Anonymous Volumes 만 지정가능하다.
반면, docker-compose 같은 경우 Host Volume이나 Named Volume을 사용하는 것이 일반적이다.
#️⃣ 4) 예제 - Nginx를 Dockerfile로 실행
Nginx는 웹서버로, 대부분의 경우가 Load Balancer로 쓰인다.
앞단에서 트래픽을 받고 뒤의 백웹서버로 traffic을 분산 시켜주는 역할을 한다.
nginx의 Dockerfile 일부를 다음과 수정하면,
로컬의 파일시스템과 맵핑되어 컨테이너를 재시작하거나 삭제해도 데이터를 보존할 수 있다.
[Dockerfile]
FROM nginx:latest
RUN echo "<h1>Hello from Volume</h1>" > /usr/share/nginx/html/index.html
VOLUME /usr/share/nginx/html
Docker Network 란?
여러 개의 컨테이너를 하나의 Docker network로 연결 가능
즉, network을 하나 만들고 모든 컨테이너들을 이 네트워크 안으로 지정하는 방식이다.
#️⃣1) Docker Network 관련 명령어
1. docker network : 네트워크들 관리
docker network COMMAND
https://docs.docker.com/engine/reference/commandline/network/
2. docker network connect/disconnect : 특정 컨테이너를 특정 네트워크로 연결/연결해제
docker network connect [OPTIONS] NETWORK CONTAINER
docker network disconnect [OPTIONS] NETWORK CONTAINER
https://docs.docker.com/engine/reference/commandline/network_connect/
https://docs.docker.com/engine/reference/commandline/network_disconnect/
3. docker network create : 네트워크 생성
docker network create [OPTIONS] NETWORK
https://docs.docker.com/engine/reference/commandline/network_create/
4. docker network inspect : 네트워크 상세 정보 확인
docker network inspect [OPTIONS] NETWORK [NETWORK...]
https://docs.docker.com/engine/reference/commandline/network_inspect/
5. docker network ls : 네트워크 목록
docker network ls [OPTIONS]
https://docs.docker.com/engine/reference/commandline/network_ls/
6. docker network rm : 네트워크 삭제
docker network rm NETWORK [NETWORK...]
https://docs.docker.com/engine/reference/commandline/network_rm/#options
'#️⃣ Cloud&Container > Docker' 카테고리의 다른 글
[Docker] 프로덕션 환경에서 Docker 사용 시 주의사항: 서버 관리와 컨테이너 오케스트레이션(K8s) (0) | 2023.06.16 |
---|---|
[Docker] Docker compose란? (0) | 2023.06.15 |
Docker 기본 정리 및 Airflow에서 Docker의 필요성 (0) | 2023.06.12 |
[Docker] 도커란? (0) | 2023.02.12 |
[Docker] 컨테이너 기본 명령어 (0) | 2023.02.12 |