4

하루에 5-10 번 배포하는 경우 배포 할 때마다 이미지를 완전히 다시 만들고 밀어 넣는 것이 정말 실용적입니까? 탄성 콩 줄기는 대신 내장 된 이미지의 Dockerfile 및 관련 소스 코드를 배포 할 수 있다는Docker는 매번 빌드/푸시합니다. 지속적인 배포에는 실용적입니까?

참고하지만, 이미지를 미리 구축 : CircleCI의 Continuous Integration and Delivery with Docker에서 언급 한 바와 같이

나는 즉, 장점을 인정 CircleCI를 사용하고 검증 형식을 실행하면 테스트 환경과 생산 환경이 다른 변수로 빌드 환경을 제거하기 때문에 배치가보다 결정적이 될 수 있습니다.

그러나 모든 의존성과 소스 코드가 포함되면 Google의 완전하게 구축 된 webapp 이미지는 1GB에 가깝습니다. 실제적으로 99 %가 빌드간에 변경되지 않을 때 최대 200GB/월 (일일 10 커밋, 지속적으로 배포)로 배포하는 것이 실용적인 것은 아닙니다. 즉, 기능을 추가하기 위해 변경된 HTML, JS 또는 CSS의 가치가 1k에 불과할 수 있습니다. 도커 이미지에 드물게 변경된 소프트웨어가 포함되어 있고 나머지는 번들의 일부로 압축 된 방식을 선호합니다. 이것은 여전히 ​​자체 포함 된 배포 파일 (더 이상의 종속성을 다운로드하지 않아도 됨)을 발생 시키지만 빌드 시간과 대역폭을 크게 줄입니다.

+2

그런 다음 static (ish) 항목과 그로부터 파생 된 최종 파일로 상위 dockerfile을 만듭니다. Major-Minor 버전. – user2105103

+0

또는 물론 정확히 설명한대로 할 수 있습니다. 그것은 당신에게 달려 있습니다. 또는 git을 트리거 된 풀/정지 이미지와 함께 사용하십시오. 또는 .. – user2105103

답변

2

현재 허용되는 접근 방식은 컴퓨터 이미지 내의 종속성, 운영 체제 등을 포함하는 기본 Docker 이미지를 포함하는 것입니다. 해당 Docker 이미지를 Dockerfile의 FROM 행으로 사용하십시오. 이렇게하면 Docker의 이미지 레이어를 활용하고 차이점 만 다운로드합니다.

자식 Docker 파일에 종속성을 설치하는 것은 시간이 지남에 따라 변경되기 때문에 계속 설치할 수 있지만 다운로드하는 횟수가 적어 지도록 기본 이미지에 유지해야합니다.

+0

node.js와 같은 환경에서 '의존성'을 어떻게 정의합니까? 즉 node.js 버전 (0.10.32 등)까지 또는'node_modules'를 포함합니까? 나는'node_modules'를 내장 된 이미지의 일부로 포함할지 여부를 결정하기 위해 아직 울타리에 있습니다. 그들은 나머지 부분보다 훨씬 더 많이 변할 수 있습니다. – rgareth

+0

이미지에 node_modules를 포함합니다. 사실 나는 node_modules가 repo에 체크인되어야한다는 [이 다소 허식적인 블로그 게시물] (http://www.futurealoof.com/posts/nodemodules-in-git.html)에 의해 확신합니다. 그렇게한다면 Dockerfile에 npm을 설치할 필요가 없습니다. 빌드 컨텍스트는 커지지 만 빌드시에는 설치할 필요가 없습니다. –

+0

프로덕션 환경에서'npm install'을 실행하는 것은 좋지 않은 생각이지만, 아직 repo에 node_modules를 적용하는 것은 확실하지 않습니다. CI 서버 테스트를 한 다음 노드 모듈을 번들로 만들면 최소한 프로덕션이 테스트와 동일하고 내 번들이 완전히 자체 포함되어 프로덕션 서버에 도달하면 추가로 외부 다운로드가 필요하지 않음을 확신 할 수 있습니다. 또한 번들을 아카이브하면 npm 가용성에 대해 걱정하지 않고 언제든지 롤백 할 수 있습니다. – rgareth

관련 문제