작성
·
168
0
강의 영상 약 13:45초 부터의 내용에서 궁금한 점이 있습니다
위의 그림의 화살표 방향으로 jenkins 서버에서 다른 docker container로 ssh를 통한 접속을 시도할 때
접속 IP 주소로
내 로컬 PC의 IP주소:10022 로 접속하는 것과
우측 docker container의 IP 주소인 172.0.0.2:22로 접속을 시도하는 것의 차이가 있나요?
위 두 가지 경우 모두 접속이 가능하던데 두 경우의 차이가 존재하는지 궁금합니다!
답변 2
1
안녕하세요, 이도원입니다.
도커 컨테이너를 기동할 때 Port mapping(Port publish)라고 해서, 컨테이너 내부에서 사용되는 포트를 컨테이너 외부 (즉 로컬 PC 등)에서 사용하는 포트와 연결(매핑)하여 사용할 필요가 있습니다. 강의에서처럼 도커 컨테이너 내부의 SSH 포트인 22번을 컨테이너 외부인 로컬 PC에서 사용하기 위해 10022:22 와 같이 포트 매핑을 거쳐 사용하게 됩니다. 그러면 로컬 PC에서는 로컬 PC에 매핑 된 10022 포트로 접속을 시도할 경우, 컨테이너 내부의 포트하고 연결이 되게 됩니다. 따라서 로컬 PC에서 SSH 접속 시 IP주소:10022 와 같이 사용하게 됩니다. 다음으로, 모든 컨테이너를 기동하게 되면, 도커 네트워크와 아이피 주소가 할당 됩니다. 이것은 사용자가 지정하지 않고, 기본으로 선택되는 값을 사용할 수도 있고, 명시적으로 네트워크와 IP 주소를 지정해서 사용할 수도 있습니다. 강의에서는 대부분 자동으로 할당되는 방식으로 사용하였습니다. 예를 들어 도커 컨테이너를 하나 기동했을 때, 172.17.0.2와 같이 아이피가 부여되게 되며, 이는 어떤 네트워크에 포함되는지와 컨테이너를 몇번째 기동했는지에 따라서, 값이 다르게 할당됩니다. 대부분 첫번 째 기동하는 컨테이너는 172.17.0.2와 같이 할당되는데, 이는 172.17.0.1번은 외부로 연결되는 게이트웨이로 할당되기 때문입니다. 아래 예제는 제가 2번째가 기동한 컨테이너의 상세보기 정보를 출력한 내용입니다. 이 내용을 보면, 저의 Gateway는 172.17.0.1 이고, 할당된 IP는 172.17.0.3 인것을 알 수 있습니다.
"Networks": {
"bridge": {
"IPAMConfig": null,
"Links": null,
"Aliases": null,
"MacAddress": "02:42:ac:11:00:03",
"DriverOpts": null,
"NetworkID": "aa52b13704404736af9d6f9af83091f54989bb19a791a2827fc574231116a147",
"EndpointID": "1ba4df0fa1ec437c86da7903a7297e0ea8718ca45503d168ee74ab538894dfd2",
"Gateway": "172.17.0.1",
"IPAddress": "172.17.0.3",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"DNSNames": null
}
}
같은 도커 네트워크에 포함된 컨테이너들은 (위 예제에서 172.17.0.x 의 컨테이너 들) 서로 통신할 때, 컨테이너 IP로 직접 통신이 가능합니다. 예를 들어, 172.17.0.2 컨테이너에서 172.17.0.3 컨테이너의 SSH 접속하는 경우에는 172.17.0.3:22 이렇게 컨테이너 IP와 포트 번호를 명시하면 되는데, 컨테이너 외부에서의 접속이 아니기 때문에 Post mapping된 값이 아닌 원래의 포트 번호로 접속을 시도하면 됩니다.
질문하신 내용은 결과적으로 같은 컨테이너에 접속하게 되는 것이며, 어디에서 (컨테이너 외부? 같은 네트워크? 등) 접속하는 지에 IP와 포트를 확인하여 접속시도 하시면 됩니다.
추가 질문 사항 있으시면 다시 글 남겨 주세요.
감사합니다.
0
안녕하세요, 인프런 AI 인턴입니다.
nove1080님께서 문의하신 Jenkins 서버에서 Docker 컨테이너로의 SSH 접속에 대한 내용에 대해 설명드리겠습니다.
로컬 PC의 IP 주소:포트(10022)로 접속하는 경우: 이 방식은 호스트 머신에서 포트 포워딩을 설정하여 외부에서 호스트의 해당 포트를 통해 Docker 컨테이너의 SSH 서비스에 접속할 수 있도록 해줍니다. 즉, 호스트 PC의 IP 주소와 지정한 포트로 SSH 접속 시 자동으로 해당 Docker 컨테이너의 22번 포트로 연결됩니다.
Docker 컨테이너의 IP 주소(172.0.0.2:22)로 접속하는 경우: 이 방식은 내부 네트워크상의 Docker 컨테이너에 직접 접속하는 것으로, Docker가 생성한 가상 네트워크 내에서 컨테이너의 IP를 사용해 직접 통신을 합니다.
이 두 가지 방법 모두 Docker 환경에서 SSH 접속이 가능하지만, 두 방식의 차이는 네트워크 경로와 보안 관점에서의 차이라고 볼 수 있습니다. 로컬 PC의 포트를 통한 접속은 외부 네트워크 환경에서도 접근이 가능하도록 설정될 수 있어 좀 더 유연하게 사용될 수 있지만, 반면 보안상의 리스크가 있을 수 있습니다. 반대로, Docker의 내부 IP로 접속하는 것은 같은 네트워크 내에서 안전하게 컨테이너에 접근하는 방법입니다.
이미지 출처 URL을 참고하시면 좀 더 이해에 도움이 될 것입니다:
이미지 URL
도움이 되었기를 바랍니다! 추가적인 질문이 있으시면 언제든지 문의해 주세요.