Dalam Docker, bahagian yang paling disalahfahamkan mestilah label terkini. Kekeliruan itu kebanyakannya disebabkan oleh nama, kerana makna literal tidak menyampaikan maksud sebenar. Dalam artikel ini, mari kita pelajari apa sebenarnya teg terkini dan cara menggunakannya dengan betul.
Biasanya terdapat dua cara untuk menandai imej: gunakan perintah tag docker atau gunakan -t untuk menghantar parameter semasa melaksanakan binaan docker. Dalam kedua-dua kes, parameter biasanya dalam bentuk repository_name:tag_name, contohnya: docker tag myrepo:mytag. Jika repositori ini dimuat naik ke Docker Hub, nama repositori akan diawali dengan nama pengguna Docker Hub dan garis miring, contohnya: amouat/myrepo:mytag. Jika tiada parameter dalam bahagian teg ditambahkan, contohnya: docker tag myrepo:1.0 myrepo, Docker akan memberikan teg terkini secara automatik. Anda mungkin sudah biasa dengan kandungan di atas, tetapi sebenarnya, ia hanya mengandungi kandungan ini, dan tiada apa-apa yang ajaib mengenainya.
Hanya kerana teg imej adalah "terkini" tidak bermakna ia adalah imej terkini dalam pustaka sumber. Hanya jika pemilik pustaka sumber ini bersetuju, imej dengan label terkini mestilah imej terkini. Contohnya, saya boleh menukar imej lapuk dengan mudah kepada imej dengan tag terkini, contohnya:
Imej dengan tag terkini di sini adalah sama dengan imej versi 0.9, iaitu dua minggu lalu, tetapi imej 1.0 adalah seminit yang lalu.
Mengapa label ini mengelirukan ramai orang sebenarnya lebih mudah difahami. 'tarik sahaja imej terkini' adakah ayat ini bermaksud mendapatkan imej dengan tag terkini atau mendapatkan imej terkini? Adakah dua ini sama? Adakah ia imej terkini dalam repositori? Adakah ia imej versi stabil terkini atau imej versi pembangunan terkini?
Apa yang lebih teruk ialah ramai orang seolah-olah berfikir bahawa label terbaharu akan dikemas kini secara automatik, yang bermaksud bahawa jika saya mendapat imej dengan label terkini, Docker akan menyemak sama ada ia adalah versi terkini sebelum setiap larian. Ini tidak akan berlaku, dan seperti teg lain, anda perlu memutuskan secara manual sama ada Docker akan mendapat versi terkini imej.
Kekeliruan tidak berhenti di situ. Apakah yang berlaku jika saya berlabuh menarik imej daripada repositori tanpa menyatakan teg? Jika anda fikir ia akan mendapat semua imej, anda silap, ia hanya akan mendapat yang mempunyai label terkini. Jika anda perlu mendapatkan semua imej, anda perlu menambah bendera -a. Apakah yang akan berlaku jika anda melakukan operasi tarik pada pustaka sumber tanpa teg terkini? Seperti yang ditunjukkan di bawah:
$ docker pull amouat/myrepo Pulling repository amouat/myrepo 2015/01/21 12:04:06 Tag latest not found in repository amouat/myrepo
Tanpa diduga, Docker memberikan mesej ralat. Tetapi saya rasa anda tidak tahu apa yang berlaku. Salah satu perkara yang lebih menjengkelkan ialah teg terkini menyembunyikan teg lain. Katakan anda ingin memuat turun imej debian dengan teg terkini. Versi yang mana?
$ docker images debian REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE debian latest 4d6ce913b130 4 days ago 84.98 MB
Em, saya tidak tahu. Malah ia adalah versi 7.8 wheezy.
Saya rasa Docker harus meletakkan semua teg semasa memuat turun imej, tetapi saya tidak tahu mengapa ia tidak melakukan ini. Apa yang berlaku sekarang ialah pengguna boleh mempunyai versi yang berbeza bagi imej yang sama kerana mereka dilabelkan pada pelayan. Contohnya: Jika kedua-dua wheezy dan terkini dikemas kini pada Hub, dan saya hanya mendapat versi debian wheezy yang dikemas kini, maka walaupun ia boleh dibezakan pada Hub, tag wheezy saya akan menjadi lebih kecil daripada versi tempatan teg baharu .
Di atas hanya merangkumi kebanyakan semantik terkini dan salah faham biasa yang ditimbulkannya. Bagaimanakah keadaan ini boleh diperbaiki? Secara peribadi, saya rasa teg terbaharu boleh dibatalkan dan digantikan dengan perkataan yang lebih dekat dengan makna literalnya, seperti lalai. Saya juga ingin melihat beberapa usaha untuk menambah baik cara teg dicipta, seperti mengemas kini semua teg untuk imej pada masa yang sama. Pada masa yang sama, saya juga amat mengesyorkan agar pentadbir repositori berhati-hati dengan teg terkini dan meninggalkannya sepenuhnya.
Atas ialah kandungan terperinci Apakah peranan teg terkini dalam Docker?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!