Làm cách nào để tạo hình ảnh cơ sở của riêng tôi cho Docker?


97

Theo tài liệu Docker , để xây dựng hình ảnh của riêng bạn, bạn phải luôn chỉ định hình ảnh cơ sở bằng cách sử dụng FROMhướng dẫn.

Rõ ràng, có rất nhiều hình ảnh để lựa chọn trong chỉ mục Docker , nhưng nếu tôi muốn tạo hình ảnh của riêng mình thì sao? Điều đó có thể không?

Hình ảnh baseđược xây dựng trên Ubuntu nếu tôi hiểu đúng và tôi muốn thử nghiệm với hình ảnh Debian. Ngoài ra, tôi muốn thực sự hiểu cách Docker hoạt động và basehình ảnh vẫn là một hộp đen đối với tôi.


Chỉnh sửa: tài liệu chính thức về cách tạo hình ảnh cơ sở


Không thành vấn đề. :-) Các câu hỏi ở đây vẫn phải có chủ đề theo hướng dẫn của trang web. Chúng được đề cập trên trung tâm trợ giúp và các trang tham quan . (Các liên kết cũng dường như liên quan đến các nhà phát triển của container Docker.) Nếu bạn đang hỏi về hình ảnh chứa riêng của bạn, có một công cụ cho điều đó trên trang web của họ
Ken trắng

@KenWhite: câu hỏi meta có liên quan: meta.stackexchange.com/questions/179249/…
Flimm,

:-) Câu trả lời meta có liên quan tại thời điểm này, đó là câu trả lời ngay phía trên của bạn. (Xem đặc biệt là những nhận xét thứ hai để câu trả lời tôi liên kết, về sự rõ ràng về những gì câu hỏi của bạn được yêu cầu.)
Ken trắng

9
@Ken White: câu hỏi là làm thế nào để 'tạo' một hình ảnh cơ sở, không phải làm thế nào để triển khai một 'hình ảnh'. Flimm đang cố gắng lập trình một thứ gì đó có thể được triển khai sau đó bởi anh ta hoặc bởi những người khác. Amazon EC2 liên quan đến triển khai, nhưng tôi nghĩ họ vẫn có một vài lập trình viên lập trình công cụ lập trình :). Tạo hình ảnh cơ sở là một ví dụ về những thứ tôi muốn nói.
qkrijger

@qkrijger: Điều này đang được thảo luận trong câu hỏi meta được liên kết. Vì cuộc thảo luận đó là mở, vui lòng đăng bất kỳ cuộc thảo luận nào về tính thời sự ở đó (trong đó sự đồng thuận dường như không phải là chủ đề "nội dung chương trình").
Ken White,

Câu trả lời:



32

Trích dẫn Solomon Hykes :

Bạn có thể dễ dàng tạo một vùng chứa mới từ bất kỳ tarball nào với "docker import". Ví dụ:

debootstrap raring ./rootfs
tar -C ./rootfs -c . | docker import - flimm/mybase

Thay vào đó, có thể đăng bản chỉnh sửa / cập nhật trong một nhận xét để người khác có thể nhìn thấy nó và có lẽ ai đó có thể gửi lại bản chỉnh sửa.
Bdoserror

1
@Flimm Tại sao tôi cần sử dụng sudo trong trường hợp này? Chạy các lệnh này trong thư mục người dùng của bạn và bạn sẽ không có lý do gì để nâng đặc quyền. Bạn đang tạo một hình ảnh, không phải cài đặt nó.
rancidfishbreath

Bạn cũng không cần root để sử dụng Docker bình thường; chỉ cần thêm chính bạn vào dockernhóm.
tekknolagi

1
Nhưng dấu gạch nối trong lệnh nhập, do Flimm đề xuất là cần thiết: docker import - flimm/mybasethay vìdocker import flimm/mybase
Daniel Alder

Quyền sở hữu các tệp trong tar sẽ bị ảnh hưởng bởi việc bạn có đang chạy dưới quyền root hay không. Nếu không phải là root, thì debootstraptarít nhất phải được chạy dưới fakeroot.
clacke

21

(tín dụng cho fatherlinux) Nhận thông tin từ http://developerblog.redhat.com/2014/05/15/practical-introduction-to-docker-containers/ , giải thích rõ hơn

  1. Tạo các tệp tar cho hệ thống tệp của bạn, đơn giản có thể là

    tar --numeric-owner --exclude=/proc --exclude=/sys -cvf centos6-base.tar /
    
  2. Chuyển tệp tar sang hệ thống docker khác nếu không được cài đặt cục bộ và import

    cat centos6-base.tar | docker import - centos6-base
    
  3. Bây giờ bạn có thể xác minh bằng cách chạy nó.

    docker run -i -t centos6-base cat /etc/redhat-release
    

Các tập lệnh từ dotcloud kết hợp hai bước đầu tiên với nhau khiến tôi bối rối và có vẻ phức tạp khi bắt đầu.

Hướng dẫn chính thức của docker sử dụngdebootstrap cũng cố gắng tạo hệ thống tệp sạch.

Bạn có thể tự đánh giá cách làm của bước 1.


14

Để bắt đầu xây dựng hình ảnh của riêng bạn từ đầu, bạn có thể sử dụng scratchhình ảnh.

Sử dụng các tín hiệu “hình ảnh” đầu tiên cho quá trình xây dựng mà bạn muốn lệnh tiếp theo trong Dockerfile là lớp hệ thống tệp đầu tiên trong hình ảnh của bạn.

FROM scratch
ADD hello /
CMD ["/hello"]

http://docs.docker.com/engine/articles/baseimages/#creating-a-simple-base-image-using-scratch


1
Điểm cộng importtừ tệp tar là hai câu trả lời chính tắc và liên kết đó là tài nguyên chính tắc.
clacke

7

Nếu bạn muốn tạo hình ảnh cơ sở của riêng mình, trước tiên tôi sẽ xem qua Hình ảnh chính thức , cụ thể làstackbrew bên trong repo đó.

Nếu không, có một số tài liệu tham khảo tuyệt vời cho các hình ảnh hệ điều hành tối thiểu trong kho lưu trữ docker chính .

Ví dụ đây là một kịch bản để tạo một hình ảnh vòm tối thiểu và có nhiều hơn nữa ở đây .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.