நீங்கள் இப்போது வழக்கமான Dockerfile ஐப் பயன்படுத்தி verf இல் Docker படங்களை உருவாக்கலாம்

எப்போதும் இல்லாததை விட தாமதமாக வருவது நல்லது. அல்லது பயன்பாட்டுப் படங்களை உருவாக்க வழக்கமான Dockerfilesக்கான ஆதரவு இல்லாததன் மூலம் நாங்கள் எப்படி ஒரு பெரிய தவறு செய்தோம்.

நீங்கள் இப்போது வழக்கமான Dockerfile ஐப் பயன்படுத்தி verf இல் Docker படங்களை உருவாக்கலாம்

பற்றி பேசுவோம் வெர்ஃப் — GitOps பயன்பாடானது எந்த CI/CD அமைப்புடனும் ஒருங்கிணைக்கிறது மற்றும் முழு பயன்பாட்டு வாழ்க்கை சுழற்சியின் நிர்வாகத்தை வழங்குகிறது, அனுமதிக்கிறது:

  • படங்களை சேகரித்து வெளியிட,
  • Kubernetes இல் பயன்பாடுகளை வரிசைப்படுத்தவும்,
  • சிறப்புக் கொள்கைகளைப் பயன்படுத்தி பயன்படுத்தப்படாத படங்களை நீக்கவும்.


டெவொப்ஸ் பொறியாளர்களுக்கு பயன்பாடுகளின் மீது கட்டுப்பாட்டை வழங்கும் ஒரு ஒருங்கிணைந்த அமைப்பில் குறைந்த அளவிலான கருவிகளை சேகரிப்பதே திட்டத்தின் தத்துவமாகும். முடிந்தால், ஏற்கனவே உள்ள பயன்பாடுகள் (ஹெல்ம் மற்றும் டோக்கர் போன்றவை) பயன்படுத்தப்பட வேண்டும். ஒரு பிரச்சனைக்கு தீர்வு இல்லை என்றால், இதற்கு தேவையான அனைத்தையும் உருவாக்கி ஆதரிக்கலாம்.

பின்னணி: உங்கள் சொந்த பட சேகரிப்பான்

werf இல் உள்ள பட சேகரிப்பாளரிடம் இதுதான் நடந்தது: வழக்கமான Dockerfile எங்களுக்கு போதுமானதாக இல்லை. திட்டத்தின் வரலாற்றை நீங்கள் விரைவாகப் பார்த்தால், இந்த சிக்கல் ஏற்கனவே werf இன் முதல் பதிப்புகளில் தோன்றியது (பின்னும் இன்னும் டாப் என அறியப்படுகிறது).

டோக்கர் படங்களில் பயன்பாடுகளை உருவாக்குவதற்கான ஒரு கருவியை உருவாக்கும் போது, ​​சில குறிப்பிட்ட பணிகளுக்கு Dockerfile எங்களுக்குப் பொருந்தாது என்பதை விரைவாக உணர்ந்தோம்:

  1. பின்வரும் நிலையான திட்டத்தின் படி வழக்கமான சிறிய வலை பயன்பாடுகளை உருவாக்க வேண்டிய அவசியம்:
    • கணினி முழுவதும் பயன்பாட்டு சார்புகளை நிறுவவும்,
    • பயன்பாட்டு சார்பு நூலகங்களின் தொகுப்பை நிறுவவும்,
    • சொத்துக்களை சேகரிக்க,
    • மற்றும் மிக முக்கியமாக, படத்தில் உள்ள குறியீட்டை விரைவாகவும் திறமையாகவும் புதுப்பிக்கவும்.
  2. திட்டக் கோப்புகளில் மாற்றங்கள் செய்யப்படும்போது, ​​மாற்றப்பட்ட கோப்புகளுக்கு ஒரு பேட்சைப் பயன்படுத்துவதன் மூலம் பில்டர் விரைவாக புதிய லேயரை உருவாக்க வேண்டும்.
  3. சில கோப்புகள் மாறியிருந்தால், தொடர்புடைய சார்பு நிலையை மீண்டும் உருவாக்குவது அவசியம்.

இன்று நமது கலெக்டருக்கு வேறு பல வாய்ப்புகள் உள்ளன, ஆனால் இவைதான் ஆரம்ப ஆசைகள் மற்றும் தூண்டுதல்கள்.

