Jak mogę stworzyć własny obraz podstawowy dla platformy Docker?

97

Zgodnie z dokumentacją Dockera , aby zbudować własny obraz, należy zawsze określić obraz podstawowy za pomocą FROMinstrukcji.

Oczywiście w indeksie Dockera jest wiele obrazów do wyboru , ale co jeśli chcę zbudować własne? Czy to jest możliwe?

Obraz basejest zbudowany na Ubuntu, jeśli dobrze rozumiem i chcę poeksperymentować z obrazem Debiana. Poza tym chcę naprawdę zrozumieć, jak działa Docker, a baseobraz nadal jest dla mnie czarną skrzynką.


Edycja: oficjalna dokumentacja dotycząca tworzenia obrazu podstawowego

Flimm
źródło
Nieważne. :-) Pytania tutaj nadal muszą być na temat, zgodnie z wytycznymi strony. Są omówione na stronach Centrum pomocy i wycieczek . (Wydaje się, że odsyłacz tam również odnosi się do twórców kontenerów Docker.) Jeśli pytasz o własny obraz kontenera, na ich stronie
Ken White,
@KenWhite: odpowiednie pytanie meta: meta.stackexchange.com/questions/179249/…
Flimm
:-) Odpowiednia meta odpowiedź w tym momencie, która jest odpowiedzią tuż nad twoją. (Zobacz zwłaszcza drugi komentarz do odpowiedzi, którą połączyłem, dotyczący jasności tego, o co chodzi w twoim pytaniu.)
Ken White,
9
@Ken White: pytanie brzmi, jak „zrobić” obraz bazowy, a nie jak wdrożyć „obraz”. Flimm próbuje zaprogramować coś, co może zostać wdrożone później, przez niego lub przez innych. Amazon EC2 jest związany z wdrożeniem, ale myślę, że nadal mają kilku programistów programujących rzeczy programistyczne :). Powiedziałbym, że tworzenie obrazów bazowych jest przykładem programu.
qkrijger
@qkrijger: To jest omawiane w powiązanym pytaniu meta. Ponieważ ta dyskusja jest otwarta, prosimy o umieszczanie w niej wszelkich dyskusji na temat aktualności (jeśli wydaje się, że nie jest to temat „programowy”).
Ken White,

Odpowiedzi:

38

Możesz przyjrzeć się, jak tworzone są obrazy podstawowe i przejść od tego miejsca.

Znajdziesz je tutaj: https://github.com/dotcloud/docker/tree/master/contrib . Istnieje mkimage-busybox.sh, mkimage-unittest.sh, mkimage-debian.sh

trzeszczenie
źródło
1
Skrypty mkimage- * zostały przeniesione i przemianowane (podobnie jak oficjalne repozytorium) na tutaj
tsalaroth
32

Cytując Solomona Hykesa :

Możesz łatwo utworzyć nowy kontener z dowolnego archiwum tar za pomocą "importu z Dockera". Na przykład:

debootstrap raring ./rootfs
tar -C ./rootfs -c . | docker import - flimm/mybase
Flimm
źródło
Być może zamiast tego opublikuj zmianę / aktualizację w komentarzu, aby inni mogli ją zobaczyć i być może ktoś będzie mógł ponownie przesłać zmianę.
Bdoserror
1
@Flimm Dlaczego miałbym używać sudo w tym przypadku? Uruchom te polecenia w katalogu użytkownika i nie powinieneś mieć powodu do podnoszenia uprawnień. Tworzysz obraz, a nie instalujesz go.
rancidfishbreath
Nie potrzebujesz też roota do normalnego używania Dockera; po prostu dodaj siebie do dockergrupy.
tekknolagi
1
Ale myślnik w poleceniu importu, zalecany przez Flimma, jest konieczny: docker import - flimm/mybasezamiastdocker import flimm/mybase
Daniel Alder
Na własność plików w tar będzie miało wpływ to, czy pracujesz jako root, czy nie. Jeśli nie jako root, a następnie debootstrapi tarpowinien przynajmniej zostać uruchomiony pod fakeroot.
clacke
21

(Credit to fatherlinux) Uzyskaj informacje z http://developerblog.redhat.com/2014/05/15/practical-introduction-to-docker-containers/ , co wyjaśnia lepiej

  1. Utwórz pliki tar dla swojego systemu plików, po prostu może to być

    tar --numeric-owner --exclude=/proc --exclude=/sys -cvf centos6-base.tar /
    
  2. Przenieś plik tar do innego systemu Docker, jeśli nie jest zainstalowany lokalnie, i importto

    cat centos6-base.tar | docker import - centos6-base
    
  3. Teraz możesz zweryfikować, uruchamiając go.

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

Te skrypty z dotcloud połączyć razem dwa pierwsze etapy, które czynią mnie zdezorientowany i bardzo skomplikowane na początku.

Doker oficjalne wytyczne korzystania debootstraprównież stara się czysty system plików.

Możesz samodzielnie ocenić, jak wykonać krok 1.

Larry Cai
źródło
14

Aby rozpocząć tworzenie własnego obrazu od podstaw, możesz użyć scratchobrazu.

Użycie „obrazka” podstawki sygnalizuje procesowi kompilacji, że następne polecenie w pliku Dockerfile ma być pierwszą warstwą systemu plików w obrazie.

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

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

Mikrofon
źródło
1
Ten plus importz pliku tar, to dwie odpowiedzi kanoniczne, a ten link to zasób kanoniczny.
clacke
7

Jeśli chcesz stworzyć swój własny obraz podstawowy, najpierw przyjrzę się oficjalnym obrazom , szczególnie stackbreww tym repozytorium.

W przeciwnym razie istnieje kilka świetnych odniesień do minimalnych obrazów systemu operacyjnego w samym repozytorium Dockera .

Na przykład tutaj jest skrypt do tworzenia minimalny arch obraz i istnieje więcej tutaj .

Jessie Frazelle
źródło