본문 바로가기
공부/CI & CD

docker compose에 대하여 ..

by son_i 2026. 2. 8.
728x90

계속 프로젝트를 하면서 깊이 있게 알아가는 것들이 많은데 한 번에 정리해보려고 한다.

 

[volumes의 두 가지 용도]

1. Named Volume 데이터 영속성

volumes에 지금처럼 - minio-data:/data 라고 적어준 것은 named volume으로 minio-data는 도커 엔진이 관리하는 볼륨이다.

Named Volume을 사용하면 도커 전용 명령어로 해당 컨테이너 관리가 가능하고, 

docker compose down으로 컨테이너를 완전히 삭제해도 데이터가 남아있다. (볼륨마저 지우려면 -v 옵션)

 

이 경우 하단에 volumes 옵션에 해당 볼륨을 꼭 정의 해줘야한다.

 

2. BindMount 호스트 - 컨테이너 간 실시간 공유

아니면 /home/ec2-user/:/home/ec2-user/petory 이런식으로 앞 경로 : 뒤 경로 형식을 적어주는 경우도 있는데

이것은 Bind Mount 라고 부른다. 

이렇게 써주면 앞 경로의 서버경로 뒤 경로의 컨테이너 내부를 연결해줄 수 있다.

 

 

[ports - 포트 포워딩]

앞 포트 : 뒤 포트 (9000:9000)

여기의 앞 9000 포트는 서버에서 사용하는 포트, 뒤 9000포트는 컨테이너 내부의 포트이다.

9000으로 들어오는 요청을 해당 컨테이너 9000번 포트로 연결해준다는 의미이다.

 

만약 정의된 두개의 포트 정보에 뒷 포트가 8080으로 같다면 포트 충돌이 일어날까 ?

-> 정답은 NO. 그냥 그 컨테이너로 들어가는 입구가 2개인 셈

 

*** 모든 컨테이너의 포트를 밖으로 열어줄 필요는 없다. ***

DB나 Redis처럼 백엔드 서버 내부에서만 사용하는 서비스들은 ports 설정을 생략하는 것이 보안상 훨씬 안전하다.

같은 도커 네트워크 안에서는 서비스 이름으로 모든 포트에 자유롭게 접근할 수 있기 때문이다.

이것이 바로 도커가 제공하는 강력한 네트워크 격리(Isolation) 기능이다.

[networks]

네트워크를 만드는 방법은 2가지 인데 

 

1. 도커 컴포즈가 자동으로 만들기

services:
  petory-minio:
     networks:
        - petory-network

networks:
  petory-network:

이 네트워크는 컴포즈 파일과 생명주기를 같이한다.

 

2. 외부에서 미리 만든 네트워크 사용하기 - 서로다른 컨테이너들끼리 통신할 때 !

network:
  petory-network:
    external: true 

 

터미널에서 직접 명령어를 입력해서 만들어야 하며 external: true 옵션을 꼭 넣어줘야한다.

docker network create petory-network

 

이렇게 만든 네트워크는 서버를 껐다 켜도 사라지지 않는다.

외부에서 만든 네트워크를 사용하는 이유는 서로 다른 컴포즈 파일에서 컨테이너들끼리 통신하기 위함이다 !

 

나같은 경우 spring backend, db가 적힌 docker-compose와 redis, elasticsearch, minio등이 있는 infra-compose가 별도로 구성되어있다.

 

redis, es, minio는 spring 프로젝트와 통신해야하므로 petory-network로 묶어주었다.

 

또한 외부와 통신해야하는 backend 시스템과 minio는 외부에서 생성한 npm-network로 연결하여 NPM과 서로 통신할 수 있게 하였다. (NPM 컨테이너도 npm-network와 연결되어있기 때문에 같은 네트워크에 있는 애들끼리 통신이 가능한 것!!! )

 

 

같은 네트워크에 있으면 ports 설정 없어도 컨테이너 명으로 컨테이너들끼리 통신이 가능하다.
*** 같은 Docker 네트워크 안에서는 컨테이너 이름으로 모든 포트에 접근 가능. ***

 

ports를 설정하는 것은 내 호스트의 포트와 컨테이너 포트를 연결해달라는 의미이다 !

따라서 DB, Redis같은 외부와 연결 될 필요 없는 컨테이너들은 ports를 적어주지 않는게 보안상 좋다.

 

 

728x90