பொதுவாக, இருமுறை யோசிக்காமல், நாங்கள் பயன்படுத்திய நிரலாக்க மொழியைக் கொண்டு ஆயுதம் ஏந்தினோம் (கீழே பார்) மற்றும் செயல்படுத்த சாலை ஹிட் சொந்த DSL! குறிக்கோள்களுக்கு இணங்க, சட்டசபை செயல்முறையை நிலைகளில் விவரிக்கவும், கோப்புகளில் இந்த நிலைகளின் சார்புகளை தீர்மானிக்கவும் இது நோக்கமாக இருந்தது. மற்றும் அதை பூர்த்தி செய்தார் சொந்த சேகரிப்பாளர், இது DSL ஐ இறுதி இலக்காக மாற்றியது - ஒரு கூடியிருந்த படம். முதலில் டிஎஸ்எல் ரூபியில் இருந்தது, ஆனால் கோலாங்கிற்கு மாறுதல் - எங்கள் சேகரிப்பாளரின் கட்டமைப்பு YAML கோப்பில் விவரிக்கப்பட்டது.

நீங்கள் இப்போது வழக்கமான Dockerfile ஐப் பயன்படுத்தி verf இல் Docker படங்களை உருவாக்கலாம்
ரூபியில் டாப்பிற்கான பழைய கட்டமைப்பு

நீங்கள் இப்போது வழக்கமான Dockerfile ஐப் பயன்படுத்தி verf இல் Docker படங்களை உருவாக்கலாம்
YAML இல் werf க்கான தற்போதைய கட்டமைப்பு

கலெக்டரின் பொறிமுறையும் காலப்போக்கில் மாறியது. முதலில், நாங்கள் எங்கள் உள்ளமைவிலிருந்து பறக்கும்போது ஒரு தற்காலிக Dockerfile ஐ உருவாக்கினோம், பின்னர் நாங்கள் தற்காலிக கொள்கலன்களில் அசெம்பிளி வழிமுறைகளை இயக்கத் தொடங்கினோம்.

NB: இந்த நேரத்தில், எங்கள் சேகரிப்பான், அதன் சொந்த கட்டமைப்புடன் (YAML இல்) வேலை செய்கிறது மற்றும் ஸ்டேபெல் சேகரிப்பான் என்று அழைக்கப்படுகிறது, இது ஏற்கனவே மிகவும் சக்திவாய்ந்த கருவியாக வளர்ந்துள்ளது. அதன் விரிவான விளக்கம் தனி கட்டுரைகளுக்கு தகுதியானது, மேலும் அடிப்படை விவரங்களை இதில் காணலாம் ஆவணங்கள்.

பிரச்சனை பற்றிய விழிப்புணர்வு

ஆனால் நாங்கள் உணர்ந்தோம், உடனடியாக அல்ல, நாங்கள் ஒரு தவறு செய்துவிட்டோம்: நாங்கள் திறனை சேர்க்கவில்லை நிலையான Dockerfile மூலம் படங்களை உருவாக்கவும் மேலும் அவற்றை ஒரே இறுதி முதல் இறுதி வரையிலான பயன்பாட்டு மேலாண்மை உள்கட்டமைப்பில் ஒருங்கிணைக்கவும் (அதாவது படங்களைச் சேகரித்து, வரிசைப்படுத்தவும் மற்றும் சுத்தம் செய்யவும்). குபெர்னெட்ஸில் வரிசைப்படுத்துவதற்கான ஒரு கருவியை உருவாக்குவது மற்றும் Dockerfile ஆதரவை செயல்படுத்தாமல் இருப்பது எப்படி, அதாவது. பெரும்பாலான திட்டங்களுக்கான படங்களை விவரிக்க நிலையான வழி?..

இந்த கேள்விக்கு பதிலளிப்பதற்கு பதிலாக, நாங்கள் ஒரு தீர்வை வழங்குகிறோம். உங்களிடம் ஏற்கனவே Dockerfile (அல்லது Dockerfiles தொகுப்பு) இருந்தால் மற்றும் werf ஐப் பயன்படுத்த விரும்பினால் என்ன செய்வது?

