docker compose를 사용한 네트워크
https://docs.docker.com/compose/networking/
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을 해도 네트워크가 사라지지 않습니다.
'42Seoul > Inception' 카테고리의 다른 글
Docker Volume이란? [42 inception 과제 개념 10] (0) | 2023.06.24 |
---|---|
Dockerfiles이란? [42 inception 과제 개념 9] (0) | 2023.06.24 |
docker compose 명령어 [42 inception 과제 개념 7] (0) | 2023.06.24 |
docker-compose 란 무엇인가? [42 inception 과제 개념 6] (0) | 2023.06.24 |
도커 네트워크란 [42 inception 과제 개념 5] (0) | 2023.06.24 |