포트 포워딩과 볼륨마운트 개념, 도커 실행

혀어어언·2023년 4월 4일
0

Docker

목록 보기
3/11
post-thumbnail

이번 포스트에서는 포트포워딩과 볼륨 마운트 개념에 대해서 알아본 뒤
Docker CLI 명령어와 Docker file을 사용하여 이미지 Pull, 생성, 컨테이너 실행 그리고 앞서 배운 포트 포워딩과 볼륨 마운트를 설정하는 방법 등을 알아보겠습니다.

포트 포워딩과 볼륨 마운트

포트 포워딩(Port forwarding)

포트 포워딩의 개념

컨테이너 기반 가상화에서의 포트 포워딩(Port Forwarding)은 호스트와 컨테이너 사이에서 네트워크 트래픽을 전달하는 기술입니다.

컨테이너는 가상화된 환경에서 실행되는 독립적인 프로세스로, 컨테이너 내부에서 실행되는 애플리케이션은 호스트와 같은 IP 주소나 포트에 직접적으로 접근할 수 없습니다.
이를 해결하기 위해 컨테이너의 포트와 호스트의 포트를 매핑해주는 것이 포트 포워딩입니다.

포트 포워딩 예시

컨테이너 내부에서 80번 포트로 실행되는 웹 서버 애플리케이션을 호스트의 8080번 포트로 포트 포워딩할 경우, 호스트에서 웹 브라우저를 실행하고 localhost:8080으로 접속하면 컨테이너 내부에서 실행되는 웹 서버 애플리케이션에 접근할 수 있습니다.

포트 포워딩 설정

컨테이너 기반 앱을 외부에서 접근 가능하게 만들어야 하는 경우, 포트 포워딩을 설정해야 합니다.

볼륨 마운트 (Volume Mount)

볼륨 마운트의 개념

호스트와 컨테이너 사이에서 데이터를 공유하기 위한 기술입니다.

컨테이너는 독립적인 파일 시스템을 가지고 있으며, 컨테이너 내부에서 생성된 파일은 컨테이너 내부에서만 사용할 수 있습니다. 이를 해결하기 위해 호스트와 컨테이너 사이에서 디렉토리를 공유할 수 있도록 볼륨 마운트를 설정합니다.

볼륨 마운트를 설정하면 호스트의 디렉토리를 컨테이너 내부 디렉토리에 마운트하여, 호스트와 컨테이너가 데이터를 공유할 수 있습니다. 이를 통해 데이터를 저장하고, 읽고 쓰는 등의 작업을 할 때 컨테이너 내부에서만 처리하는 것이 아니라 호스트와 공유하여 처리할 수 있습니다.

볼륨 마운트 예시

데이터베이스 컨테이너를 실행할 때, 컨테이너 내부에 데이터베이스 파일을 저장하면 컨테이너가 종료되면 데이터도 함께 소멸됩니다. 이를 방지하기 위해 호스트와 컨테이너 사이에 볼륨 마운트를 설정하여 호스트의 특정 디렉토리를 컨테이너 내부의 데이터베이스 디렉토리에 마운트합니다. 이렇게 설정하면 데이터베이스 파일이 호스트에 저장되므로, 컨테이너가 종료되더라도 데이터는 보존됩니다.

또한 컨테이너 내부에서 로그 파일을 생성하는 경우, 호스트의 로컬 파일 시스템과 볼륨 마운트를 통해 연결하면 호스트에서 로그 파일을 쉽게 볼 수 있으며, 컨테이너가 삭제되어도 로그 파일이 유지됩니다.

볼륨 마운트는 컨테이너 간 데이터 공유뿐만 아니라, 호스트에서 컨테이너로 데이터를 전송할 때에도 사용됩니다.

예를 들어, 개발자가 로컬 환경에서 코드를 작성하고 테스트하는 경우, 코드를 호스트에서 컨테이너로 전송하기 위해 볼륨 마운트를 사용할 수 있습니다. 이렇게 하면 호스트에서 작성한 코드를 컨테이너 내부에서 실행하여 테스트할 수 있습니다.

Dokcer CLI 명령어

$ docker pull [이미지명]	# 레지스트리에서 이미지 pull 받기
$ docker images	# pull 받은 이미지 확인하기
$ docker ps	# 실행중인 컨테이너 확인
$ docker ps -a
$ docker container prune # 실행하지 않는 컨테이너 삭제
$ docker run [이미지명]	# 이미지에서 새로운 컨테이너 생성 후 실행하기
$ docker rmi [이미지명]	# 이미지 삭제하기
$ docker stop [컨테이너명]	# 실행중인 컨테이너 중지시키기
$ docker logs [컨테이너명]	# 컨테이너 로그 확인하기
$ docker rm [컨테이너명]	# 컨테이너 삭제하기
$ docker network ls # 네트워크 목록 확인
$ docker network prune # 실행하지 않는 네트워크 삭제

예제

$ docker pull httpd # docker-hub로부터 이미지 가져오기
$ docker run httpd # 컨테이너 실행 시키기
$ docker run --name secondContainer httpd # 이름 설정하여 컨테이너 실행 시키기
$ docker run -p 8888:80 -v ~/wanted/pre-mission/docker-pro-wanted/lecture-material:/usr/local/apache2/htdocs httpd
# -p 옵션 통해 포트 포워딩
# -v 옵션 통해 볼륨 마운트. 파일 시스템 매핑하여 index.html을 대체함 

Dokcer file 활용

1. 도커 파일 설정

From httpd:latest
COPY index.html /user/local/apache2/htdocs/index.html
EXPOSE 80

2. 도커 파일로 이미지 생성

$ docker build -t my-httpd . # 현재 경로에 있는 my-httpd 파일로 이미지 생성

도커 파일로 생성된 이미지로 컨테이너 실행

$ docker run -d -p 8888:80 my-httpd
# -d 옵션을 통해 포그라운드로 실행
# 로컬의 8888 포트를 컨테이너의 80 포트에 포트 포워딩

0개의 댓글