2014-12-09 17 views
12

Tôi đang thu thập kiến ​​thức về Docker và tôi có các câu hỏi sauNơi giữ Dockerfile trong một dự án?

  • Dockerfile được lưu trong dự án ở đâu?
    • Chúng có được giữ cùng với nguồn không?
    • Chúng có được lưu giữ bên ngoài nguồn không? Bạn có kho lưu trữ Git riêng cho Dockerfile không?

Nếu máy chủ CI nên tạo một hình ảnh mới cho từng xây dựng và chạy mà trên máy chủ thử nghiệm, để bạn giữ hình ảnh trước đó? Ý tôi là, bạn có gắn thẻ hình ảnh trước đó hay bạn xóa hình ảnh trước đó trước khi tạo hình ảnh mới?

Tôi là nhà phát triển Java EE nên tôi sử dụng Maven, Jenkins, v.v ... nếu vấn đề đó.

Trả lời

4

Hạn chế duy nhất về nơi lưu trữ Dockerfile là bất kỳ tệp nào bạn THÊM vào hình ảnh của bạn phải nằm bên dưới Dockerfile trong hệ thống tệp. Tôi thường nhìn thấy chúng ở cấp cao nhất của dự án, mặc dù tôi có một repo kết hợp một loạt các hình ảnh nhỏ, nơi tôi có cái gì đó như

top/ 
    project1/ 
    Dockerfile 
    project1_files 
    project2/ 
    Dockerfile 
    project2_files 

Các Docker Plugin Jenkins có thể trỏ đến một thư mục tùy ý với một Dockerfile, vì vậy thật dễ dàng. Đối với CI, chiến lược phổ biến nhất mà tôi đã thấy là gắn thẻ mỗi hình ảnh được xây dựng với CI là 'mới nhất'. Đây là mặc định nếu bạn không thêm thẻ vào bản dựng. Sau đó, các bản phát hành có được các thẻ của riêng chúng. Vì vậy, nếu bạn chỉ cần chạy một hình ảnh mà không có đối số bạn sẽ có được hình ảnh cuối cùng được xây dựng bởi CI, nhưng nếu bạn muốn một bản phát hành cụ thể thì thật dễ dàng để nói như vậy.

+0

Nhưng bạn cần một Dockerfile cho cơ sở dữ liệu, một cho máy chủ ứng dụng, thùng chứa khối lượng dữ liệu, v.v ...? Làm thế nào để bạn tổ chức điều đó? – LuckyLuke

+0

Với bố cục tôi có ở trên, bạn có thể có các thành phần là các thư mục con, sau đó sử dụng top/fig.yml để khởi chạy và liên kết các thùng chứa với nhau. – seanmcl

1

Tôi khuyên bạn nên giữ Dockerfile với nguồn như bạn làm một tệp makefile.

Vấn đề bối cảnh xây dựng có nghĩa là hầu hết các Dockerfiles được lưu giữ tại hoặc gần mức cao nhất của dự án. Bạn có thể giải quyết vấn đề này bằng cách sử dụng tập lệnh hoặc công cụ xây dựng để sao chép Dockerfiles hoặc thư mục nguồn, nhưng nó hơi khó chịu.

Tôi không biết thực hành tốt nhất về thẻ và CI. Gắn thẻ bằng git băm hoặc tương tự có thể là một giải pháp tốt. Bạn sẽ muốn giữ ít nhất một thế hệ hình ảnh cũ trong trường hợp bạn cần khôi phục.

+1

Nhưng bạn cần một Dockerfile cho cơ sở dữ liệu, một cho máy chủ ứng dụng, thùng chứa khối lượng dữ liệu và như vậy? Làm thế nào để bạn tổ chức điều đó? – LuckyLuke

+1

Bạn có thể sử dụng cùng một Dockerfile cho Cơ sở dữ liệu và các thùng chứa dữ liệu. Nhưng yeah, bạn phải đặt Dockerfiles trong các thư mục riêng biệt hoặc sử dụng công cụ xây dựng để sao chép mọi thứ. –

Các vấn đề liên quan