easyfly 2025. 8. 26. 07:32
반응형

도커 컨테이너란?

도커 컨테이너(Docker Container)는 도커 이미지(Docker Image)를 실행한 결과물입니다.
앞서 말씀드린 것처럼, 이미지가 설계도라면 컨테이너는 그 설계도를 바탕으로 실제 만들어진 집이라 할 수 있습니다.


1. 도커 컨테이너의 정의

  • 컨테이너는 이미지에 담긴 코드, 라이브러리, 실행 환경을 기반으로 독립적으로 실행되는 프로세스입니다.
  • 각각의 컨테이너는 호스트 OS 위에서 격리된 공간을 갖지만, 완전한 가상머신과 달리 운영체제 커널은 공유합니다.
  • 즉, 컨테이너는 가볍고 빠르게 실행 가능하며, 필요시 수십 개도 금방 띄울 수 있습니다.

2. 컨테이너의 특징

  1. 격리성
    • 서로 다른 컨테이너는 독립된 파일시스템, 네트워크, 프로세스를 가집니다.
    • 다른 컨테이너와 충돌 없이 실행 가능합니다.
  2. 이식성
    • 한 컨테이너를 로컬 PC에서 실행하든, 클라우드 서버에서 실행하든 동일하게 동작합니다.
  3. 경량성
    • 운영체제 전체를 가상화하지 않고 필요한 라이브러리만 포함하기 때문에 메모리 사용량이 적습니다.

3. 컨테이너와 포트

컨테이너는 내부적으로 자신만의 네트워크 공간(네임스페이스)을 갖습니다.
즉, 컨테이너 내부에서 5000번 포트를 열어도 호스트 운영체제(외부)에서는 직접 접근할 수 없습니다.

이를 해결하기 위해 사용하는 개념이 바로 포트 바인딩(Port Binding)입니다.

호스트 포트(8000)로 연결된 상태


4. 호스트포트:컨테이너포트 구조

도커에서 컨테이너를 실행할 때 -p 옵션을 사용하여 호스트포트:컨테이너포트 형식으로 지정합니다.

docker run -d -p 8080:80 nginx
  • 컨테이너포트(80)
    • 컨테이너 내부에서 열려 있는 서비스 포트 번호입니다.
    • 예를 들어, Nginx 웹 서버는 기본적으로 80번 포트를 사용합니다.
  • 호스트포트(8080)
    • 외부에서 접속할 때 사용할 포트 번호입니다.
    • 위 예시는 호스트의 8080번 포트로 접속하면 컨테이너의 80번 포트로 연결됩니다.

즉:

  • http://localhost:8080 → 호스트에서 8080번 접속
  • 실제로는 컨테이너 내부의 80번 포트로 요청이 전달 → Nginx 웹 서버 응답

5. 예시 정리

  1. 기본 컨테이너 실행
docker run -d nginx

→ 컨테이너 안에서는 80 포트가 열려 있지만, 호스트와 연결되지 않아 외부에서 접속 불가

  1. 포트 바인딩 추가 실행
docker run -d -p 8080:80 nginx

→ 이제 호스트 브라우저에서 http://localhost:8080 입력 시, 컨테이너 안의 Nginx(80 포트)로 연결됨


정리

  • 도커 컨테이너는 이미지를 실행하여 만들어진 독립 실행 환경입니다.
  • 컨테이너 내부 포트는 외부와 바로 연결되지 않으므로, 호스트포트:컨테이너포트 형식으로 바인딩해야 외부 접속이 가능합니다.
  • 기억하기 쉽게 말하면,
    • 컨테이너포트 = 컨테이너 안 프로그램이 듣고 있는 포트
    • 호스트포트 = 밖에서 사람들이 접근할 수 있는 문

 

반응형