সিআই/সিডি পরিবেশে ডকার কন্টেইনার থেকে হোস্টে বিল্ড আর্টিফ্যাক্ট স্থানান্তর করা হচ্ছে

Shell

সিআই/সিডি-তে নির্ভরতা ব্যবস্থাপনার জন্য ডকার ব্যবহার করা

ডকার নির্ভরতা পরিচালনা এবং পরিবেশ তৈরি করার জন্য একটি কার্যকর উপায় প্রদান করে, বিশেষ করে কন্টিনিউয়াস ইন্টিগ্রেশন (সিআই) সেটআপগুলিতে। ডকার কন্টেইনারগুলি ব্যবহার করে, আপনি আপনার সিআই এজেন্টগুলিতে বিভিন্ন রানটাইম এবং লাইব্রেরি ইনস্টল করার ঝামেলা এড়াতে পারেন, একটি সামঞ্জস্যপূর্ণ এবং বিচ্ছিন্ন বিল্ড প্রক্রিয়া নিশ্চিত করতে পারেন।

এই ধরনের ওয়ার্কফ্লোতে একটি সাধারণ প্রয়োজনীয়তা হল কন্টেইনার থেকে হোস্ট মেশিনে বিল্ড আর্টিফ্যাক্টগুলি স্থানান্তর করার ক্ষমতা। এটি নিশ্চিত করে যে ফলস্বরূপ ফাইলগুলি প্রয়োজন অনুসারে ব্যবহার বা স্থাপন করা যেতে পারে। কিন্তু কিভাবে আপনি আপনার CI পাইপলাইনের মধ্যে এটি দক্ষতার সাথে অর্জন করতে পারেন? এর বিকল্পগুলি অন্বেষণ করা যাক.

আদেশ বর্ণনা
docker cp একটি ধারক এবং স্থানীয় ফাইল সিস্টেমের মধ্যে ফাইল/ফোল্ডার কপি করে
docker volume rm একটি নির্দিষ্ট ডকার ভলিউম সরিয়ে দেয়
client.images.build Python এর জন্য Docker SDK ব্যবহার করে নির্দিষ্ট পথ থেকে একটি ডকার ইমেজ তৈরি করে
client.containers.run পাইথনের জন্য ডকার এসডিকে ব্যবহার করে একটি চিত্র থেকে একটি ডকার কন্টেইনার তৈরি এবং শুরু করে
container.stop() পাইথনের জন্য ডকার এসডিকে ব্যবহার করে একটি চলমান ধারক বন্ধ করে
container.remove() পাইথনের জন্য ডকার SDK ব্যবহার করে একটি ধারক সরিয়ে দেয়
client.volumes.get পাইথনের জন্য ডকার এসডিকে ব্যবহার করে নামের দ্বারা একটি ডকার ভলিউম পুনরুদ্ধার করে

ডকার আর্টিফ্যাক্ট ট্রান্সফার স্ক্রিপ্টের বিস্তারিত ব্যাখ্যা

প্রদত্ত স্ক্রিপ্টগুলিতে, প্রক্রিয়াটি ব্যবহার করে ডকার ইমেজ তৈরির সাথে শুরু হয় আদেশ এই কমান্ডটি বর্তমান ডিরেক্টরিতে অবস্থিত একটি ডকারফাইল থেকে একটি ডকার ইমেজ কম্পাইল করে, এটিকে ট্যাগ করে . একবার ইমেজ তৈরি হয়ে গেলে, পরবর্তী ধাপে এই ইমেজ থেকে একটি ধারক চালানো জড়িত . এই কমান্ডটি নামে একটি নতুন ধারক শুরু করে my-build-container এবং নামের একটি ডকার ভলিউম মাউন্ট করে থেকে ধারক ভিতরে ডিরেক্টরি. ভলিউম কনটেইনার চালানোর সময় উত্পন্ন ডেটা স্থির রাখতে সাহায্য করে।

কন্টেইনার থেকে হোস্টে বিল্ড আর্টিফ্যাক্ট কপি করতে, কমান্ড ব্যবহৃত হয়। এই কমান্ডটি কন্টেইনারের ভিতরের উৎস ডিরেক্টরি এবং হোস্ট মেশিনে গন্তব্য ডিরেক্টরি নির্দিষ্ট করে। একবার অনুলিপি করা সম্পূর্ণ হলে, ধারকটি ব্যবহার করে বন্ধ করতে এবং অপসারণের জন্য পরিচ্ছন্নতার ক্রিয়াকলাপগুলি সঞ্চালিত হয় এবং যথাক্রমে ভলিউম আর প্রয়োজন না হলে, এটি দিয়ে সরানো যেতে পারে docker volume rm build_volume.

