강의

멘토링

커뮤니티

Cộng đồng Hỏi & Đáp của Inflearn

Hình ảnh hồ sơ của k454656922662
k454656922662

câu hỏi đã được viết

Nhập môn và thực hành Docker dành cho cả người không chuyên ngành kỹ thuật

Tạo / Chạy Container - 2

컨테이너의 IP

Viết

·

30

0

각 컨테이너마다 고유의 IP 주소를 가지고 있잖아요.

docker run -d -p 4000:80 nginx

근데 이 명령어에는 컨테이너의 IP 정보가 없는데, 어떻게 매핑이 되나요? 컨테이너가 여러 개이고, 모두 동일한 포트를 쓰면 구분이 안가잖아요.


호스트 IP: localhost

호스트 포트: 4000

컨테이너 IP: ???

컨테이너 포트: 80

 

 

dockerdocker-composedocker-volumedocker-imagecontainerecr

Câu trả lời 2

0

jscode님의 프로필 이미지
jscode
Người chia sẻ kiến thức

안녕하세요! 추가 질문 잘 해주셨어요 ~

질문해 주신 내용에 대해 답변드려볼게요 ~

 

"컨테이너의 IP 정보가 없는데, 어떻게 매핑이 되나요? 컨테이너가 여러 개이고, 모두 동일한 포트를 쓰면 구분이 안가잖아요."

-> 결론부터 말씀드리면, -p 옵션을 사용한 포트 매핑에서는 컨테이너 IP를 신경 쓸 필요가 없어요 !

그 이유는 Docker가 내부적으로 알아서 처리해주기 때문인데요, docker run 명령어로 컨테이너를 생성하면 Docker가 자동으로 해당 컨테이너에 내부 IP(예: 172.17.0.2)를 할당해줘요 !

그리고 -p 4000:80 옵션을 주면 Docker가 "호스트의 4000번 포트로 들어오는 요청을 이 컨테이너의 80번 포트로 보내줘"라는 규칙을 자동으로 만들어주는 거예요 !

이 과정에서 Docker는 해당 컨테이너의 내부 IP를 이미 알고 있기 때문에 우리가 직접 IP를 지정하지 않아도 알아서 매핑이 돼요 !

 

"컨테이너가 여러 개이고, 모두 동일한 포트를 쓰면 구분이 안가잖아요."

-> 이 부분도 걱정하지 않으셔도 돼요 !

nginx 컨테이너를 3개 띄운다고 하면 아래처럼 호스트 포트를 다르게 지정해주면 돼요 !

각 컨테이너는 독립적인 네트워크 네임스페이스를 가지고 있어서 구분이 돼요 !

docker run -d -p 4000:80 nginx # 컨테이너1: IP 172.17.0.2

docker run -d -p 5000:80 nginx # 컨테이너2: IP 172.17.0.3

docker run -d -p 6000:80 nginx # 컨테이너3: IP 172.17.0.4

이렇게 실행하면 세 개의 컨테이너가 모두 내부적으로는 80번 포트를 사용하지만, 각각 다른 IP 주소를 받아요 ~

그리고 호스트의 4000, 5000, 6000번 포트가 각 컨테이너의 80번 포트로 매핑되는 거죠 !

Docker는 "호스트 4000번으로 들어온 요청은 172.17.0.2:80으로 보내고, 5000번으로 들어온 요청은 172.17.0.3:80으로 보내자"라고 내부적으로 라우팅 규칙을 만들어줘요 !

즉, 컨테이너끼리는 내부 IP가 다르기 때문에 Docker 입장에서는 구분이 가능하고, 외부에서 접근할 때는 호스트 포트 번호로 구분하는 구조인 거죠!

정리하면, 컨테이너의 IP는 Docker가 자동으로 관리해주는 영역이라 우리가 직접 지정하거나 신경 쓸 필요 없이, 호스트 포트만 다르게 설정해주면 여러 컨테이너도 문제없이 사용할 수 있어요 :)

 

추가로 궁금하신 점 있으시면 언제든 편하게 추가 질문 남겨주세요~~

0

안녕하세요, 인프런 AI 인턴입니다. 매콤한각설탕님.

Docker 컨테이너는 기본적으로 자체적인 네트워크 인터페이스를 가지며, 컨테이너가 시작될 때 Docker 데몬에 의해 자동으로 IP 주소가 할당됩니다. 각 컨테이너는 자체 네트워크 내에서 고유의 IP 주소를 가지지만, 일반적으로 로컬 개발이나 테스트 환경에서는 이 IP 주소를 신경 쓸 필요가 거의 없습니다. 이유는 다음과 같습니다:

  1. 포트 매핑: docker run -d -p 4000:80 nginx 명령어에서 -p 4000:80호스트의 포트 4000을 컨테이너의 포트 80으로 매핑하는 의미입니다. 이 방식 덕분에 포트 4000을 통해 외부에서 컨테이너의 포트 80에 접근할 수 있습니다. 즉, 여러 컨테이너가 동일한 포트를 사용하더라도, 호스트의 서로 다른 외부 포트를 통해 접근할 수 있으므로 구분이 가능합니다.

  2. 네트워크 격리: Docker는 기본적으로 각 컨테이너를 격리된 네트워크에서 실행되도록 합니다. 이를 통해 같은 호스트의 포트 번호가 다른 컨테이너와 겹치는 일이 없도록 고유한 포트 매핑을 허용합니다.

  3. 컨테이너 IP 주소의 자동 할당: 컨테이너가 시작되면, Docker는 브리지 네트워크를 통해 자동으로 IP 주소를 할당합니다. 이는 내부 네트워크에서의 통신을 지원하지만 외부에서의 접근은 포트 매핑을 통해서만 가능합니다.

관련하여 더 자세한 네트워크 및 포트 매핑 동작 원리에 대한 질문이 있다면, 아래 링크를 참고해 보세요:
- Docker에서 포트 매핑과 컨테이너 네트워크 이해하기

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

Hình ảnh hồ sơ của k454656922662
k454656922662

câu hỏi đã được viết

Đặt câu hỏi