반응형
docker-compose를 이용해 컨테이너 간 통신을 해보고 네트워크 구성을 해보자.
Dockerfile을 이용한 build와 Dockerfile 실행 및 터미널 접속을 해봤었다.
실제 프로그램은 웹서버 - DB, 프론트 - 백서버 등 다양한 컨테이너들이 합쳐져서 실행되는데, 해당 프로세스를 구성하기 위해 docker-compose를 이용해 한번에, 편하게 컨테이너를 구성해봤다.우선 server-response는 앞전에 진행했던 예제를 사용해서 구성하고, 5초에 한번씩 server-response로 요청을 보내는 server-request를 똑같이 만들어보겠다.
npm init, Dockerfile 생성 및 기타 설정은 server-response에서 참고하길 바란다.
// server-request index.js
function sendGetRequest() {
// http://<targer containerID>:<port>
fetch('http://server-response:5001/', {
method: 'GET'
})
.then(response => {
if (!response.ok) {
throw new Error('네트워크 오류');
}
return response.text();
})
.then(data => {
console.log('데이터를 받았습니다:', data);
})
.catch(error => {
console.error('오류 발생:', error);
});
}
setInterval(sendGetRequest, 5000);
해당 코드에서 중요한 부분은 fetch를 보내는 url의 주소가 target container ID라는 점이다.
이제 response와, request 부분을 완성했으니, 두 컨테이너의 오케스트레이션을 위한 docker-compose를 작성해보자
- docker-compose는 빌드할때 별도 네트워크를 지정하지 않아도 같은 빌드 컨테이너를 default 네트워크에 묶어준다.
docker-compose를 실행하는 디렉토리는 다음과 같다.
# docker-compose.yml
version: '1.0'
services:
server-response:
build:
context: ./server-response
dockerfile: Dockerfile
ports:
- 5001:5001
server-request:
depends_on:
- server-response
build:
context: ./server-request
dockerfile: Dockerfile
- docker-compose는 services에 컨테이너를 묶고, build, port 등등의 옵션으로 컨테이너를 빌드한다.
- build - context : build하려는 Dockerfile이 위치한 디렉토리 위치
- build - dockerfile : build하려는 Dockerfile명
- ports : <외부 : 내부> 포트 연결 옵션
- depends_on : 선행되는 build 옵션 표시
- 여기서 한가지 의문점이 들 수 있는데, 바로 Dockerfile에 있는 EXPOSE와 docker-compose에 있는 ports 옵션의 차이점이다.
- Dockerfile의 EXPOSE : 도커 컨테이너가 실행될 때 listen 할 포트 번호
- docker-compose의 ports : 도커 컨테이너의 <외부 : 내부> 포트 연결
ports 옵션을 통해 server-response의 5001번과 외부에서 접속하는 5001번을 연결시켜준다.
이제 docker-compose up을 실행시켜 두 컨테이너의 상호작용을 볼 수 있다.
'Study & Project ✏️ > Docker' 카테고리의 다른 글
[Docker] - node.js Docker build, run, exec example, 예제 (0) | 2023.09.11 |
---|---|
[Docker] - Node.js Dockerfile example, Dockerfile 예제 (0) | 2023.09.10 |