CI/CD পাইপলাইনের উদাহরণে, YAML কনফিগারেশন এই ধাপগুলিকে স্বয়ংক্রিয় করে। দ্য , , এবং কমান্ডগুলিকে পাইপলাইনের বিল্ড স্টেজের অংশ হিসাবে চালানোর জন্য স্ক্রিপ্ট করা হয়, যাতে বিল্ড এনভায়রনমেন্ট ধারাবাহিকভাবে পুনরায় তৈরি করা হয়। একইভাবে, পাইথন স্ক্রিপ্ট ডকার অপারেশনগুলি প্রোগ্রাম্যাটিকভাবে পরিচালনা করতে পাইথনের জন্য ডকার এসডিকে ব্যবহার করে দেখায়। এটি একটি ডকার ক্লায়েন্ট এর সাথে শুরু করে client = docker.from_env(), ব্যবহার করে ইমেজ তৈরি করে , এবং এর সাথে ধারক চালায় . স্ক্রিপ্ট ব্যবহার করে শিল্পকর্ম কপি করে , এবং পরিশেষে, এটি ব্যবহার করে ধারক এবং ভলিউম বন্ধ করে এবং সরিয়ে দেয় container.stop(), , এবং . এই পদ্ধতি একটি সম্পূর্ণ স্বয়ংক্রিয়, দক্ষ আর্টিফ্যাক্ট স্থানান্তর প্রক্রিয়া নিশ্চিত করে।

ডকার কন্টেইনার থেকে হোস্টে বিল্ড আর্টিফ্যাক্টগুলি অনুলিপি করা হচ্ছে

ফাইল কপি করার জন্য শেল স্ক্রিপ্ট

# 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

CI পাইপলাইনে স্বয়ংক্রিয় শিল্পকর্ম স্থানান্তর

CI/CD পাইপলাইনের জন্য YAML কনফিগারেশন

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

ডকার আর্টিফ্যাক্ট অনুলিপি করার জন্য পাইথন স্ক্রিপ্ট

ডকার এসডিকে সহ পাইথন ব্যবহার করা

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()

সিআই/সিডি ওয়ার্কফ্লোসের জন্য ডকার অপ্টিমাইজ করা

সিআই/সিডি পরিবেশে ডকার ব্যবহার করা শুধুমাত্র নির্ভরতা ব্যবস্থাপনাকে সহজ করে না কিন্তু পাইপলাইনের বিভিন্ন পর্যায়ে স্কেলেবিলিটি এবং সামঞ্জস্য বাড়ায়। একটি প্রায়ই উপেক্ষিত দিক হল বিভিন্ন সিআই/সিডি টুলের সাথে ডকারের একীকরণ, যেমন জেনকিন্স, গিটল্যাব সিআই এবং সার্কেলসিআই। এই ইন্টিগ্রেশনগুলি আরও শক্তিশালী অটোমেশনের জন্য অনুমতি দেয় এবং বিল্ড এবং স্থাপনা পরিচালনার সাথে জড়িত ম্যানুয়াল ওভারহেডকে ব্যাপকভাবে হ্রাস করতে পারে। ডকারের ক্ষমতার ব্যবহার করে, দলগুলি নিশ্চিত করতে পারে যে তাদের পাইপলাইনের প্রতিটি ধাপ, কোড সংকলন থেকে পরীক্ষা এবং স্থাপনা পর্যন্ত, একটি নিয়ন্ত্রিত এবং পুনরুত্পাদনযোগ্য পরিবেশে কাজ করে।