NB: சொல்லப்போனால், நீங்கள் ஏன் werf ஐப் பயன்படுத்த விரும்புகிறீர்கள்? முக்கிய அம்சங்கள் பின்வருவனவற்றிற்கு வருகின்றன:

  • படத்தை சுத்தம் செய்தல் உட்பட முழு பயன்பாட்டு மேலாண்மை சுழற்சி;
  • ஒரே கட்டமைப்பிலிருந்து ஒரே நேரத்தில் பல படங்களின் சட்டசபையை நிர்வகிக்கும் திறன்;
  • ஹெல்ம்-இணக்கமான விளக்கப்படங்களுக்கான மேம்படுத்தப்பட்ட வரிசைப்படுத்தல் செயல்முறை.

அவற்றின் முழுமையான பட்டியலை இங்கே காணலாம் திட்டப் பக்கம்.

எனவே, முன்பு நாங்கள் எங்கள் கட்டமைப்பில் டாக்கர்ஃபைலை மீண்டும் எழுத முன்வந்திருந்தால், இப்போது நாங்கள் மகிழ்ச்சியுடன் கூறுவோம்: "உங்கள் டாக்கர்ஃபைல்களை வெர்ஃப் உருவாக்கட்டும்!"

எப்படி பயன்படுத்துவது?

இந்த அம்சத்தின் முழு செயலாக்கம் வெளியீட்டில் தோன்றியது werf v1.0.3-beta.1. பொதுவான கொள்கை எளிதானது: பயனர் werf config இல் ஏற்கனவே உள்ள Dockerfileக்கான பாதையை குறிப்பிடுகிறார், பின்னர் கட்டளையை இயக்குகிறார். werf build... அவ்வளவுதான் - வெர்ஃப் படத்தை அசெம்பிள் செய்வார். ஒரு சுருக்கமான உதாரணத்தைப் பார்ப்போம்.

அடுத்ததை அறிவிப்போம் Dockerfile திட்ட மூலத்தில்:

FROM ubuntu:18.04
RUN echo Building ...

மற்றும் அறிவிப்போம் werf.yamlஇதைப் பயன்படுத்துகிறது Dockerfile:

configVersion: 1
project: dockerfile-example
---
image: ~
dockerfile: ./Dockerfile

அனைத்து! விட்டு ஓடு werf build:

நீங்கள் இப்போது வழக்கமான Dockerfile ஐப் பயன்படுத்தி verf இல் Docker படங்களை உருவாக்கலாம்

கூடுதலாக, நீங்கள் பின்வருவனவற்றை அறிவிக்கலாம் werf.yaml ஒரே நேரத்தில் வெவ்வேறு டாக்கர்ஃபைல்களில் இருந்து பல படங்களை உருவாக்க:

configVersion: 1
project: dockerfile-example
---
image: backend
dockerfile: ./dockerfiles/Dockerfile-backend
---
image: frontend
dockerfile: ./dockerfiles/Dockerfile-frontend

இறுதியாக, இது போன்ற கூடுதல் உருவாக்க அளவுருக்கள் அனுப்புவதை ஆதரிக்கிறது --build-arg и --add-host - werf config வழியாக. Dockerfile பட கட்டமைப்பு பற்றிய முழுமையான விளக்கம் இங்கு கிடைக்கிறது ஆவணப் பக்கம்.

இது எப்படி வேலை செய்கிறது?

