4.1 포트 공개의 주요 개념
포트 공개는 Docker 컨테이너에서 실행 중인 서비스가 외부 네트워크나 호스트에서 접근 가능하도록 설정하는 것이야. 이건 멀티컨테이너 애플리케이션 설정의 중요한 부분이야, 왜냐면 웹 서버, 데이터베이스, 기타 네트워크 애플리케이션 같은 서비스와 상호작용하게 하니까. 이번 강의에서는 컨테이너 포트를 공개하고 서비스에 접근 권한을 설정하는 방법을 다룰 거야.
포트 공개의 주요 개념
- 포트 매핑: 호스트 포트를 컨테이너 포트에 매핑시키는 일.
- 파라미터
-p/--publish
: 컨테이너 실행 시 포트 매핑을 지정하는 데 사용돼. - 파라미터
-P/--publish-all
: 컨테이너 내의 모든 공개된 포트에 대해 호스트 포트를 자동으로 할당해.
파라미터 -p
의 사용 예
컨테이너 실행 시 호스트 포트를 컨테이너 포트로 매핑하려면 -p
옵션을 사용할 수 있어. 명령어 형식은 다음과 같아:
docker run -d -p <host_port>:<container_port> <image>
예제 1: Nginx 웹 서버 포트 공개
Nginx가 실행 중인 컨테이너를 시작하고 컨테이너의 포트 80을 호스트의 포트 8080으로 공개해 보자.
이제 Nginx는 http://localhost:8080 주소에서 접근 가능할 거야.
docker run -d -p 8080:80 --name mynginx nginx
예제 2: 여러 포트 공개
-p
옵션을 여러 번 사용하여 여러 포트를 공개할 수 있어.
이 예제에서는 Nginx가 HTTP에서는 포트 8080, HTTPS에서는 포트 8443에서 접근 가능할 거야.
docker run -d -p 8080:80 -p 8443:443 --name mynginx nginx
파라미터 -P
의 사용 예
-P
파라미터는 Dockerfile이나 컨테이너 설정에 명시된 모든 포트를 임의의 호스트 포트로 자동 공개해.
예제:
docker run -d -P --name mynginx nginx
어떤 포트가 할당되었는지 확인하려면 docker port
명령어를 사용해:
docker port mynginx
출력은 대략 이렇게 나올 거야:
80/tcp -> 0.0.0.0:32768
443/tcp -> 0.0.0.0:32769
4.2 Docker Compose에서 포트 퍼블리싱
Docker Compose에서 포트를 지정하려면 docker-compose.yml
파일의 ports
디렉티브를 사용하면 돼.
docker-compose.yml
파일 예제
version: '3.8'
services:
web:
image: nginx:latest
ports:
- "8080:80"
- "8443:443"
Docker Compose 실행:
docker compose up -d
이제 Nginx는 http://localhost:8080와 https://localhost:8443 주소에서 접속 가능해.
4.3 포트 공개 추가 매개변수
1. IP 주소 제한
호스트의 IP 주소를 지정하여 컨테이너 포트에 대한 접근을 제한할 수 있어.
예:
이 예에서 Nginx는 http://127.0.0.1:8080 주소의 로컬 호스트에서만 접근 가능할 거야.
docker run -d -p 127.0.0.1:8080:80 --name mynginx nginx
2. 포트 범위 사용
포트를 공개할 때 범위를 지정할 수 있어.
예:
docker run -d -p 8080-8081:80-81 --name mynginx nginx
실용적인 팁:
- 필요한 포트만 공개: 서비스에 접근하기 위해 정말 필요한 포트만 공개해서 잠재적인 취약점을 줄여봐.
- 방화벽 사용: 신뢰할 수 있는 IP 주소에서만 공개된 포트에 접근할 수 있도록 방화벽을 설정해.
- 모니터링과 로깅: 모니터링 및 로깅 도구를 사용해서 공개된 포트에 대한 접근을 추적하고 수상한 활동을 찾아봐.
GO TO FULL VERSION