Bagaimana cara mendorong tumpukan Docker Compose ke Docker Swarm tanpa mengunggah kontainer ke registri?

Saya sudah meneliti sebelum bertanya di sini, tetapi semua jawaban membawa saya pada kesimpulan yang sama:

  1. Bangun tumpukan Docker Compose Anda secara lokal
  2. Tandai dan dorong gambar ke registri (baik yang pribadi atau publik seperti Docker Hub)
  3. Dorong tumpukan ke gerombolan menggunakan docker stack deploy --compose-file docker-compose.yml stackdemo
  4. Dari sini, tumpukan mengambil dan "menarik" gambar dari registri dan menjalankan container

Apakah tidak ada cara langsung untuk membuat skenario berikut (menurut saya masuk akal) bekerja dengan lancar?

  1. Manajer gerombolan Docker memiliki akses (kunci SSH) untuk menarik proyek dari Git.
  2. Ini secara berkala menarik proyek dan membangunnya "secara lokal" menggunakan docker-compose up
  3. Ketika pembangunan berhasil (kontainer sudah siap), ia mendorong tumpukan ke gerombolan menggunakan docker stack deploy, menyebarkan gambar ke semua node pekerja.
  4. Dengan cara itu, "kode sumber" asli hanya diketahui oleh Node Manajer dan hanya dia yang memiliki akses langsung ke repositori Git.

Mempertahankan registri (atau membayar untuk cloud), sepertinya merupakan kerugian besar dalam menggunakan Docker dalam Mode Swarm.

Catatan tambahan: Saya sudah mencoba pendekatan menerapkan registri sebagai layanan dalam tumpukan dan memberi tag + mendorong gambar ke 127.0.0.1/myimage tetapi hal itu menyebabkan serangkaian masalah tersendiri - misalnya. fakta bahwa node pekerja yang tidak menjalankan instance container Registry, tidak memiliki akses untuk menarik image (registrasi perlu direplikasi ke semua node).


person Dzhuneyt    schedule 07.03.2019    source sumber


Jawaban (2)


Gunakan buruh pelabuhan simpan dan buruh pelabuhan load perintah untuk mentransfer gambar dari mesin pengembang Anda ke semua mesin gerombolan Anda.

person herm    schedule 07.03.2019

Kawanan Docker adalah orkestrasi & digunakan atau dimaksudkan untuk mengelola cluster node buruh pelabuhan. Ketika layanan apa pun diterapkan, mesin buruh pelabuhan dapat memulainya di salah satu node di cluster (simpul yang memenuhi batasan penempatan jika disediakan). Sekarang, jika seseorang tidak memiliki registri, & gambar tersedia di node secara lokal, buruh pelabuhan tidak dapat memverifikasi apakah semua node akan menunjuk ke versi gambar yang sama. Oleh karena itu, gerombolan menarik gambar dari registri & kemudian menyebarkannya ke node.

Memiliki registri juga membantu menyimpan salinan gambar & registri menyimpan semua versi meskipun gambar dipangkas pada satu atau semua node buruh pelabuhan. Seseorang dapat mengaktifkan cadangan registri & karenanya tidak ada kemungkinan hilangnya gambar apa pun yang dibuat & dimasukkan ke registri.

Memulai registri (setidaknya di localhost) sangat mudah - tapi bukan itu pertanyaan Anda.

Menanggapi pertanyaan Anda, Anda dapat menyimpan file tumpukan penulisan di direktori yang sama di mana Anda memiliki Dockerfile & kemudian di file penulisan tumpukan Anda dapat menulis layanan yang akan dibangun pada saat Anda menyebarkan tumpukan:

version: "3.9"

services:
  web:
    image: 127.0.0.1:5000/stackdemo
    build: .
    ports:
      - "8000:8000"

Di Sini,

build: .

baris ini membuat gambar dengan penandaan nama tertentu ke registri di localhost - tetapi tidak didorong sehingga perlu dilakukan secara manual. Jadi, di Dockerfile Anda dapat menulis git pull atau git clone & kemudian menjalankan perintah untuk membuat kode Anda & seterusnya.

Berikut tautan yang menyediakan langkah-langkah sederhana untuk memulai registri & membangun image dengan cepat saat menerapkan tumpukan: https://docs.docker.com/engine/swarm/stack-deploy/

Selain itu, gerombolan tidak berfungsi tanpa registri & karenanya tidak mungkin hanya menyimpan & memuat gambar & digunakan dengan orkestrasi gerombolan.

person Saurabhcdt    schedule 12.05.2021