உருவாக்க செயல்முறையின் போது, ​​டோக்கரில் உள்ள லோக்கல் லேயர்களின் நிலையான கேச் செயல்படுகிறது. இருப்பினும், முக்கியமானது என்னவென்றால், அதுவும் கூட Dockerfile உள்ளமைவை அதன் உள்கட்டமைப்பில் ஒருங்கிணைக்கிறது. இதன் பொருள் என்ன?

  1. ஒரு Dockerfile இலிருந்து கட்டப்பட்ட ஒவ்வொரு படமும் ஒரு நிலை என்று அழைக்கப்படும் dockerfile (வேர்ஃபில் என்ன நிலைகள் உள்ளன என்பதைப் பற்றி மேலும் படிக்கலாம் இங்கே).
  2. மேடைக்கு dockerfile werf ஆனது Dockerfile உள்ளமைவின் உள்ளடக்கத்தைப் பொறுத்து ஒரு கையொப்பத்தைக் கணக்கிடுகிறது. Dockerfile உள்ளமைவு மாறும்போது, ​​நிலை கையொப்பம் மாறுகிறது dockerfile மற்றும் werf ஒரு புதிய Dockerfile config உடன் இந்த கட்டத்தின் மறுகட்டமைப்பை துவக்குகிறது. கையொப்பம் மாறவில்லை என்றால், werf தற்காலிக சேமிப்பிலிருந்து படத்தை எடுக்கிறது (Werf இல் கையொப்பங்களைப் பயன்படுத்துவது பற்றிய கூடுதல் விவரங்கள் விவரிக்கப்பட்டுள்ளன இந்த அறிக்கை).
  3. அடுத்து, சேகரிக்கப்பட்ட படங்களை கட்டளையுடன் வெளியிடலாம் werf publish (அல்லது werf build-and-publish) மற்றும் குபெர்னெட்டஸுக்கு பயன்படுத்தவும். டோக்கர் ரெஜிஸ்ட்ரியில் வெளியிடப்பட்ட படங்கள் நிலையான வெர்ஃப் கிளீனப் கருவிகளைப் பயன்படுத்தி சுத்தம் செய்யப்படும், அதாவது. பழைய படங்கள் (N நாட்களை விட பழையவை), இல்லாத Git கிளைகளுடன் தொடர்புடைய படங்கள் மற்றும் பிற கொள்கைகள் தானாகவே சுத்தம் செய்யப்படும்.

இங்கே விவரிக்கப்பட்டுள்ள புள்ளிகள் பற்றிய கூடுதல் விவரங்களை ஆவணத்தில் காணலாம்:

குறிப்புகள் மற்றும் முன்னெச்சரிக்கைகள்

1. ADD இல் வெளிப்புற URL ஆதரிக்கப்படவில்லை

தற்போது ஒரு கட்டளையில் வெளிப்புற URL ஐப் பயன்படுத்துவது ஆதரிக்கப்படவில்லை ADD. குறிப்பிட்ட URL இல் உள்ள ஆதாரம் மாறும்போது, ​​வேர்ஃப் மறுகட்டமைப்பைத் தொடங்காது. விரைவில் இந்த வசதியை சேர்க்க திட்டமிட்டுள்ளோம்.

2. நீங்கள் படத்தில் .git ஐ சேர்க்க முடியாது

பொதுவாக, ஒரு கோப்பகத்தைச் சேர்ப்பது .git படத்தில் - ஒரு தீய மோசமான பழக்கம் மற்றும் இங்கே ஏன்:

  1. என்றால் .git இறுதி படத்தில் உள்ளது, இது கொள்கைகளை மீறுகிறது 12 காரணி பயன்பாடு: இறுதிப் படம் ஒற்றை உறுதியுடன் இணைக்கப்பட வேண்டும் என்பதால், அதைச் செய்ய முடியாது git checkout தன்னிச்சையான உறுதி.
  2. .git படத்தின் அளவை அதிகரிக்கிறது (பெரிய கோப்புகள் ஒரு முறை அதில் சேர்க்கப்பட்டு பின்னர் நீக்கப்பட்டதன் காரணமாக களஞ்சியம் பெரியதாக இருக்கலாம்). ஒரு குறிப்பிட்ட உறுதியுடன் மட்டுமே தொடர்புடைய ஒரு வேலை-மரத்தின் அளவு Git இல் உள்ள செயல்பாடுகளின் வரலாற்றைப் பொறுத்து இருக்காது. இந்த வழக்கில், சேர்த்தல் மற்றும் அடுத்தடுத்த நீக்கம் .git இறுதிப் படத்திலிருந்து வேலை செய்யாது: படம் இன்னும் கூடுதல் அடுக்கைப் பெறும் - இப்படித்தான் டோக்கர் வேலை செய்கிறது.
  3. டோக்கர் தேவையற்ற மறுகட்டமைப்பைத் தொடங்கலாம், அதே கமிட் கட்டப்பட்டாலும், வெவ்வேறு வேலை-மரங்களிலிருந்து. எடுத்துக்காட்டாக, GitLab தனி குளோன் செய்யப்பட்ட கோப்பகங்களை உருவாக்குகிறது /home/gitlab-runner/builds/HASH/[0-N]/yourproject இணை சட்டசபை இயக்கப்படும் போது. கூடுதல் மறுசீரமைப்பு அடைவு என்ற உண்மையின் காரணமாக இருக்கும் .git ஒரே கமிட் கட்டப்பட்டிருந்தாலும், ஒரே களஞ்சியத்தின் வெவ்வேறு குளோன் செய்யப்பட்ட பதிப்புகளில் வேறுபட்டது.

