„Build“ artefaktų perkėlimas iš „Docker“ konteinerių į pagrindinį kompiuterį CI / CD aplinkoje

„Build“ artefaktų perkėlimas iš „Docker“ konteinerių į pagrindinį kompiuterį CI / CD aplinkoje
„Build“ artefaktų perkėlimas iš „Docker“ konteinerių į pagrindinį kompiuterį CI / CD aplinkoje

Docker naudojimas priklausomybės valdymui CI / CD

„Docker“ suteikia veiksmingą būdą valdyti priklausomybes ir kurti aplinkas, ypač naudojant nuolatinio integravimo (CI) sąrankas. Naudodami „Docker“ konteinerius galite išvengti problemų diegdami įvairius vykdymo laikus ir bibliotekas savo CI agentuose, užtikrindami nuoseklų ir izoliuotą kūrimo procesą.

Vienas iš bendrų reikalavimų tokiose darbo eigose yra galimybė perkelti kūrimo artefaktus iš konteinerio atgal į pagrindinį įrenginį. Tai užtikrina, kad gautus failus būtų galima naudoti arba įdiegti pagal poreikį. Bet kaip jūs galite tai efektyviai pasiekti savo CI vamzdyne? Panagrinėkime variantus.

komandą apibūdinimas
docker cp Kopijuoja failus / aplankus tarp konteinerio ir vietinės failų sistemos
docker volume rm Pašalina nurodytą Docker tomą
client.images.build Sukuria „Docker“ vaizdą iš nurodyto kelio, naudodama „Docker SDK“, skirtą „Python“.
client.containers.run Sukuria ir paleidžia Docker konteinerį iš vaizdo, naudodamas Docker SDK, skirtą Python
container.stop() Sustabdo veikiantį konteinerį naudojant Docker SDK, skirtą Python
container.remove() Pašalina konteinerį naudojant Docker SDK, skirtą Python
client.volumes.get Nuskaito Docker tomą pagal pavadinimą, naudojant Docker SDK, skirtą Python

Išsamus Docker artefaktų perdavimo scenarijų paaiškinimas

Pateiktuose scenarijuose procesas prasideda „Docker“ vaizdo kūrimu naudojant docker build -t my-build-image . komandą. Ši komanda sukompiliuoja Docker vaizdą iš Docker failo, esančio dabartiniame kataloge, pažymėdama jį kaip my-build-image. Kai vaizdas bus sukurtas, kitas veiksmas apima konteinerio paleidimą iš šio vaizdo docker run --name my-build-container -v build_volume:/build my-build-image. Ši komanda paleidžia naują konteinerį pavadinimu my-build-container ir prijungia Docker tomą pavadinimu build_volume prie /build katalogą konteinerio viduje. Tomas padeda išlaikyti duomenis, sugeneruotus konteinerio vykdymo metu.

Norėdami nukopijuoti kūrimo artefaktus iš konteinerio į pagrindinį kompiuterį, komandą docker cp my-build-container:/path/to/build/artifacts/. /path/on/host yra naudojamas. Ši komanda nurodo šaltinio katalogą konteineryje ir paskirties katalogą pagrindiniame kompiuteryje. Kai kopijavimas baigtas, atliekamos valymo operacijos, kad būtų sustabdytas ir pašalintas konteineris naudojant docker stop my-build-container ir docker rm my-build-container atitinkamai. Jei tomas nebereikalingas, jį galima pašalinti naudojant docker volume rm build_volume.

CI/CD konvejerio pavyzdyje YAML konfigūracija automatizuoja šiuos veiksmus. The docker build, docker run, ir docker cp komandos yra sukurtos taip, kad būtų vykdomos kaip dujotiekio kūrimo etapo dalis, užtikrinant, kad kūrimo aplinka būtų nuosekliai atkuriama. Panašiai „Python“ scenarijus parodo „Docker“ SDK, skirto „Python“, naudojimą programiškai valdyti „Docker“ operacijas. Jis inicijuoja „Docker“ klientą su client = docker.from_env(), sukuria vaizdą naudojant client.images.buildir paleidžia konteinerį su client.containers.run. Scenarijus nukopijuoja artefaktus naudodamas os.system(f"docker cp {container.id}:/path/to/build/artifacts/. /path/on/host"), ir galiausiai jis sustoja ir pašalina talpyklą bei tūrį container.stop(), container.remove(), ir client.volumes.get('build_volume').remove(). Šis metodas užtikrina visiškai automatizuotą, efektyvų artefaktų perdavimo procesą.

„Build“ artefaktų kopijavimas iš „Docker Container“ į pagrindinį kompiuterį

Shell scenarijus failams kopijuoti

# Step 1: Build the Docker image
docker build -t my-build-image .

# Step 2: Run the Docker container and create a named volume
docker run --name my-build-container -v build_volume:/build my-build-image

# Step 3: Copy the build artifacts to the volume
docker cp my-build-container:/path/to/build/artifacts/. /path/on/host

# Step 4: Cleanup - stop and remove the container
docker stop my-build-container
docker rm my-build-container

# Step 5: Optionally remove the volume if it's no longer needed
docker volume rm build_volume

Artefaktų perdavimo automatizavimas CI vamzdyne

YAML konfigūracija, skirta CI / CD vamzdynui

stages:
  - build
  - deploy

build:
  stage: build
  script:
    - docker build -t my-build-image .
    - docker run --name my-build-container -v build_volume:/build my-build-image
    - docker cp my-build-container:/path/to/build/artifacts/. /path/on/host
    - docker stop my-build-container
    - docker rm my-build-container
    - docker volume rm build_volume

deploy:
  stage: deploy
  script:
    - echo "Deploying build artifacts..."
    - ./deploy.sh

