docker compose를 사용한 네트워크
Docker Compose
에서는 network_mode
를 이용하여 네트워크를 정할 수 있습니다. 그리고 특히 여러 네트워크를 생성하여 서비스에 여러 네트워크를 적용하는 것도 가능하다는 장점이 있습니다.
default
네트워크
Docker Compose
에서 네트워크를 정의하는 것도 가능하지만, Docker Compose
와 별개로 Docker Engine
으로 생성한 네트워크를 이용하는 것도 가능합니다.
디폴트 네트워크의 이름은 docker-compose.yml
가 위치한 디렉토리
이름 뒤에 _default
가 붙습니다. 예를 들어, 디렉토리 이름이 my_app
라면 디폴트 네트워크 이름은 my_app_default
가 됩니다.
docker-compose up
을 통해 보는 default 네트워크
default_network
의 이름은 docker-compose up -d
하면 처음으로 나오는 메세지를 보시면
Creating network "my_app_default" with the default driver
라고 나오는 것을 볼 수 있습니다.
명령을 통해서 보면, Docker Compose
는 먼저 네트워크를 생성합니다.
그리고 컨테이너를 빌드한 후 네트워크에 연결되는 순서로 작동하는 것을 볼 수 있습니다.
이렇게 도커 컴포즈를 사용해서 생긴 default 네트워크
를 확인해 볼 수 있습니다.
docker-compose down
을 통해 보는 default 네트워크
반대로 docker-compose down
을 하게 되면, 컨테이너를 종료/제거한 후 제일 마지막에 네트워크를 제거합니다.
즉, Docker Compose 를 통해
정의한 네트워크는Docker Compose Up
과 함께 생성되었다가 Docker Compose Down
과 함께 삭제됩니다.
컨테이너 간 통신
예를 들어, docker-compose.yml
에 web
서비스의 ports
설정이 아래와 같다면,
services:
web:
build: .
ports:
- "8001:8000"
호스트 컴퓨터에서 접속할 때는 8001
포트를 사용해야 하고, 같은 디폴트 네트워크 내의 다른 컨테이너에서 접속할 때는 포트 8000
을 사용해야 합니다.
즉 ,컨테이너간 통신에서는 컨테이너 포트를 사용해야하고, 로컬 호스트에 포트포워딩 된 포트를 사용해야 합니다.
따라서 다음과 같이 접속을 해야합니다.
- 호스트 컴퓨터에서
web
서비스 컨테이너 접속 :curl -I localhost:8001
- 같은 네트워크 내의 다른 컨테이너에서
web
서비스 컨테이너 접속 :docker-compose exec alpine curl -I web:8000
네트워크 추가
docker-compose.yml
의 networks
항목 아래에 네트워크를 설정합니다. 아래 설정파일을 보면 db
서비스는 디폴트 네트워크에만 연결되지만, web
서비스는 디폴트 네트워크 뿐만 아니라 our_net
네트워크에도 연결되게 됩니다.
services:
web:
build: .
ports:
- "8000:8000"
networks:
- default
- our_net
db:
image: postgres
environment:
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres
networks:
our_net:
driver: bridge
외부 네트워크 사용
예를 들어서 이미 docker network create our_net
으로 our_net
이라는 네트워크가 있다면, 아래 설정을 다음과 같이 할 수 있습니다.
networks:
default:
external:
name: our_net
이렇게 설정을 해주면, 이 네트워크는 도커 컴포즈를 통해서 정의된 네트워크가 아니기 때문에 docker compose down
을 해도 네트워크가 사라지지 않습니다.
Uploaded by N2T