코딩과로그
[기록용] 도커 네트워크 연결 본문
컨테이너 -> 호스트 통신
도커 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
'Docker' 카테고리의 다른 글
[기록용] 도커 컴포즈 명령어 정리 (ing) (0) | 2023.03.31 |
---|---|
[기록용] 도커 컴포즈 파일 정리 (0) | 2023.03.31 |
[기록용] 도커 환경변수 설정하는 다양한 방법 (ENV, ARG) (0) | 2023.03.30 |
도커 이미지 빌드 시 캐시 활용 (feat: Image Layer) (0) | 2023.03.29 |
DockerFile 문법 해석 (0) | 2023.03.29 |