Docker Compose സമ്പൂർണ്ണ ഗൈഡ്
ഓരോ സർവീസിനും വേണ്ടി പ്രത്യേകം Docker കമാൻഡുകൾ നൽകുന്നത് ഒഴിവാക്കൂ.
നിങ്ങൾ ഒരു മോഡേൺ ആപ്ലിക്കേഷൻ ആണ് പ്രവർത്തിപ്പിക്കുന്നതെങ്കിൽ, അതിൽ ഒരു frontend, ഒരു backend, ഒരു database, കൂടാതെ ഒരു cache എന്നിവ ഉണ്ടാകാൻ സാധ്യതയുണ്ട്. ഇവ ഓരോന്നായി പ്രവർത്തിപ്പിക്കുന്നത് സാവധാനത്തിലുള്ളതും തെറ്റുകൾ സംഭവിക്കാൻ സാധ്യതയുള്ളതുമാണ്.
Docker Compose ഇത് പരിഹരിക്കുന്നു. നിങ്ങളുടെ മുഴുവൻ സ്റ്റാക്കും (stack) ഒരു YAML ഫയലിൽ നിർവചിക്കുകയും ഒറ്റ കമാൻഡിലൂടെ എല്ലാം പ്രവർത്തിപ്പിക്കുകയും ചെയ്യാം.
അടിസ്ഥാന കാര്യങ്ങൾ
- Compose ഇല്ലാതെ: നാല് കണ്ടെയ്നറുകൾക്കായി നിങ്ങൾ നാല് വ്യത്യസ്ത കമാൻഡുകൾ നൽകേണ്ടി വരുന്നു.
- Compose ഉപയോഗിച്ച്: നിങ്ങൾ "docker compose up" എന്ന് നൽകിയാൽ എല്ലാം പ്രവർത്തിച്ചു തുടങ്ങും.
പ്രധാനപ്പെട്ട ആശയങ്ങൾ
• Services: ഓരോ സർവീസും ഒരു കണ്ടെയ്നറിനെ പ്രതിനിധീകരിക്കുന്നു. നിങ്ങളുടെ സ്വന്തം കോഡിനായി "build" ഉപയോഗിക്കാം, അല്ലെങ്കിൽ PostgreSQL അല്ലെങ്കിൽ Redis പോലുള്ള മുൻകൂട്ടി നിർമ്മിച്ച ടൂളുകൾക്കായി "image" ഉപയോഗിക്കാം. • Port Mapping: HOST:CONTAINER എന്ന ഫോർമാറ്റ് ഉപയോഗിക്കുക. ഇത് നിങ്ങളുടെ കമ്പ്യൂട്ടറിലെ പോർട്ടിനെ കണ്ടെയ്നർ പോർട്ടുമായി ബന്ധിപ്പിക്കുന്നു. • Environment Variables: ലളിതമായ വാല്യൂകൾക്കായി "environment" ഉപയോഗിക്കാം, അല്ലെങ്കിൽ രഹസ്യ വിവരങ്ങൾ (secrets) ഒരു പ്രത്യേക .env ഫയലിൽ സൂക്ഷിക്കാൻ "env_file" ഉപയോഗിക്കാം. • Volumes: നിങ്ങളുടെ ഡാറ്റ സുരക്ഷിതമായി സൂക്ഷിക്കാൻ volumes ഉപയോഗിക്കുക. Volumes ഇല്ലെങ്കിൽ, കണ്ടെയ്നർ നിർത്തലാക്കുമ്പോൾ നിങ്ങളുടെ ഡാറ്റാബേസ് ഡാറ്റ നഷ്ടപ്പെടും. • Networks: Compose സ്വയമേവ ഒരു നെറ്റ്വർക്ക് നിർമ്മിക്കുന്നു. കണ്ടെയ്നറുകൾ തമ്മിൽ ആശയവിനിമയം നടത്താൻ localhost-ന് പകരം അവയുടെ സർവീസ് പേരുകൾ ഉപയോഗിക്കാം. • Depends_on: ഇത് സ്റ്റാർട്ടപ്പ് ക്രമം (startup order) നിശ്ചയിക്കുന്നു. ബാക്ക്എൻഡിന് മുമ്പ് ഡാറ്റാബേസ് പ്രവർത്തിപ്പിക്കാൻ ഇത് Docker-നോട് നിർദ്ദേശിക്കുന്നു. എന്നാൽ ഡാറ്റാബേസ് പൂർണ്ണമായും തയ്യാറാകുന്നത് വരെ ഇത് കാത്തുനിൽക്കില്ല എന്ന കാര്യം ശ്രദ്ധിക്കുക.
ഇന്റർവ്യൂ ടിപ്സ്
- എപ്പോഴാണ് build vs image ഉപയോഗിക്കേണ്ടത്? നിങ്ങളുടെ കസ്റ്റം ആപ്ലിക്കേഷനായി "build" ഉപയോഗിക്കുക. Docker Hub-ൽ നിന്നുള്ള നിലവിലുള്ള ടൂളുകൾക്കായി "image" ഉപയോഗിക്കുക.
- കണ്ടെയ്നറുകൾ എങ്ങനെ ആശയവിനിമയം നടത്തുന്നു? Docker നെറ്റ്വർക്കിനുള്ളിൽ അവ സർവീസ് പേരുകൾ ഹോസ്റ്റ് നെയിമുകളായി (hostnames) ഉപയോഗിക്കുന്നു.
- ഡാറ്റാ നഷ്ടം എങ്ങനെ ഒഴിവാക്കാം? ഡാറ്റാബേസുകൾക്കായി എപ്പോഴും named volumes ഉപയോഗിക്കുക.
- രഹസ്യ വിവരങ്ങൾ (secrets) എങ്ങനെ കൈകാര്യം ചെയ്യാം? അവ ഒരിക്കലും കോഡിൽ നേരിട്ട് എഴുതാതെ (hardcode) ഒരു .env ഫയൽ ഉപയോഗിക്കുക.
ഒഴിവാക്കേണ്ട പൊതുവായ തെറ്റുകൾ
- "latest" ടാഗ് ഉപയോഗിക്കുന്നത്: ഇത് അപ്രതീക്ഷിതമായ അപ്ഡേറ്റുകൾക്ക് കാരണമാകും. "postgres:16" പോലുള്ള പ്രത്യേക വേർഷനുകൾ ഉപയോഗിക്കുക.
- localhost ഉപയോഗിക്കുന്നത്: കണ്ടെയ്നറുകൾക്ക് localhost വഴി പരസ്പരം കാണാൻ കഴിയില്ല. സർവീസ് പേര് ഉപയോഗിക്കുക.
- Healthchecks ഇല്ലാത്തത്: നിങ്ങളുടെ സർവീസ് ശരിക്കും പ്രവർത്തിക്കാൻ തയ്യാറാണോ എന്ന് പരിശോധിക്കാൻ healthchecks ഉപയോഗിക്കുക.
Source: https://dev.to/adityaguptareal/docker-compose-complete-guide-1gac