Docker 컨테이너에서 Docker 작동(dind)
Docker 컨테이너에서 Docker 서비스를 다시 실행하는 것입니다.
컨테이너에서 Docker를 작동시키는 것은 Docker 이미지 구축과 같은 CI 도구에서 매우 일반적입니다.
그러나 이미지 파일 저장 등 컨테이너에서 Docker 서비스를 실행할 때 발생하는 다양한 문제와 중첩된 컨테이너는 유지 관리가 쉽지 않기 때문에 나중에 더 실용적인 또 다른 솔루션이 도출되었습니다. 즉, 호스트 Docker 서비스 양말에 마운트하는 것입니다. p>
이렇게 하면 중첩된 부작용이 발생하지 않으며 빌드 캐시가 여러 호출에서 공유됩니다.
ps: 더 자세한 내용은 docker가 공식적으로 언급한 do-not-use-docker-in-docker-for-ci 기사를 읽어보세요.
다음에는 어떻게 작성하겠습니다. 이를 사용하고 사용 시나리오를 기록합니다.
다음과 같은 요구 사항이 있습니다.
특정 이미지가 업데이트되면 docker에 다시 가져와 배포하도록 알립니다. , 컨테이너가 업데이트되면 업데이트 배포를 위해 자동으로 실행됩니다.
제가 작성한 프로그램은 호스트가 아닌 Docker에서도 실행되므로 방법이 없습니다. 직접 위 명령을 실행하려면 Docker가 필요합니다.
간단히 말해서 다음만 수행하면 됩니다.
그러면 docker ps는 호스트의 모든 컨테이너를 볼 수 있습니다. /p>
p>
예를 들어, 내 것은
물론 이 컨테이너를 구축할 때 여기에 있는 stack.yaml 파일을 추가하거나 마운트해야 하는데 이는 전혀 문제가 되지 않습니다.
프로그램에서 이 CMD를 실행하려는 경우 매우 간단합니다.
프로그램을 작성한 후 이 Dockfile을 사용하여 이미지를 빌드할 수 있습니다.
이 이미지의 스택을 실행합니다. .yaml 파일을 구성하고 마운트해야 합니다.
.docker 폴더를 다시 마운트한 것을 볼 수 있습니다. 이 문제는 나중에 다루겠습니다.
이 매개변수는 버전 17.9 이후에 새로 추가되었으며 최신 이미지를 가져오지 않는 배포 문제를 해결하는 데 사용됩니다.
force docker. 새 이미지를 가져오려면 배포
비공개 웨어하우스에 로그인해야 액세스 권한이 있으므로 먼저 호스트 컴퓨터에 로그인해야 합니다. 로그인에 성공하면 ~에서 새로 생성된 구성 파일을 찾을 수 있습니다. /.docker
, 인증에 필요한 정보가 저장되어 있습니다. 하지만 이 정보는 Docker 컨테이너에서 얻을 수 없으므로 오류가 보고됩니다.
해결 방법은 다음과 같습니다. 구성 파일을 컨테이너에 넣습니다.
문제 설명:
네트워크 구조는 다음과 같습니다.
클라이언트 -> 서버의 Nginx 컨테이너(역방향 생성) -> 애플리케이션
Nginx에서 구성됨
애플리케이션에서 얻은 "HTTP_X_FORWARDED_FOR" 헤더는 클라이언트의 실제 IP가 아닌 10.255.0.2입니다.
해결 방법:
google: docker 10.255.0.2
Get 정보가 꽤 많은데, 그 중 대부분이 Docker가 3~4년 동안 닫지 않은 ISSUE입니다....
현재 사용 가능한 솔루션은