Nggunakake docker multi-stage kanggo mbangun gambar windows
Halo kabeh! Jenengku Andrey, lan aku kerja minangka insinyur DevOps ing Exness ing tim pangembangan. Kegiatan utamaku ana gandhengane karo mbangun, nyebarake lan ndhukung aplikasi ing docker ing sistem operasi Linux (sabanjuré diarani OS). Ora suwe aku duwe tugas kanthi kegiatan sing padha, nanging target OS proyek kasebut yaiku Windows Server lan sakumpulan proyek C ++. Kanggo kula, iki minangka interaksi cedhak pisanan karo wadhah docker ing Windows OS lan, umume, karo aplikasi C ++. Thanks kanggo iki, aku duwe pengalaman sing menarik lan sinau babagan sawetara kerumitan aplikasi containerizing ing Windows.
Ing artikel iki, aku arep menehi pitutur marang kowe apa kangelan aku kudu ngadhepi lan carane aku ngatur kanggo ngatasi. Muga-muga iki bisa migunani kanggo tantangan saiki lan mbesuk. Seneng maca!
Kenapa kontainer?
Perusahaan kasebut duwe infrastruktur kanggo orkestra kontainer Hashicorp Nomad lan komponen sing ana gandhengane - Konsul lan Vault. Mulane, containerization aplikasi dipilih minangka cara terpadu kanggo ngirim solusi lengkap. Wiwit infrastruktur proyek ngemot host docker karo Windows Server Core OS versi 1803 lan 1809, perlu kanggo mbangun versi kapisah saka gambar docker kanggo 1803 lan 1809. Ing versi 1803, penting kanggo elinga yen nomer revisi saka host docker mbangun. kudu cocog karo nomer revisi saka gambar docker dhasar lan host ngendi wadhah saka gambar iki bakal dibukak. Versi 1809 ora duwe kekurangan. Sampeyan bisa maca liyane kene.
Kenapa multi-stage?
Insinyur tim pangembangan ora duwe akses utawa winates banget kanggo mbangun host; ora ana cara kanggo ngatur set komponen kanthi cepet kanggo mbangun aplikasi ing host kasebut, contone, nginstal toolset utawa beban kerja tambahan kanggo Visual Studio. Mula, kita mutusake kanggo nginstal kabeh komponen sing dibutuhake kanggo mbangun aplikasi menyang gambar mbangun Docker. Yen perlu, sampeyan bisa kanthi cepet ngganti mung dockerfile lan miwiti pipeline kanggo nggawe gambar iki.
Saka teori nganti tumindak
Ing mbangun gambar multi-tataran Docker sing becik, lingkungan kanggo mbangun aplikasi disiapake ing skrip Dockerfile sing padha karo aplikasi kasebut dhewe. Nanging ing kasus kita, link penengah ditambahake, yaiku, langkah awal nggawe gambar docker karo kabeh sing dibutuhake kanggo mbangun aplikasi kasebut. Iki rampung amarga aku pengin nggunakake fitur cache docker kanggo nyuda wektu instalasi kabeh dependensi.
Ayo goleki poin utama skrip dockerfile kanggo nggawe gambar iki.
Kanggo nggawe gambar saka versi OS beda, sampeyan bisa nemtokake bantahan ing dockerfile liwat kang nomer versi liwati sak mbangun, lan uga tag saka gambar dhasar.
Dhaptar lengkap tag gambar Microsoft Windows Server bisa ditemokake kene.
ARG WINDOWS_OS_VERSION=1809
FROM mcr.microsoft.com/windows/servercore:$WINDOWS_OS_VERSION
Kanthi gawan printah ing instruksi RUN nang dockerfile ing OS Windows lagi dieksekusi ing console cmd.exe. Kanggo penak nulis skrip lan ngembangake fungsi printah sing digunakake, kita bakal nemtokake maneh konsol eksekusi perintah ing Powershell liwat instruksi kasebut. SHELL.
Kanggo nginstal paket nggunakake chocolatey, sampeyan mung bisa pass minangka dhaftar, utawa nginstal siji ing wektu yen sampeyan kudu pass paramèter unik kanggo saben paket. Ing kahanan kita, kita nggunakake file manifest ing format XML, sing ngemot dhaptar paket sing dibutuhake lan paramèter. Isine katon kaya iki:
Sabanjure, kita nginstal lingkungan mbangun aplikasi, yaiku, MS Build Tools 2019 - iki minangka versi entheng saka Visual Studio 2019, sing ngemot set komponen minimal sing dibutuhake kanggo kompilasi kode.
Kanggo nggarap proyek C++ kanthi lengkap, kita butuh komponen tambahan, yaiku:
Alat C++ beban kerja
Piranti v141
Windows 10 SDK (10.0.17134.0)
Sampeyan bisa nginstal set lengkap piranti kanthi otomatis nggunakake file konfigurasi ing format JSON. Isi file konfigurasi:
Dhaptar lengkap komponen sing kasedhiya bisa ditemokake ing situs dokumentasi Microsoft Visual Studio.
Dockerfile mbukak skrip instalasi, lan kanggo penak, nambah path menyang file eksekusi alat mbangun menyang variabel lingkungan PATH. Sampeyan uga dianjurake kanggo mbusak file lan direktori sing ora perlu kanggo nyuda ukuran gambar.
Ing tataran iki, gambar kita kanggo kompilasi C ++ aplikasi wis siyap, lan kita bisa nerusake langsung kanggo nggawe docker multi-tataran mbangun aplikasi.
Multi-tataran ing tumindak
Kita bakal nggunakake gambar digawe karo kabeh alat ing Papan minangka gambar mbangun. Kaya ing skrip dockerfile sadurunge, kita bakal nambah kemampuan kanggo nemtokake nomer versi / tag gambar kanthi dinamis supaya gampang digunakake maneh kode. Penting kanggo nambah label as builder menyang gambar perakitan ing instruksi FROM.
ARG WINDOWS_OS_VERSION=1809
FROM buildtools:$WINDOWS_OS_VERSION as builder
Saiki wektune kanggo mbangun aplikasi kasebut. Kabeh ing kene cukup prasaja: nyalin kode sumber lan kabeh sing ana gandhengane, lan miwiti proses kompilasi.
Tahap pungkasan nggawe gambar pungkasan yaiku nemtokake gambar dhasar aplikasi, ing ngendi kabeh artefak kompilasi lan file konfigurasi bakal ana. Kanggo nyalin file kompilasi saka gambar perakitan penengah, sampeyan kudu nemtokake parameter kasebut --from=builder ing instruksi COPY.
FROM mcr.microsoft.com/windows/servercore:$WINDOWS_OS_VERSION
COPY --from=builder C:/x64/Release/myapp/ ./
COPY ./configs ./
Saiki sing isih ana yaiku nambahake dependensi sing dibutuhake supaya aplikasi bisa digunakake lan nemtokake perintah peluncuran liwat instruksi kasebut ENTRYPOINT utawa CMD.
kesimpulan
Ing artikel iki, aku ngomong babagan carane nggawe lingkungan kompilasi lengkap kanggo aplikasi C ++ ing wadhah Windows lan carane nggunakake kemampuan docker multi-stage mbangun kanggo nggawe gambar lengkap aplikasi kita.