𝗧𝗵𝗲 𝗠𝘂𝗹𝘁𝗶-𝗦𝗰𝗲𝗻𝗮𝗿𝗶𝗼 𝗗𝗼𝗰𝗸𝗲𝗿 𝗣𝗮𝘁𝘁𝗲𝗿𝗻 ਤੁਸੀਂ ਆਪਣੇ ਵਾਤਾਵਰਣ (environment) ਨੂੰ ਇਕਸਾਰ ਰੱਖਣ ਲਈ Docker ਦੀ ਵਰਤੋਂ ਕਰਦੇ ਹੋ। ਪਰ ਕੀ ਇਹ ਹਮੇਸ਼ਾ ਕੰਮ ਕਰਦਾ ਹੈ? ਸਮੱਸਿਆ Docker ਦੀ ਨਹੀਂ ਹੈ। ਇਹ ਤੁਹਾਡੇ ਪ੍ਰੋਜੈਕਟ ਦੇ ਢਾਂਚੇ (structure) ਦੀ ਹੈ। ਜਦੋਂ ਤੁਹਾਡੇ ਕੋਲ ਕਈ Dockerfiles ਹੁੰਦੇ ਹਨ, ਤਾਂ ਵੱਖ-ਵੱਖ ਨਤੀਜੇ ਮਿਲਣਾ ਆਸਾਨ ਹੋ ਜਾਂਦਾ ਹੈ। ਇਸ ਨਾਲ ਇੱਕ ਸਿੰਗਲ ਰੈਪੋਜ਼ੀਟਰੀ (repository) ਵਿੱਚ ਬਹੁਤ ਸਾਰੇ ਸਮਾਨ ਵਾਤਾਵਰਣ ਹੋ ਸਕਦੇ ਹਨ ਜੋ ਆਪਸ ਵਿੱਚ ਵੱਖ ਹੁੰਦੇ ਜਾਂਦੇ ਹਨ।

ਮਲਟੀ-ਸੀਨਾਰੀਓ ਡੌਕਰ ਪੈਟਰਨ (The Multi-Scenario Docker Pattern) ਇਸ ਸਮੱਸਿਆ ਨੂੰ ਹੱਲ ਕਰਦਾ ਹੈ। ਇਹ ਇੱਕ ਸਰਲ ਵਿਚਾਰ 'ਤੇ ਅਧਾਰਤ ਹੈ: ਇੱਕ runtime ਅਤੇ ਕਈ deployment ਸੀਨਾਰੀਓ। ਤੁਸੀਂ ਆਪਣੀ Dockerfile ਅਤੇ ਬੇਸ ਵਾਤਾਵਰਣ (base environment) ਨੂੰ ਇੱਕੋ ਜਿਹਾ ਰੱਖਦੇ ਹੋ। ਅੰਤਰ ਸਿਰਫ਼ ਸੀਨਾਰੀਓ ਪੱਧਰ 'ਤੇ ਹੀ allowed ਹਨ।

ਇੱਕ ਸੀਨਾਰੀਓ ਵਾਤਾਵਰਣ ਨੂੰ ਲਾਂਚ ਕਰਨ ਲਈ ਇੱਕ ਸਵੈ-ਨਿਰਭਰ ਯੂਨਿਟ (self-contained unit) ਹੈ। ਇਸ ਵਿੱਚ ਸ਼ਾਮਲ ਹਨ:

  • docker-compose.yml
  • .env
  • Makefile
  • devcontainer.json
  • ਵਾਧੂ ਸਕ੍ਰਿਪਟਾਂ (additional scripts)

ਸਾਰੇ ਸੀਨਾਰੀਓ ਇੱਕੋ runtime ਅਤੇ ਸਰੋਤਾਂ (resources) ਦੀ ਵਰਤੋਂ ਕਰਦੇ ਹਨ। ਉਹ ਸਿਰਫ਼ ਇਸ ਗੱਲ ਨੂੰ ਬਦਲਦੇ ਹਨ ਕਿ ਸਿਸਟਮ ਨੂੰ ਕਿਵੇਂ ਲਾਂਚ ਕੀਤਾ ਜਾਣਾ ਹੈ। ਇਸ ਤਰੀਕੇ ਨਾਲ, ਤੁਸੀਂ dev ਅਤੇ prod ਵਿਚਕਾਰ ਲੁਕਵੇਂ ਅੰਤਰਾਂ ਤੋਂ ਬਚ ਸਕਦੇ ਹੋ।

ਇਹ ਪੈਟਰਨ ਪ੍ਰਦਾਨ ਕਰਦਾ ਹੈ:

  • ਸਾਰੇ ਸੀਨਾਰੀਓ ਲਈ ਇੱਕ ਸਿੰਗਲ runtime
  • ਲਾਂਚ ਸੀਨਾਰੀਓ ਦਾ ਸਪੱਸ਼ਟ ਵੱਖਕਰਨ
  • production ਤੋਂ dev ਟੂਲਜ਼ ਦਾ ਅਲਗਕਰਨ (isolation)
  • ਕੇਂਦਰੀਕ੍ਰਿਤ ਕੌਂਫਿਗਰੇਸ਼ਨ (centralized configuration)

ਤੁਸੀਂ ਇਸ ਪੈਟਰਨ ਦੀ ਵਰਤੋਂ Docker ਜਾਂ Podman ਨਾਲ ਕਰ ਸਕਦੇ ਹੋ। ਇਹ ਕਿਸੇ ਖਾਸ ਕੰਟੇਨਰ ਇੰਜਣ ਨਾਲ ਬੱਝਿਆ ਹੋਇਆ ਨਹੀਂ ਹੈ।

Docker ਦੇ ਵਿਵਹਾਰ ਨੂੰ ਇਕਸਾਰ ਰੱਖਣ ਲਈ ਤੁਹਾਡਾ ਮਨਪਸੰਦ ਪੈਟਰਨ ਕਿਹੜਾ ਹੈ? ਆਪਣਾ ਅਨੁਭਵ ਕੁਮੈਂਟਸ ਵਿੱਚ ਸਾਂਝਾ ਕਰੋ। Source: https://dev.to/outcomer/the-multi-scenario-docker-pattern-how-to-build-a-reproducible-docker-environment-for-any-conditions-aho Optional learning community: https://github.com/outcomer/multi-scenario-docker-pattern