본문 바로가기

Data Engineering/Docker

[Docker] 도커 컨테이너에서 포트 포워딩 설정하기 (+ 💁‍♂️Apache Livy를 사용한 예시)

 

 도커에서는 컨테이너를 실행할 때 포트 포워딩을 설정할 수 있다. 하지만 컨테이너에 여러 소프트웨어를 설치하다 보면 포트 설정을 추가해야 할 때가 있다. 나의 경우 다음과 같은 상황이었다.

 

  • 다른 컨테이너에서 Ubuntu 컨테이너의 Spark Job을 실행시키기 위해 Apache Livy를 설치
  • 이후 Livy Web UI를 확인하기 위해 8998 포트를 추가 설정 필요

 

 처음에는 단순히 새로운 컨테이너를 만들어야 하나 생각했지만 이 경우 자바, 파이썬, 스파크 등 기존에 설치된 많은 프로그램을 재설치해야 한다는 복잡한 일이 생긴다.

* 포트 포워딩: 네트워크에서 특정 포트로 들어오는 트래픽을 다른 포트로 전송하는 메커니즘. 내부 서비스에서 외부 서비스에 접속하거나 그 반대의 경우에 사용. 

 

✔ docker commit

다행히 도커에서는 컨테이너의 변경사항을 이미지로 저장할 수 있는 docker commit 명령어가 있다. 과정은 아래와 같다.

docker stop [CONTAINER ID]
docker commit [CONTAINER ID] [IMAGE]
docker run -p [HOST PORT]:[CONTAINER PORT] -d [IMAGE]

 

 

1) 컨테이너 중지

docker stop e3513f0166c8
# docker stop [CONTAINER ID]

 

실행 중인 Ubuntu 컨테이너 중지

 

컨테이너 확인
컨테이너 중지

 

 

2) 컨테이너 변경사항 커밋 

docker commit e3513f0166c8 ubuntu
# docker commit [CONTAINER ID] [IMAGE]

 

 

명령어를 통해 컨테이너의 변경사항을 적용한 이미지 생성 (tag를 따로 설정하지 않아 latest로 설정)

 

이미지 확인

 

3) 컨테이너 실행

docker run -it -p 8888:8888 -p 8998:8998 -p 4040:4040 --name spark-livy ubuntu /bin/bash

 

 

-p 옵션을 사용하여 호스트와 컨테이너 간의 포트 매핑을 설정 (예) 호스트의 8998 포트를 컨테이너의 8998 포트로 매핑하여 livy 서버에 접근)

 

컨테이너 확인

 

 

4) Apache Livy 서버 시작

${LIVY_HOME}/bin/livy-server start

 

$LIVY_HOME 경로에서 시작 명령어 실행

 

✔ localhost:8998 확인

 

이러한 과정을 통해 도커 컨테이너에서 포트 포워딩 설정을 쉽게 추가할 수 있다 👍

 


참고자료

 

간단하게 실행 중인 docker container에 포트포워딩 다시 설정하기

도커에 센토스(컨테이너)를 올려서 배포하고 접근하려면 처음부터 도커를 run할때 포트포워딩을 해야합니다. 도커 네트워크 특성때문입니다. 그래서 처음 사용할 때 모르고 컨테이너를 만들었

pjs21s.github.io