2016-06-03 14 views
0

apt 패키지 foo을 포함하는 foo이라는 고정 이미지를 만듭니다. foo은 이미지 내부에서 장기간 실행되는 서비스이므로 이미지가 자주 다시 시작되지 않습니다. 컨테이너 내부의 패키지를 업데이트하는 가장 좋은 방법은 무엇입니까?Docker 이미지의 소프트웨어 업데이트 처리

나는 그들이 실행중인 foo의 버전으로 내 이미지에 태그를 컨테이너 내부의 패키지의 특정 버전을 설치 (예 apt-get install foo=0.1.0을 내 용기 foo:0.1.0 태그)하지만이 패키지의 버전을 추적하는 데 의미 수 패키지가 업데이트 될 때마다 새로운 이미지/태그를 생성합니다. 나는 그것을 자동화하는 방법이 있다면 나는 이것으로 완벽하게 행복 할 것이지만 나는 이것과 같은 것을 아직 보지 못했다.

다른 방법은 컨테이너를 시작할 때 패키지를 설치 (및 업데이트)하는 것입니다. 그러나 이는 이미지가 새 컨테이너인지 아니면 기존 컨테이너를 시작할 것인지에 따라 컨테이너 시작이 달라질 수 있습니다. 현재이 방법을 사용하고 있지만 더 큰 패키지에서는 지연이 다소 성가신 일입니다.

이 문제를 처리하는 가장 객관적인 방법은 무엇입니까? 컨테이너가 시작되어 업데이트 될 때까지 기다리는 것은 이상적이지 않습니다.

답변

3

컨테이너에서 항목을 업데이트해야하는 경우 새 컨테이너를 만들어야합니다. C 또는 Java와 마찬가지로 컨테이너를 정적으로 컴파일 된 바이너리라고 생각하십시오. 컨테이너 안의 모든 것이 종속됩니다. 종속성을 업데이트해야하는 경우 새 버전을 다시 컴파일하고 릴리스합니다.

시작시 컨테이너의 내용을 변경하면 Docker의 모든 이점을 잃게됩니다. 추적 가능한 빌드 프로세스가 있으며 각 컨테이너는 어디에서나 복사 할 때마다 검증 가능한 비트 단위로 동일합니다.

이제 foo으로 업데이트해야하는 이유를 알려 드리겠습니다. 일반 응용 프로그램 배포주기 외의 종속성을 업데이트해야하는 유일한 이유는 보안 취약점을 패치하는 것입니다. 우분투가 방금 보안 패치를 발표했다는 CVE 통지가 있다면 우분투를 기반으로 모든 컨테이너를 재 구축해야합니다.

게시 된 CVE에 취약한 컨테이너를 검색하고 알려주는 서비스가 여러 가지 있습니다. 예를 들어 Quay.ioDocker Hub은 레지스트리에서 컨테이너를 검색합니다. Quay가 내부에서 사용하는 Clair을 사용하여 직접 수행 할 수도 있습니다.

다른 유형의 업데이트는 무시하십시오. Docker는 응용 프로그램과 실행되는 OS에 대한 100 % 화석화 전략입니다.

Docker 컨테이너는 약간 다른 라이브러리 버전이 설치된 1000 개의 호스트에 복사하더라도 작동하거나 다른 라이브러리 버전이 설치된 다른 컨테이너와 함께 실행됩니다. 의존성을 더 이상 인터넷에서 다운로드 할 수 없더라도 컨테이너는 2 년 후에도 계속 작동합니다.

어떤 이유로 당신은 처음부터 용기 (예를 들어 이미 2 세의 모든 의존성이 실종) 다음 그래, 당신 , 컨테이너를 다운로드 할 수 있습니다 대화 형으로 실행 및 업데이트를 다시하지 경우 의존성. 쉘에서 이것을 수행 한 다음 새 버전의 컨테이너를 다시 레지스트리에 게시하고 다시 배포하십시오. 시작할 때이 작업을 수행하지 마십시오.

+0

'foo'를 업데이트하는 이유는 최신 버전의 서비스, 특히 버전이 오래 되었다면 알려주는 서비스가 더 좋습니다. 정적 엔티티로 컨테이너를 처리해야한다는 것을 알지 못했지만 의미가 있습니다. 정적 버전과 태그가있는 컨테이너 생성 자동화에 대해 살펴 보겠습니다. 감사합니다! –