Docker, 호스트의 운영 체제 감지

Docker, 호스트의 운영 체제 감지

Docker를 사용하여 웹앱용 개발 설정을 만들고 있습니다. 우리는 Windows, Mac, Linux를 사용하는 개발자를 보유하고 있습니다. 모두가 Linux 컨테이너를 사용하게 되지만 여전히 Windows 사용자에게만 영향을 미치는 문제가 있습니다.

저는 프로덕션과 다르게 애플리케이션을 실행하고 싶지 않습니다. 오히려 달라야 하는 것은 개발자 설정과 관련된 도구입니다.

Docker 컨테이너 내에서 호스트의 운영 체제를 감지하는 방법이 있습니까?

답변1

정말로 이 일을 하시겠습니까?

프레임 챌린지 답변이 마음에 들지 않으시겠지만 양해해 주시기 바랍니다.

직면한 문제는 Windows에서 Linux 기반 Docker를 실행하는 것이 해킹이기 때문에 나타납니다. 물론 Windows 파일 시스템 문제가 발생할 수 있지만 제가 인식하지 못하는 다른 문제가 있을 수도 있습니다.

이제 제가 이해한 대로 프로젝트에 플랫폼별 해결 방법을 추가하여 Windows 호스트의 VM에서 실행할 수 있도록 하려고 합니다. 내 경험에 따르면 이것을 피하는 것이 좋습니다.

  1. Windows는 프로젝트의 대상 플랫폼이 아닙니다. Windows 관련 문제에 대한 솔루션을 추가하면 불필요한 복잡성이 발생합니다. 불필요한 복잡성은 유지 관리 비용이 증가하고 그렇지 않으면 발생하지 않는 버그 가능성이 있음을 의미합니다.

  2. 엄밀히 말하면 프로젝트 문제는 아니지만 Windows에서는 여전히 불필요한 번거로움을 추가하는 파일 시스템 비호환성으로 인해 더 많은 문제가 발생할 가능성이 높습니다. 예를 들어 누군가가 대소문자 구분 파일 시스템(예: Linux)에서 대소문자만 파일 이름을 변경하고 다른 사람이 해당 변경 사항을 Windows 시스템으로 가져오면 git이 무너집니다.

실제 해결책은 가능한 한 의도한 것과 유사한 환경에서 개발하는 것입니다. 이는 실제 Linux 호스트 또는 Linux VM을 의미합니다. 이를 통해 개발자는 개발 플랫폼에만 존재하는 문제에 시간과 돈을 낭비하지 않게 됩니다. 또한 Windows에서 나타나지 않는 문제를 놓치지 않도록 보장합니다.

고객은 제품이 Windows의 Linux VM에서 제대로 실행되는지 여부에 관심이 없습니다. Linux를 유일한 플랫폼으로 목표로 삼고 있으므로 개발자는 Linux에 대해 잘 알고 있어야 합니다.실제 시나리오에 존재하지 않는 문제에 정말로 리소스를 소비하고 싶습니까?

답변2

나는 똑같은 문제를 겪었습니다. Angular 웹 개발 흐름은 매핑된 볼륨에서 webpack으로 감지된 파일 변경 사항에 따라 달라집니다.

fsevents불행하게도 Windows는 파일 시스템 이벤트( NPM 설치 중에 항상 경고하는 패키지) 를 전달하지 않습니다.

답변3

macOS 또는 모든 OS의 경우 개발자가 로컬 셸 프로필에서 이를 설정하도록 할 수 있습니다.

export IS_HOST_MACOS='true'
export HOST_UNAME=$(uname)

그런 다음 다음을 통해 docker에 전달합니다.

docker run -e IS_HOST_MACOS -i HOST_UNAME

마지막으로 일부 docker 스크립트 내에서 사용하십시오.

# This is meant to help developers know when the server has booted
if [ -n "${IS_HOST_MACOS+1}" ]; then
  [ "$IS_HOST_MACOS" == "true" ] && echo '{"Nginx is ready":""}';
fi

답변4

컨테이너는 시뮬레이션된 환경에서 실행되므로 제공된 가상 하드웨어를 통해 Windows 호스트와 Linux 호스트를 구별할 수 있습니다.

예를 들어, 이 답변 나는 Windows의 Docker가 "vEthernet(DockerNAT)"이라는 네트워크 장치를 생성할 것이라고 추측합니다.

테스트할 환경이 없으므로 환경에 맞는 솔루션을 찾는 것은 귀하에게 달려 있습니다.

관련 정보