나는 내 마음 속에 있는 몇 가지 모호함을 정리하고 싶습니다. NAT 뒤의 로컬 비즈니스 네트워크에서 CentOS7을 사용하여 베어메탈 서버를 실행하고 있습니다. CentOS7의 기본 소프트웨어에는 PHP 5.4.16이 필요하고 업그레이드할 수 없기 때문에 달성하려는 문제를 해결해야 합니다. 즉, 자체 IP를 사용하여 가상 머신(VM) 또는 Docker 컨테이너/이미지/저장소에 여러 소프트웨어를 설치하는 것입니다. 도메인의 주소와 DNS. 문제는 어떤 것과 함께 일해야 할지 잘 모르겠다는 것입니다. 이 시나리오에는 사용자 수가 무한하므로 내 하드웨어에서 병목 현상이 발생한다고 가정해 보겠습니다.
내가 이해한 바로는 가상 머신은 현재 실행 중인 CentOS7 운영 체제와 상호 배타적이지만 여전히 CentOS7 서버의 하드웨어에서 실행되는 자체 "엔티티"와 같습니다.
이 가상 머신에 여러 소프트웨어를 설치할 수 있으며 CentOS7이 다시 시작되면 자동으로 시작되고 IP 및 DNS 구성이 저장됩니다.
이제 Docker 컨테이너는 상태 비저장입니다. 즉, 서버를 다시 시작하면 컨테이너/이미지/저장소의 모든 소프트웨어 설치 및 IP 주소/DNS 구성이 손실됩니다. 그러나 이것은 정확하지 않은 것 같습니다. VM이나 Docker를 사용하여 동일한 결과를 얻을 수 있다고 생각합니다.
답변1
Docker 컨테이너는 해당 구성을 기억합니다. 따라서 설정한 내용은 재부팅할 때 복원되어야 합니다. docker start
그렇지 않으면 자동으로 재부팅됩니다. 따라서 처음에 docker run
.
더 나은 옵션은 다음을 사용하는 것입니다.도커가 작성함실행하려는 항목(네트워킹 포함)을 정확하게 정의하십시오. 이렇게 하면 컨테이너를 삭제하더라도 항상 동일한 구성으로 새 컨테이너를 시작할 수 있습니다.
그러나 Docker는 실제로 가상 머신으로 간주되어서는 안됩니다. 컨테이너는 전체 시스템이 아닌 개별 서비스를 패키지하도록 설계되었습니다.
PHP 5.4.16으로 무언가를 실행해야 하는 경우 php-fpm()과 같은 것을 사용하여 docker 컨테이너 내에서 PHP를 쉽게 실행한 docker pull php:fpm
다음 nginx 또는 apache를 사용하여 제공할 수 있습니다.
원하는 경우 컨테이너에서 실행되는 프로세스와 기본적으로 호스트 시스템에서 실행되는 프로세스를 혼합하여 일치시킬 수 있습니다.
답변2
가상 머신과 컨테이너의 차이점은 상태가 아닙니다.
예, Docker는 구성이 아닌 일부 상태를 잊어버립니다. 하지만 그럴 것이다대개재부팅 시 파일 시스템에 대한 변경 사항이 잊혀집니다. 하지만 이렇게 하지 않도록 구성할 수도 있습니다. 하지만 당신은아마도이것을하고 싶지 않습니다.
주요 차이점은 가상 머신 가상화 하드웨어입니다. 전체 운영 체제를 실행해야 합니다. 컨테이너는 호스트 커널에서 실행됩니다. 네임스페이스(격리된 환경)에서 프로세스를 실행하는 방법입니다. 네임스페이스는 Linux 커널의 일부입니다. Docker는 충분한 권한이 있는 모든 프로세스에서 사용할 수 있는 커널 기능을 사용합니다.
때로는 컨테이너와 가상 머신을 동시에 사용할 수 있습니다. 이는 Linux 컨테이너를 실행할 때 MS-Windows용 Docker가 수행하는 작업입니다.