Docker Network
Docker Compose를 통해 여러 컨테이너를 하나의 네트워크 안에서 실행시키려고 할 때가 있을 것이다.
docker-compose.yml 파일에 네트워크를 지정하지 않으면 기본적으로 별도의 네트워크가 생성이 되긴 한다. (compose-default)
Docker Compose에서나 run 명령어를 통해 특정 네트워크를 지정하고 싶은 경우에는 네트워크를 생성하여 사용한다.
➡️ 정상적으로 생성이되면 아래와 같이 생성한 네트워크의 id가 반환된다.
Network Inspect
docker network inspect my-net
위 명령어를 통해 'my-net' 특정 네트워크에 대한 세부 정보를 확인할 수 있다.
Docker run Command에 network 지정
docker run --name mynginx --net my-net nginx
Docker Network 명령어 및 옵션 살펴보기
- --help 옵션을 통해 사용가능한 명령어를 확인할 수 있다.
- network 명령어에서는 주로 create, inspect, ls, prune, rm을 주로 사용한다.
Docker Compose file에 network 지정하기
services:
web:
image: httpd
ports:
- "80"
depends_on:
- db
networks:
- my-net
db:
image: mysql
environment:
- MYSQL_DATABASE=testdb
- MYSQL_ROOT_PASSWORD=test123
networks:
- my-net
networks: # 생성한 네트워크 or 생성할 네트워크명 지정
my-net:
external: true
- networks 부분에 그냥 네트워크 명을 정의하면 "디렉터리 이름 + 작성한 네트워크 이름"의 새 네트워크가 생성된다.
- external 옵션을 사용하면, 해당 이름의 새 네트워크가 생성되는 것이 아닌 기존에 생성된 network를 사용할 수 있다.
나는 위에서 생성한 my-net의 네트워크를 사용하기 위해 external: true를 작성해 주었다.
Docker Volume
Docker Volume 명령어를 통해 외부 스토리지의 volume과 Host Instance(도커 컨테이너)의 Volume 볼륨을 마운트 할 수 있다.
docker volume create my-vol
docker volume ls
docker volume --helop
- 위 명령어를 통해 volume list를 확인할 수 있다.
Host의 volume을 사용하게 되면, 사용자가 서버에 저장한 데이터가 다른 서버에는 저장되지 않는다.
사용자가 같은 서버에 접속하는 보장이 없으므로, 만약 다른 서버에 접속한다면, 전에 저장한 데이터를 조회 못하는 문제가 생긴다.
➡️ 이를 해결하기 위해 외부 스토리지의 volume에 연결해서 어느 서버에 접속해도 데이터가 유지되게 한다.
위 사진을 보면 db 1, 2, 3 3개의 서버가 있다.
volume을 사용하지 않으면 모두 다 다른 데이터를 관리하고 있어 같은 데이터를 조회할 수 없게 된다.
만약 같은 서버고 데이터를 공유해야 한다면, 외부 스토리지의 volume을 마운트하여 데이터를 공유할 수 있다.
docker volume inspect로 마운트된 경로 확인하기
- Mountpoint를 확인하면 VM Instance에 마운트 된 경로를 확인할 수 있다.
Docker compose volume 지정
services:
web:
volumes:
- my-vol:/data/my-vol # 볼륨을 연결
- test-vol:/data/test-vol # 새 볼륨을 생성하여 연결
volumes:
my-vol:
external: true # 기존에 만들어 둔 volume 사용
test-vol: # 새 볼륨 생성
- 네트워크와 똑같이 external 옵션을 통해 기존의 볼륨을 지정할 수 있다.
Docker compose volume & network 생성 및 기존 리소스 사용 정리
사용할 volume과 network를 생성하고, docker compose를 통해 배포하면 새로운 볼륨, 네트워크는 생성되지 않고 지정한 리소스를 사용한다.
compose에서 생성한 volume과 network는 docker-compose down을 통해 컨테이너를 삭제하면 같이 삭제된다.
하지만, 기존의 volume과 network를 사용하면 down을 통해 컨테이너를 삭제해도 해당 리소스는 삭제되지 않는다.
참고한 자료입니다.
https://velog.io/@lijahong/0부터-시작하는-Docker-공부-Docker-Compose-Network-Volume-정의하기
'Infra > Docker' 카테고리의 다른 글
[Jib] Gradle Jib 을 통한 빌드 사용법 및 Jib 이해하기, 빌드 시간 단축하기기 - gradlew jib (0) | 2024.08.09 |
---|---|
[Docker] Docker compose로 redis 실행하기 - redis.conf, requirepass, data 설정 (0) | 2024.04.21 |
Docker로 Spring Boot, Vue, MySQL 배포 및 연동하기 (0) | 2023.12.03 |
[Docker] 도커 허브 연결하기, 도커 컴포즈 docker-compose 파일 작성하기 (1) | 2023.12.03 |
[Docker] 도커 기본 명령어, 명령어 정리 (0) | 2023.12.03 |