2024. 2. 8. 23:21ㆍData Engineering/Docker
도커에서는 컨테이너를 실행할 때 포트 포워딩을 설정할 수 있다. 하지만 컨테이너에 여러 소프트웨어를 설치하다 보면 포트 설정을 추가해야 할 때가 있다. 나의 경우 다음과 같은 상황이었다.
- 다른 컨테이너에서 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 경로에서 시작 명령어 실행
이러한 과정을 통해 도커 컨테이너에서 포트 포워딩 설정을 쉽게 추가할 수 있다 👍
참고자료
간단하게 실행 중인 docker container에 포트포워딩 다시 설정하기
도커에 센토스(컨테이너)를 올려서 배포하고 접근하려면 처음부터 도커를 run할때 포트포워딩을 해야합니다. 도커 네트워크 특성때문입니다. 그래서 처음 사용할 때 모르고 컨테이너를 만들었
pjs21s.github.io