2014-12-09 4 views
12

나는 부두 노동자에 대한 지식을 얻고, 그리고 난 다음 질문 프로젝트에서 Dockerfile을 어디에 보관해야합니까?

  • 이 어디 Dockerfile의 프로젝트에 보관?
    • 소스와 함께 보관되어 있습니까?
    • 소스 외부에 보관되어 있습니까? Dockerfile만을위한 Git 저장소가 있습니까?

는 각 빌드에 대한 새로운 이미지를 생성하고 테스트 서버에서 그것을 실행해야 CI 서버, 당신은 이전 이미지를 유지하는 경우? 이전 이미지를 태그하기 전에 새로운 이미지를 만들거나 이전 이미지를 삭제합니까?

저는 Java EE 개발자이므로 Maven, Jenkins 등을 사용합니다.

답변

4

Dockerfile이 보관되는 위치에 대한 유일한 제한은 이미지에 추가 한 모든 파일이 파일 시스템의 Dockerfile 아래에 있어야한다는 것입니다. 나는 일반적으로 프로젝트의 최상위 수준에 그들을 볼 나는 젠킨스 고정 표시기 플러그인은 Dockerfile와 임의의 디렉토리를 가리킬 수 있습니다

top/ 
    project1/ 
    Dockerfile 
    project1_files 
    project2/ 
    Dockerfile 
    project2_files 

같은이 작은 이미지의 무리를 결합하는 환매 특약이 있으므로 불구하고 그건 쉽지. CI의 경우 가장 많이 보았던 전략은 CI로 작성된 각 이미지에 '최신'태그를 지정하는 것입니다. 빌드에 태그를 추가하지 않으면 이것이 기본값입니다. 그런 다음 릴리스에서 자체 태그를 얻습니다. 따라서 인수가없는 이미지 만 실행하면 CI가 만든 마지막 이미지를 얻을 수 있지만 특정 릴리스를 원할 경우 그렇게 말하기 쉽습니다.

+0

데이터베이스 용 Dockerfile이 필요 하나, 응용 프로그램 서버, 데이터 볼륨 컨테이너 등이 필요합니까? 어떻게 구성합니까? – LuckyLuke

+0

위의 레이아웃을 사용하면 하위 디렉토리로 구성 요소를 가져온 다음 top/fig.yml을 사용하여 컨테이너를 함께 실행하고 연결할 수 있습니다. – seanmcl

1

메이크 파일처럼 Dockerfile을 소스로 유지하는 것이 좋습니다.

빌드 컨텍스트 문제는 대부분의 Docker 파일이 프로젝트의 최상위 수준 또는 그 근처에 보관된다는 것을 의미합니다. 스크립트를 사용하거나 Dockerfiles 또는 원본 폴더를 복사하기위한 도구를 사용하여이 문제를 해결할 수 있지만 다소 고통 스럽습니다.

태그와 CI에 대한 모범 사례를 알지 못합니다. git 해시 또는 이와 유사한 태그를 사용하면 좋은 해결책이 될 수 있습니다. 롤백해야 할 경우에 대비하여 오래된 이미지를 적어도 한 세대 이상 보관해야합니다.

+1

하지만 데이터베이스 용 Dockerfile 하나, 응용 프로그램 서버용, 데이터 볼륨 컨테이너 용 등이 필요합니까? 어떻게 구성합니까? – LuckyLuke

+1

데이터베이스 및 데이터 컨테이너에 대해 동일한 Dockerfile을 사용할 수 있습니다. 하지만 네, Dockerfiles를 별도의 디렉토리에 두거나 빌드 툴을 사용하여 내용을 복사해야합니다. –

관련 문제