Bagaimana cara membuat gambar dasar saya sendiri untuk Docker?

97

Menurut dokumentasi Docker , untuk membuat image Anda sendiri, Anda harus selalu menentukan image dasar menggunakan FROMinstruksi.

Jelas, ada banyak gambar yang dapat dipilih di indeks Docker , tetapi bagaimana jika saya ingin membuatnya sendiri? Apakah itu mungkin?

Gambar basedibuat dari Ubuntu jika saya memahaminya dengan benar, dan saya ingin bereksperimen dengan image Debian. Plus, saya ingin benar-benar memahami cara kerja Docker, dan baseimage tersebut masih menjadi blackbox bagi saya.


Edit: dokumentasi resmi tentang pembuatan gambar dasar

Flimm
sumber
Tidak masalah. :-) Pertanyaan di sini masih harus sesuai topik sesuai dengan pedoman situs. Mereka tercakup di pusat bantuan dan halaman tur . (Tautan di sana tampaknya juga berkaitan dengan pengembang kontainer Docker.) Jika Anda bertanya tentang gambar kontainer Anda sendiri, ada alat untuk itu di situs mereka
Ken White
@KenWite: pertanyaan meta yang relevan: meta.stackexchange.com/questions/179249/…
Flimm
:-) Jawaban meta yang relevan saat ini, yang merupakan jawaban tepat di atas jawaban Anda. (Lihat terutama komentar kedua untuk jawaban yang saya tautkan, tentang kejelasan pertanyaan Anda.)
Ken White
9
@Ken White: pertanyaannya adalah bagaimana 'membuat' gambar dasar, bukan bagaimana menyebarkan 'gambar'. Flimm mencoba memprogram sesuatu yang dapat digunakan setelah itu, oleh dia atau orang lain. Amazon EC2 terkait dengan penerapan, tetapi saya pikir mereka masih memiliki beberapa pemrogram yang memprogram barang-barang saya :). Membuat gambar dasar adalah contoh programmy yang akan saya katakan.
qkrijger
@qkrijger: Ini sedang dibahas dalam pertanyaan meta tertaut. Karena diskusi itu terbuka, silakan posting diskusi apa pun tentang topiknya di sana (di mana konsensus tampaknya bukan topik "programmy stuff").
Ken White

Jawaban:

38

Anda dapat melihat bagaimana gambar dasar dibuat dan pergi dari sana.

Anda dapat menemukannya di sini: https://github.com/dotcloud/docker/tree/master/contrib . Ada mkimage-busybox.sh, mkimage-unittest.sh, mkimage-debian.sh

creack
sumber
1
Skrip mkimage- * telah dipindahkan dan diganti namanya (seperti yang dimiliki repo resmi) ke sini
tsalaroth
32

Mengutip Solomon Hykes :

Anda dapat dengan mudah membuat container baru dari tarball manapun dengan "docker import". Sebagai contoh:

debootstrap raring ./rootfs
tar -C ./rootfs -c . | docker import - flimm/mybase
Flimm
sumber
Mungkin mengeposkan hasil edit / pembaruan dalam komentar sehingga orang lain dapat melihatnya dan mungkin seseorang dapat mengirim ulang hasil edit tersebut.
Bdoserror
1
@Flimm Mengapa saya perlu menggunakan sudo dalam kasus ini? Jalankan perintah ini di direktori pengguna Anda dan Anda seharusnya tidak memiliki alasan untuk peningkatan hak istimewa. Anda membuat gambar, bukan menginstalnya.
rancidfishbreath
Anda juga tidak membutuhkan root untuk penggunaan Docker normal; cukup tambahkan diri Anda ke dockergrup.
tekknolagi
1
Tetapi tanda hubung dalam perintah impor, yang direkomendasikan oleh Flimm diperlukan: docker import - flimm/mybasealih-alihdocker import flimm/mybase
Daniel Alder
Kepemilikan file dalam tar akan dipengaruhi oleh apakah Anda menjalankan sebagai root atau tidak. Jika bukan sebagai root, maka debootstrapdan tarsetidaknya harus dijalankan di bawah fakeroot.
clacke
21

(kredit untuk fatherlinux) Dapatkan informasi dari http://developerblog.redhat.com/2014/05/15/praktis-introduction-to-docker-containers/ , yang menjelaskan lebih baik

  1. Buat file tar untuk sistem file Anda, bisa jadi

    tar --numeric-owner --exclude=/proc --exclude=/sys -cvf centos6-base.tar /
    
  2. Transfer file tar ke sistem buruh pelabuhan lain jika tidak diinstal secara lokal dan importitu

    cat centos6-base.tar | docker import - centos6-base
    
  3. Sekarang Anda dapat memverifikasi dengan menjalankannya.

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

The script dari dotcloud menggabungkan dua langkah pertama bersama-sama yang membuat saya bingung dan terlihat rumit pada awalnya.

Buruh pelabuhan pedoman resmi menggunakan debootstrapjuga mencoba untuk membuat sistem file yang bersih.

Anda dapat menilai sendiri bagaimana melakukan langkah 1.

Larry Cai
sumber
14

Untuk mulai membangun gambar Anda sendiri dari awal, Anda dapat menggunakan scratchgambar tersebut.

Menggunakan "image" awal memberi sinyal ke proses build bahwa Anda ingin perintah berikutnya di Dockerfile menjadi lapisan sistem file pertama di image Anda.

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

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

Mike
sumber
1
Nilai plus ini importdari file tar, adalah dua jawaban kanonik, dan tautan itu adalah sumber daya kanonik.
clacke
7

Jika Anda ingin membuat gambar dasar Anda sendiri, pertama-tama saya akan melihat Gambar Resmi , khususnya stackbrewdi dalam repo itu.

Jika tidak, ada beberapa referensi bagus untuk gambar OS minimal di repo buruh pelabuhan itu sendiri.

Contohnya disini ada script untuk membuat gambar arch yang minimal dan masih ada lagi disini .

Jessie Frazelle
sumber