Python scenarijus, skirtas „Docker“ artefaktams kopijuoti

Python naudojimas su Docker SDK

import docker
import os

# Initialize Docker client
client = docker.from_env()

# Build the Docker image
image = client.images.build(path=".", tag="my-build-image")[0]

# Run the Docker container
container = client.containers.run(image.id, name="my-build-container", detach=True)

# Copy the build artifacts to the host
os.system(f"docker cp {container.id}:/path/to/build/artifacts/. /path/on/host")

# Cleanup - stop and remove the container
container.stop()
container.remove()

# Optionally remove the volume if it's no longer needed
client.volumes.get('build_volume').remove()

„Docker“ optimizavimas CI / CD darbo eigoms

Docker naudojimas CI / CD aplinkoje ne tik supaprastina priklausomybės valdymą, bet ir padidina mastelį bei nuoseklumą įvairiuose dujotiekio etapuose. Vienas dažnai nepastebimas aspektas yra „Docker“ integravimas su įvairiais CI / CD įrankiais, tokiais kaip „Jenkins“, „GitLab CI“ ir „CircleCI“. Šios integracijos leidžia užtikrinti patikimesnį automatizavimą ir gali žymiai sumažinti neautomatinio kūrimo ir diegimo valdymo išlaidas. Išnaudodamos „Docker“ galimybes, komandos gali užtikrinti, kad kiekvienas jų dujotiekio etapas, nuo kodo kompiliavimo iki testavimo ir diegimo, veiktų kontroliuojamoje ir atkuriamoje aplinkoje.

Kitas svarbus aspektas, į kurį reikia atsižvelgti, yra kelių etapų versijų naudojimas „Dockerfiles“. Kelių pakopų versijos leidžia kūrėjams optimizuoti savo „Docker“ atvaizdus, ​​atskiriant kūrimo aplinką nuo vykdymo aplinkos. Dėl to gaunami mažesni, efektyvesni vaizdai, kuriuos lengviau valdyti ir įdiegti. Be to, naudojant „Docker“ tomus ir įrišimo elementus, galima žymiai pagerinti failų įvesties / išvesties operacijų našumą, o tai ypač naudinga dirbant su dideliais kūrimo artefaktais arba duomenų rinkiniais. Šios strategijos ne tik supaprastina CI / CD procesą, bet ir prisideda prie saugesnių ir prižiūrimų Docker vaizdų.

Dažni klausimai ir atsakymai apie Docker ir CI / CD

  1. Kaip galiu išsaugoti duomenis „Docker“ konteineriuose?
  2. Tu gali naudoti Docker volumes arba bind mounts kad duomenys būtų išsaugoti po konteinerio gyvavimo ciklo.
  3. Kokia yra kelių etapų versijų naudojimo nauda?
  4. Kelių pakopų versijos padeda sukurti mažesnius ir efektyvesnius „Docker“ vaizdus, ​​​​atskiriant kūrimo ir vykdymo aplinkas.
  5. Kaip integruoti „Docker“ su „Jenkins“?
  6. Galite integruoti „Docker“ su „Jenkins“ naudodami Docker Pipeline papildinys, leidžiantis Jenkins sąveikauti su Docker vaizdais ir konteineriais kūrimo proceso metu.
  7. Kas yra „Docker“ įrišimo laikikliai?
  8. Surišimo jungtys leidžia prijungti failą arba katalogą iš pagrindinės failų sistemos į Docker konteinerį, palengvinant lengvą failų bendrinimą tarp pagrindinio kompiuterio ir konteinerio.
  9. Kaip galiu automatizuoti „Docker“ konteinerio valymą CI / CD?
  10. Automatizuokite „Docker“ konteinerio valymą naudodami tokias komandas kaip docker stop, docker rm, ir docker volume rm CI / CD scenarijų pabaigoje.
  11. Kas yra Docker tomas?
  12. „Docker“ tomas yra „Docker“ konteinerių generuojamų ir naudojamų duomenų išsaugojimo mechanizmas.
  13. Ar galiu paleisti kelis Docker konteinerius CI / CD konvejeryje?
  14. Taip, galite paleisti kelis „Docker“ konteinerius CI / CD dujotiekyje, kad galėtumėte atskirai valdyti skirtingas paslaugas ir priklausomybes.
  15. Kaip kopijuoti failus iš Docker konteinerio į pagrindinį kompiuterį?
  16. Naudoti docker cp komanda kopijuoti failus iš konteinerio į pagrindinę failų sistemą.
  17. Kodėl turėčiau naudoti „Docker“ CI / CD vamzdynuose?
  18. „Docker“ naudojimas CI / CD vamzdynuose užtikrina nuoseklią ir atkuriamą aplinką, supaprastina priklausomybės valdymą ir padidina mastelio keitimą.
  19. Kokie įrankiai palaiko „Docker“ integravimą į CI / CD?
  20. Tokie įrankiai kaip „Jenkins“, „GitLab CI“ ir „CircleCI“ palaiko „Docker“ integraciją, leidžiančią sklandžiai automatizuoti kūrimo ir diegimo procesus.

Užbaigimas:

„Docker“ įtraukimas į CI / CD vamzdynus supaprastina priklausomybės valdymą ir užtikrina nuoseklią kūrimo aplinką. Naudodami Docker komandas ir scenarijus galite efektyviai perkelti kūrimo artefaktus iš konteinerių į pagrindinę sistemą. Šis metodas ne tik optimizuoja kūrimo procesą, bet ir pagerina jūsų CI / CD darbo eigos mastelį ir priežiūrą. Šių užduočių automatizavimas dar labiau supaprastina operacijas, todėl tai yra neįkainojamas požiūris kuriant šiuolaikinę programinę įrangą.