인프런 커뮤니티 질문&답변

김어진님의 프로필 이미지

작성한 질문수

풀스택을 위한 도커와 최신 서버 기술(리눅스, nginx, AWS, HTTPS, flask 배포) [풀스택 Part3]

mysql 포트 질문입니다.

작성

·

339

1

안녕하세요, 좋은 강의 감사합니다.

docker-compose에서 mysql설정할 때, ports를 사용해서 연결했습니다. (ubuntu 20.04)
port는 호스트 내부의 컨테이너끼리는 컨테이너 포트로 특정 컨테이너에 접근할 수 있고,
호스트 외부에서는 컨테이너 포트와 바인딩된(연결된) 호스트 포트를 통해 특정 컨테이너에 접근할 수 있다고 이해하고 있는데 보안을 위해서 port보단 expose를 사용해서 mysql에 내부 컨테이너들끼리 통신하도록 하는 것이 나을 지 궁금하여 질문을 남기게 되었습니다.

호스트: ubuntu 20.04, 내부 컨테이너: docker-compose에서 service 컨테이너들

답변 1

1

안녕하세요. 답변도우미입니다. 기본적으로는 서비스의 구성이 어떻게 되느냐에 따라, 다르겠지만요. 일반적으로는 expose를 사용하는 것이 보안 측면에서 더 좋은 선택입니다. portsexpose 사이의 주요 차이점은 다음과 같습니다.

  • ports: 호스트의 포트를 컨테이너의 포트에 바인딩(연결)합니다. 이렇게 하면 호스트 머신 및 네트워크 상의 다른 머신들이 해당 포트를 통해 컨테이너에 접근할 수 있습니다.

  • expose: 컨테이너의 포트를 내부 네트워크에만 노출합니다. 이 경우 외부에서 해당 포트에 접근할 수 없으며, 도커 네트워크 내부의 다른 컨테이너들만 접근이 가능합니다.

보안을 강화하려면 MySQL에 내부 컨테이너들끼리만 통신하도록 expose를 사용하는 것이 좋습니다. 이렇게 하면 호스트 머신이나 네트워크 상의 다른 머신들이 해당 포트를 통해 MySQL 컨테이너에 접근할 수 없기 때문입니다.

감사합니다.

김어진님의 프로필 이미지
김어진
질문자

답변 감사합니다.

외부에서 포트로 접근이 불가하다고 하셨으면 만약 스프링 내부, properties 설정 파일에 mysql 연결을 해놓고 mysql 워크벤치를 사용해서 포트 연결하는 것들을 의미하는 것인가요?