বিবেচনা করার আরেকটি মূল দিক হল ডকারফাইলে মাল্টি-স্টেজ বিল্ডের ব্যবহার। মাল্টি-স্টেজ বিল্ড ডেভেলপারদের রানটাইম পরিবেশ থেকে বিল্ড এনভায়রনমেন্টকে আলাদা করে তাদের ডকার ইমেজ অপ্টিমাইজ করতে দেয়। এর ফলে আরও ছোট, আরও দক্ষ ছবি দেখা যায় যা পরিচালনা এবং স্থাপন করা সহজ। অতিরিক্তভাবে, ডকার ভলিউম এবং বাইন্ড মাউন্টগুলি ব্যবহার করা ফাইল I/O অপারেশনগুলির কার্যকারিতা উল্লেখযোগ্যভাবে উন্নত করতে পারে, যা বড় বিল্ড আর্টিফ্যাক্ট বা ডেটাসেটের সাথে কাজ করার সময় বিশেষভাবে উপকারী। এই কৌশলগুলি কেবল সিআই/সিডি প্রক্রিয়াকে স্ট্রিমলাইন করে না বরং আরও নিরাপদ এবং রক্ষণাবেক্ষণযোগ্য ডকার চিত্রগুলিতে অবদান রাখে।

  1. আমি কিভাবে ডকার পাত্রে ডেটা বজায় রাখতে পারি?
  2. তুমি ব্যবহার করতে পার বা একটি পাত্রের জীবনচক্রের বাইরে ডেটা বজায় রাখতে।
  3. মাল্টি-স্টেজ বিল্ড ব্যবহার করে লাভ কী?
  4. মাল্টি-স্টেজ বিল্ডগুলি বিল্ড এবং রানটাইম পরিবেশকে আলাদা করে ছোট এবং আরও দক্ষ ডকার ইমেজ তৈরি করতে সহায়তা করে।
  5. আমি কিভাবে জেনকিন্সের সাথে ডকারকে সংহত করব?
  6. আপনি ব্যবহার করে জেনকিন্সের সাথে ডকারকে সংহত করতে পারেন প্লাগইন, যা জেনকিন্সকে বিল্ড প্রক্রিয়া চলাকালীন ডকার ইমেজ এবং কন্টেইনারগুলির সাথে যোগাযোগ করতে দেয়।
  7. ডকার বাইন্ড মাউন্ট কি?
  8. বাইন্ড মাউন্ট আপনাকে হোস্ট ফাইল সিস্টেম থেকে একটি ডকার কন্টেইনারে একটি ফাইল বা ডিরেক্টরি মাউন্ট করার অনুমতি দেয়, হোস্ট এবং কন্টেইনারের মধ্যে সহজ ফাইল ভাগ করে নেওয়ার সুবিধা দেয়।
  9. আমি কীভাবে সিআই/সিডিতে ডকার কন্টেইনার পরিষ্কার করতে পারি?
  10. যেমন কমান্ড ব্যবহার করে ডকার কন্টেইনার ক্লিনআপ স্বয়ংক্রিয় করুন , , এবং আপনার CI/CD স্ক্রিপ্টের শেষে।
  11. একটি ডকার ভলিউম কি?
  12. একটি ডকার ভলিউম ডকার কন্টেইনার দ্বারা উত্পন্ন এবং ব্যবহার করা ডেটা স্থায়ী করার জন্য একটি প্রক্রিয়া।
  13. আমি কি সিআই/সিডি পাইপলাইনে একাধিক ডকার কন্টেইনার চালাতে পারি?
  14. হ্যাঁ, আপনি একটি সিআই/সিডি পাইপলাইনে একাধিক ডকার কন্টেইনার চালাতে পারেন বিভিন্ন পরিষেবা এবং নির্ভরতা আলাদাভাবে পরিচালনা করতে।
  15. আমি কিভাবে একটি ডকার কন্টেইনার থেকে হোস্টে ফাইল কপি করব?
  16. ব্যবহার একটি কন্টেইনার থেকে হোস্ট ফাইল সিস্টেমে ফাইল কপি করার কমান্ড।
  17. কেন আমি সিআই/সিডি পাইপলাইনে ডকার ব্যবহার করব?
  18. সিআই/সিডি পাইপলাইনে ডকার ব্যবহার করা একটি সামঞ্জস্যপূর্ণ এবং পুনরুত্পাদনযোগ্য পরিবেশ নিশ্চিত করে, নির্ভরতা ব্যবস্থাপনাকে সহজ করে এবং মাপযোগ্যতা বাড়ায়।
  19. কোন সরঞ্জামগুলি সিআই/সিডিতে ডকার ইন্টিগ্রেশন সমর্থন করে?
  20. Jenkins, GitLab CI, এবং CircleCI-এর মতো টুলগুলি ডকার ইন্টিগ্রেশনকে সমর্থন করে, যা বিল্ড এবং ডিপ্লোয়মেন্ট প্রক্রিয়াগুলির নির্বিঘ্ন অটোমেশনের জন্য অনুমতি দেয়।

সিআই/সিডি পাইপলাইনে ডকারকে অন্তর্ভুক্ত করা নির্ভরতা ব্যবস্থাপনাকে সহজ করে এবং একটি সামঞ্জস্যপূর্ণ বিল্ড পরিবেশ নিশ্চিত করে। ডকার কমান্ড এবং স্ক্রিপ্ট ব্যবহার করে, আপনি দক্ষতার সাথে কনটেইনার থেকে হোস্ট সিস্টেমে বিল্ড আর্টিফ্যাক্ট স্থানান্তর করতে পারেন। এই পদ্ধতিটি শুধুমাত্র বিল্ড প্রক্রিয়াটিকেই অপ্টিমাইজ করে না বরং আপনার সিআই/সিডি ওয়ার্কফ্লোগুলির স্কেলেবিলিটি এবং রক্ষণাবেক্ষণযোগ্যতাও বাড়ায়। এই কাজগুলিকে স্বয়ংক্রিয় করা অপারেশনগুলিকে আরও সুগম করে, এটিকে আধুনিক সফ্টওয়্যার বিকাশের জন্য একটি অমূল্য পদ্ধতিতে পরিণত করে।