werf ஐப் பயன்படுத்தும் போது கடைசி புள்ளியும் விளைவுகளை ஏற்படுத்துகிறது. சில கட்டளைகளை (எ.கா. werf deploy) இந்த கட்டளைகள் இயங்கும் போது, ​​werf குறிப்பிடப்பட்ட படங்களுக்கான நிலை கையொப்பங்களை கணக்கிடுகிறது werf.yaml, மற்றும் அவை சட்டசபை தற்காலிக சேமிப்பில் இருக்க வேண்டும் - இல்லையெனில் கட்டளை தொடர்ந்து செயல்பட முடியாது. மேடை கையொப்பம் உள்ளடக்கத்தைப் பொறுத்தது என்றால் .git, பின்னர் பொருத்தமற்ற கோப்புகளில் ஏற்படும் மாற்றங்களுக்கு நிலையற்ற ஒரு தற்காலிக சேமிப்பைப் பெறுகிறோம், மேலும் werf அத்தகைய மேற்பார்வையை மன்னிக்க முடியாது (மேலும் விவரங்களுக்கு, பார்க்கவும் ஆவணங்கள்).

ஒட்டுமொத்த தேவையான சில கோப்புகளை மட்டும் சேர்த்தல் அறிவுறுத்தல்கள் மூலம் ADD எந்தவொரு சந்தர்ப்பத்திலும் எழுதப்பட்டவற்றின் செயல்திறன் மற்றும் நம்பகத்தன்மையை அதிகரிக்கிறது Dockerfile, மேலும் இதற்காக சேகரிக்கப்பட்ட தற்காலிக சேமிப்பின் நிலைத்தன்மையையும் மேம்படுத்துகிறது Dockerfile, Git இல் பொருத்தமற்ற மாற்றங்களுக்கு.

இதன் விளைவாக

குறிப்பிட்ட தேவைகளுக்காக எங்கள் சொந்த பில்டரை எழுதுவதற்கான எங்கள் ஆரம்ப பாதை கடினமானது, நேர்மையானது மற்றும் நேரடியானது: நிலையான Dockerfile மேல் ஊன்றுகோல்களைப் பயன்படுத்துவதற்குப் பதிலாக, தனிப்பயன் தொடரியல் மூலம் எங்கள் தீர்வை எழுதினோம். இது அதன் நன்மைகளைக் கொண்டிருந்தது: ஸ்டேபல் சேகரிப்பான் அதன் பணியைச் சரியாகச் சமாளிக்கிறது.

இருப்பினும், எங்கள் சொந்த பில்டரை எழுதும் செயல்பாட்டில், தற்போதுள்ள Dockerfilesக்கான ஆதரவை நாங்கள் இழந்துவிட்டோம். இந்தக் குறைபாடு இப்போது சரி செய்யப்பட்டுள்ளது, மேலும் எதிர்காலத்தில் எங்களின் தனிப்பயன் ஸ்டேபல் பில்டருடன் டோக்கர்ஃபைல் ஆதரவை விநியோகிக்கவும், குபெர்னெட்ஸைப் பயன்படுத்தி உருவாக்கவும் திட்டமிட்டுள்ளோம் (அதாவது கனிகோவில் செய்யப்படுவது போல் குபெர்னெட்ஸில் உள்ள ஓட்டப்பந்தய வீரர்களை உருவாக்குகிறது).

எனவே, திடீரென்று இரண்டு டாக்கர்ஃபைல்கள் சுற்றிக் கிடந்தால்... அதை முயற்சிக்கவும் வெர்ஃப்!

PS தலைப்பில் ஆவணங்களின் பட்டியல்

எங்கள் வலைப்பதிவில் மேலும் படிக்கவும்: "werf - குபெர்னெட்டஸில் உள்ள CI/CDக்கான எங்கள் கருவி (மதிப்பாய்வு மற்றும் வீடியோ அறிக்கை)".

ஆதாரம்: www.habr.com

கருத்தைச் சேர்