Dari artikel saya tentang Penyebaran Docker Otomatis :
Gambar Docker vs. Kontainer
Di Dockerland, ada gambar dan ada wadah . Keduanya terkait erat, tetapi berbeda. Bagi saya, memahami dikotomi ini telah memperjelas Docker.
Apa itu Gambar?
Sebuah gambar adalah file yang lembam, tidak dapat diubah, yang pada dasarnya merupakan snapshot dari sebuah wadah. Gambar dibuat dengan perintah build , dan mereka akan menghasilkan wadah ketika dimulai dengan menjalankan . Gambar disimpan dalam registri Docker seperti registry.hub.docker.com . Karena mereka dapat menjadi sangat besar, gambar dirancang untuk terdiri dari lapisan-lapisan gambar lain, memungkinkan jumlah minimal data yang akan dikirim ketika mentransfer gambar melalui jaringan.
Gambar lokal dapat didaftar dengan menjalankan docker images
:
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
ubuntu 13.10 5e019ab7bf6d 2 months ago 180 MB
ubuntu 14.04 99ec81b80c55 2 months ago 266 MB
ubuntu latest 99ec81b80c55 2 months ago 266 MB
ubuntu trusty 99ec81b80c55 2 months ago 266 MB
<none> <none> 4ab0d9120985 3 months ago 486.5 MB
Beberapa hal yang perlu diperhatikan:
- ID IMAGE adalah 12 karakter pertama dari pengidentifikasi sebenarnya untuk suatu gambar. Anda dapat membuat banyak tag dari gambar yang diberikan, tetapi ID mereka semua akan sama (seperti di atas).
- UKURAN VIRTUAL adalah virtual karena menambah ukuran semua lapisan dasar yang berbeda. Ini berarti bahwa jumlah semua nilai dalam kolom itu mungkin jauh lebih besar daripada ruang disk yang digunakan oleh semua gambar itu.
- Nilai dalam kolom REPOSITORY berasal dari
-t
flag docker build
perintah, atau dari docker tag
-ing gambar yang ada. Anda bebas memberi tag pada gambar menggunakan nomenklatur yang masuk akal bagi Anda, tetapi ketahuilah bahwa buruh pelabuhan akan menggunakan tag sebagai lokasi registri di suatu docker push
atau docker pull
.
- Bentuk lengkap dari tag adalah
[REGISTRYHOST/][USERNAME/]NAME[:TAG]
. Untuk di ubuntu
atas, REGISTRYHOST disimpulkan sebagai registry.hub.docker.com
. Jadi, jika Anda berencana untuk menyimpan gambar Anda dipanggil my-application
dalam registri di docker.example.com
, Anda harus menandai gambar itu docker.example.com/my-application
.
- Kolom TAG hanya bagian [: TAG] dari tag lengkap . Ini adalah terminologi yang tidak menguntungkan.
- The
latest
tag tidak magis, itu hanya tag default ketika Anda tidak menentukan tag.
- Anda dapat memiliki gambar yang tidak ditandai hanya dapat diidentifikasi oleh ID IMAGE mereka. Ini akan mendapatkan
<none>
TAG dan REPOSITORI. Sangat mudah untuk melupakannya.
Informasi lebih lanjut tentang gambar tersedia dari dokumentasi Docker dan glosarium .
Apa itu wadah?
Untuk menggunakan metafora pemrograman, jika gambar adalah kelas, maka wadah adalah turunan dari kelas — objek runtime. Kontainer semoga menjadi alasan Anda menggunakan Docker; mereka enkapsulasi ringan dan portabel dari suatu lingkungan di mana untuk menjalankan aplikasi.
Lihat wadah lari lokal dengan docker ps
:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f2ff1af05450 samalba/docker-registry:latest /bin/sh -c 'exec doc 4 months ago Up 12 weeks 0.0.0.0:5000->5000/tcp docker-registry
Di sini saya menjalankan versi docker dari registry docker, sehingga saya memiliki tempat pribadi untuk menyimpan gambar saya. Sekali lagi, beberapa hal yang perlu diperhatikan:
- Seperti ID IMAGE, ID KONTAINER adalah pengidentifikasi sebenarnya untuk wadah. Ini memiliki bentuk yang sama, tetapi mengidentifikasi jenis objek yang berbeda.
docker ps
hanya menghasilkan wadah yang berjalan . Anda dapat melihat semua wadah ( berjalan atau berhenti ) dengan docker ps -a
.
- NAMES dapat digunakan untuk mengidentifikasi wadah yang dimulai melalui
--name
bendera.
Bagaimana menghindari penumpukan gambar dan wadah
Salah satu frustrasi awal saya dengan Docker adalah penumpukan gambar tanpa tanda yang tampaknya konstan dan menghentikan wadah . Pada beberapa kesempatan, penumpukan ini menghasilkan hard drive yang maksimal memperlambat laptop saya atau menghentikan jalur pipa otomatis saya. Bicara tentang "wadah di mana-mana"!
Kami dapat menghapus semua gambar yang tidak ditandai dengan menggabungkan docker rmi
dengan dangling=true
permintaan terbaru :
docker images -q --filter "dangling=true" | xargs docker rmi
Docker tidak akan dapat menghapus gambar yang berada di belakang wadah yang ada, jadi Anda mungkin harus menghapus wadah yang dihentikan dengan docker rm
terlebih dahulu:
docker rm `docker ps --no-trunc -aq`
Ini adalah poin rasa sakit yang diketahui dengan Docker dan dapat diatasi dalam rilis mendatang. Namun, dengan pemahaman yang jelas tentang gambar dan wadah, situasi ini dapat dihindari dengan beberapa praktik:
- Selalu keluarkan wadah yang tidak berguna dan terhenti
docker rm [CONTAINER_ID]
.
- Selalu hapus gambar di belakang wadah yang tidak berguna dan terhenti
docker rmi [IMAGE_ID]
.