코딩과로그

[기록용] 도커 네트워크 연결 본문

Docker

[기록용] 도커 네트워크 연결

피리음 2023. 3. 31. 07:52

컨테이너 -> 호스트 통신

도커 APP 에서 호스트 IP에 접근 시 다음과 같이 IP Address를 소스에서 사용하면 접속이 가능하다.

# 코드에 아래와 같이 작성하면 도커환경상의 네임서버?에서 도메인과 매핑되는 IP로 라우팅해주는 것으로 보임.
host.docker.internal:{PORT}

# 적용 예시
mongoose.connect(
  'mongodb://host.docker.internal:27017/swfavorites',
  { useNewUrlParser: true },
  (err) => {
    if (err) {
      console.log(err);
    } else {
      app.listen(3000);
    }
  }
);

- 관련 깃헙 기록

https://github.com/SangYunLeee/docker-practice/commit/fd6f8bc927db9e6ed6ffc797cce27151d6cc82eb

 

컨테이너 -> 컨테이너 통신

몽고 DB 컨테이너와 몽고 DB를 사용하는 앱을 연결하는 예시를 들어보자.

연결의 2가지 방식

  1. 직접 컨테이너의 IP 를 찾아서 접근하는 방식

# mongodb 컨테이너를 실행시킴
$ docker run --name mogodb mongo

# 다음의 명령어로 현재 실행중인 mongodb의 IP를 얻을 수 있다.
# IP "172.17.0.2" 인 것을 확인할 수 있다.
$ docker inspect {container}
...
"IPAddress": "172.17.0.2",
...

# IP를 환경변수를 통해 몽고 DB와 연결하려는 컨테이너에 직접 전달해준다.
$ docker run --env MONGO_ENDPOINT="172.17.0.2" {image}

2. 같은 네트워크로 묶는 방식 (AWS ECS Fragate 방식에는 적용되지 않는다고 함)

# 네트워크를 생성한다.
# docker network create {network-name}
$ docker network create my-net

# mongodb 컨테이너를 내가 생성한 네트워크에 포함시킨다.
# docker run --network {network-name} --name {container-name} {image-id}
$ docker run --network my-net --name my-mongo mongo

# 몽고디비와 연결하려는 app도 같은 네트워크에 포함시킨다.
# docker run --network {network-name} {image-id}
$ docker run --network my-net node-app

# 이 때 앱의 소스코드 내 몽고디비 주소로 요청 시, 도커 환경에서같은 네트워크에 있는 몽고디비의 IP가 매핑시켜 연결이 가능하다.
# 'mongodb://{이전에 생성한 몽고디비 컨테이너 이름}:{몽고디비의 포트 번호}'
=> 'mongodb://my-mongo:27017'

3. 컨테이너의 포트와  localhost 포트를 연결하는 방식

# 로컬 3000 포트에 컨테이너의 엔드포인트(hostname+port)를 할당한다.
# docker run -p {host-port}:{container-port} {image}
$ docker run -p 3000:27017 {image}

 

관련 이미지 참조:

ref: https://www.udemy.com/course/docker-kubernetes-the-practical-guide/learn/lecture/22167000#overview