Dockerfiles সঙ্গে পাত্রে উন্নয়নশীল

1. ওভারভিউ

ডকার উন্নয়নশীল, শিপিং, এবং অ্যাপ্লিকেশন চালানোর জন্য একটি উন্মুক্ত প্ল্যাটফর্ম। ডকারের সাহায্যে, আপনি আপনার অবকাঠামো থেকে আপনার অ্যাপ্লিকেশনগুলিকে আলাদা করতে পারেন এবং আপনার পরিকাঠামোকে একটি পরিচালিত অ্যাপ্লিকেশনের মতো ব্যবহার করতে পারেন। ডকার আপনাকে দ্রুত কোড পাঠাতে, দ্রুত পরীক্ষা করতে, দ্রুত স্থাপন করতে এবং কোড লেখা এবং চলমান কোডের মধ্যে চক্রকে ছোট করতে সহায়তা করে।

ডকার ওয়ার্কফ্লো এবং টুলিংয়ের সাথে কার্নেল কন্টেইনারাইজেশন বৈশিষ্ট্যগুলিকে একত্রিত করে এটি করে যা আপনাকে আপনার অ্যাপ্লিকেশনগুলি পরিচালনা এবং স্থাপন করতে সহায়তা করে।

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

আপনি কি শিখবেন

এই ল্যাবে, আপনি নিম্নলিখিতগুলি কীভাবে করবেন তা শিখবেন:

  • একটি নমুনা অ্যাপ্লিকেশনের জন্য একটি ডকারফাইল তৈরি করুন
  • একটি ইমেজ তৈরি করুন
  • স্থানীয়ভাবে একটি ধারক হিসাবে চিত্র চালান
  • পাত্রের আচরণ পরিবর্তন করুন
  • চিত্রটিকে আর্টিফ্যাক্ট রেজিস্ট্রিতে পুশ করুন

পূর্বশর্ত

এটি একটি পরিচায়ক স্তরের ল্যাব। ডকার এবং কন্টেইনারগুলির সাথে সামান্য বা কোন পূর্ব অভিজ্ঞতা অনুমান করা হয়। ক্লাউড শেল এবং কমান্ড লাইনের সাথে পরিচিতি প্রস্তাবিত, কিন্তু প্রয়োজন নেই।

স্ব-গতিসম্পন্ন পরিবেশ সেটআপ

  1. Google ক্লাউড কনসোলে সাইন-ইন করুন এবং একটি নতুন প্রকল্প তৈরি করুন বা বিদ্যমান একটি পুনরায় ব্যবহার করুন৷ আপনার যদি ইতিমধ্যেই একটি Gmail বা Google Workspace অ্যাকাউন্ট না থাকে, তাহলে আপনাকে অবশ্যই একটি তৈরি করতে হবে।

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • প্রকল্পের নাম এই প্রকল্পের অংশগ্রহণকারীদের জন্য প্রদর্শনের নাম। এটি একটি অক্ষর স্ট্রিং যা Google API দ্বারা ব্যবহৃত হয় না এবং আপনি যে কোনো সময় এটি আপডেট করতে পারেন।
  • সমস্ত Google ক্লাউড প্রজেক্ট জুড়ে প্রোজেক্ট আইডি অবশ্যই অনন্য হতে হবে এবং অপরিবর্তনীয় (সেট করার পরে পরিবর্তন করা যাবে না)। ক্লাউড কনসোল স্বয়ংক্রিয়ভাবে একটি অনন্য স্ট্রিং তৈরি করে; সাধারণত আপনি এটা কি যত্ন না. বেশিরভাগ কোডল্যাবে, আপনাকে প্রজেক্ট আইডি উল্লেখ করতে হবে (এবং এটি সাধারণত PROJECT_ID হিসাবে চিহ্নিত করা হয়), তাই আপনি যদি এটি পছন্দ না করেন তবে অন্য একটি এলোমেলো তৈরি করুন, অথবা, আপনি নিজের চেষ্টা করে দেখতে পারেন এটি উপলব্ধ কিনা। তারপর প্রকল্প তৈরি হওয়ার পরে এটি "হিমায়িত" হয়।
  • একটি তৃতীয় মান আছে, একটি প্রকল্প নম্বর যা কিছু API ব্যবহার করে। ডকুমেন্টেশনে এই তিনটি মান সম্পর্কে আরও জানুন।
  1. এরপরে, ক্লাউড রিসোর্স/এপিআই ব্যবহার করার জন্য আপনাকে ক্লাউড কনসোলে বিলিং সক্ষম করতে হবে। এই কোডল্যাবের মাধ্যমে চালানোর জন্য খুব বেশি খরচ করা উচিত নয়, যদি কিছু থাকে। রিসোর্স বন্ধ করতে যাতে আপনি এই টিউটোরিয়ালের বাইরে বিলিং করতে না পারেন, কোডল্যাবের শেষে পাওয়া যেকোনো "ক্লিন-আপ" নির্দেশাবলী অনুসরণ করুন। Google ক্লাউডের নতুন ব্যবহারকারীরা $300 USD বিনামূল্যের ট্রায়াল প্রোগ্রামের জন্য যোগ্য৷

2. নমুনা আবেদন

এই ল্যাবটির সুবিধার্থে একটি নমুনা আবেদন প্রদান করা হয়েছে। এই বিভাগে আপনি উৎস কোডটি পুনরুদ্ধার করবেন এবং কন্টেইনারাইজেশন প্রক্রিয়াতে যাওয়ার আগে অ্যাপ্লিকেশনটিকে তার নেটিভ আকারে তৈরি করবেন।

সোর্স কোড

এই ল্যাবের সোর্স কোড নমুনা অ্যাপ্লিকেশন ডকুমেন্টেশন সহ GoogleCloudPlatform/container-developer-workshop সংগ্রহস্থলে উপলব্ধ।

গিট কনফিগার করুন

git config --global user.name ${USER}
git config --global user.email ${USER}@qwiklabs.net

নমুনা অ্যাপ্লিকেশন ক্লাউড সোর্স রিপোজিটরি ক্লোন করুন

gcloud source repos clone sample-app ${HOME}/sample-app &&
cd ${HOME}/sample-app &&
git checkout main

আউটপুট

Cloning into '/home/student_03_49720296e995/sample-app'...
remote: Finding sources: 100% (16/16)
remote: Total 16 (delta 0), reused 16 (delta 0)
Receiving objects: 100% (16/16), 47.23 KiB | 681.00 KiB/s, done.
warning: remote HEAD refers to nonexistent ref, unable to checkout.

Project [qwiklabs-gcp-02-4327c4e03d82] repository [sample-app] was cloned to [/home/student_03_49720296e995/sample-app].
Branch 'main' set up to track remote branch 'main' from 'origin'.
Switched to a new branch 'main'

নমুনা অ্যাপ্লিকেশন তৈরি করুন

cd ${HOME}/sample-app
./mvnw compile

আউটপুট

[INFO] Scanning for projects...
...
[INFO] Compiling 1 source file to /home/student_03_49720296e995/sample-app/target/classes
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  10.080 s
[INFO] Finished at: 2022-02-23T17:14:30Z
[INFO] ------------------------------------------------------------------------

নমুনা অ্যাপ্লিকেশন চালান

cd ${HOME}/sample-app
./mvnw exec:java

আউটপুট

[INFO] Scanning for projects...
...
Listening at http://localhost:8080

চলমান অ্যাপ্লিকেশনের পূর্বরূপ দেখুন

  • ক্লাউড শেল ওয়েব প্রিভিউ বোতামে ক্লিক করুন
  • পোর্ট 8080-এ পূর্বরূপ ক্লিক করুন

আপনার কাজ শেষ হলে

  • চলমান অ্যাপ্লিকেশন বন্ধ করতে ক্লাউড শেল-এ CTRL + c টিপুন

3. ডকারফাইল

একটি ডকারফাইল সহ অ্যাপ্লিকেশন ধারণ করা

একটি পাত্রে একটি অ্যাপ্লিকেশন প্যাকেজ করার একটি পদ্ধতি হল একটি ডকারফাইল ব্যবহার করা। ডকারফাইলটি একটি স্ক্রিপ্টের অনুরূপ যা ডেমনকে নির্দেশ দেয় কিভাবে কন্টেইনার চিত্রটিকে একত্রিত করতে হয়। আরও তথ্যের জন্য ডকারফাইল রেফারেন্স ডকুমেন্টেশন দেখুন।

নমুনা অ্যাপ্লিকেশন সংগ্রহস্থলে একটি খালি ডকারফাইল তৈরি করুন।

touch ${HOME}/sample-app/Dockerfile

আপনার পছন্দের সম্পাদকে ডকারফাইলটি খুলুন।

vi ${HOME}/sample-app/Dockerfile

একটি প্রারম্ভিক ছবি চয়ন করুন

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

FROM নির্দেশনা একটি নতুন বিল্ড স্টেজ শুরু করে এবং পরবর্তী ক্রমিক কমান্ডের জন্য বেস ইমেজ সেট করে। এইভাবে FROM নির্দেশটি সাধারণত একটি ডকারফাইলের প্রথম নির্দেশ এবং ভেরিয়েবল সমর্থন করার জন্য শুধুমাত্র একটি ঐচ্ছিক ARG নির্দেশ দ্বারা পূর্বে হতে পারে।

সিনট্যাক্স: FROM <image>[:<tag> | @<digest>] [AS <name>]

একটি ছবির বিন্যাস হল <image>:<tag> অথবা <image>@<digest> । যদি একটি ট্যাগ বা ডাইজেস্ট নির্দিষ্ট করা না থাকে তবে এটি ডিফল্ট :latest ট্যাগ। ছবি সংরক্ষণ করতে ব্যবহৃত রেজিস্ট্রির উপর ভিত্তি করে <image> এর বিন্যাস পরিবর্তিত হয়। আর্টিফ্যাক্ট রেজিস্ট্রির জন্য <image> ফরম্যাট হল <region>-docker.pkg.dev/<project ID>/<repository name>/<image name>:<image tag>

এই ল্যাবের জন্য আমরা সর্বজনীন openjdk:11.0-jdk ইমেজ ব্যবহার করি, আপনার ডকারফাইলে নিম্নলিখিত লাইনটি যোগ করুন

FROM openjdk:11.0-jdk

কাজের ডিরেক্টরি সেট করুন

WORKDIR নির্দেশ ডকারফাইলে অনুসরণ করা যেকোনো ক্রমিক নির্দেশাবলীর জন্য কাজের ডিরেক্টরি সেট করে। আরও তথ্যের জন্য ডকারফাইল রেফারেন্স ডকুমেন্টেশনের WORKDIR বিভাগটি দেখুন

সিনট্যাক্স: WORKDIR <path>

এই ল্যাবের জন্য আমরা আমাদের WORKDIR হিসাবে /app ডিরেক্টরি ব্যবহার করি, আপনার ডকারফাইলের নীচে নিম্নলিখিত লাইনটি যুক্ত করুন

WORKDIR /app

অ্যাপ্লিকেশন ফাইলগুলি অনুলিপি করুন

COPY নির্দেশনা <source> অবস্থান থেকে চিত্র ফাইল সিস্টেমের <destination> পাথে ডিরেক্টরি বা ফাইল কপি করে। একাধিক <source> সংস্থান নির্দিষ্ট করা যেতে পারে এবং সেগুলি সবই বিল্ড প্রসঙ্গে আপেক্ষিক। বিল্ড প্রেক্ষাপট বিল্ড বিভাগে আরও আলোচনা করা হবে। আরও তথ্যের জন্য ডকারফাইল রেফারেন্স ডকুমেন্টেশনের কপি বিভাগটি দেখুন

সিনট্যাক্স: COPY <source>... <destination>

এই ল্যাবের জন্য আমরা রিপোজিটরির সমস্ত ফাইল ইমেজ ফাইল সিস্টেমে কপি করব, আপনার ডকারফাইলের নীচে নিম্নলিখিত লাইনটি যুক্ত করব

COPY . /app

অ্যাপ্লিকেশন কম্পাইল

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

সিনট্যাক্স: RUN <command>

এই ল্যাবের জন্য আমরা একটি JAR ফাইলে অ্যাপ্লিকেশনটি কম্পাইল করতে Maven ব্যবহার করব, আপনার ডকারফাইলের নীচে নিম্নলিখিত লাইনটি যুক্ত করুন

RUN ./mvnw compile assembly:single

অ্যাপ্লিকেশন শুরু করুন

CMD নির্দেশ একটি চলমান কন্টেইনারের জন্য ডিফল্ট কমান্ড প্রদান করে। একটি ডকারফাইলে শুধুমাত্র একটি সিএমডি নির্দেশ থাকতে পারে, যদি একাধিক সিএমডি নির্দিষ্ট করা থাকে তবে শুধুমাত্র শেষ সিএমডি কার্যকর হবে। CMD এবং ENTRYPOINT উভয় নির্দেশাবলী ব্যবহার করে আরও উন্নত কার্যকারিতা উপলব্ধ আছে, কিন্তু এই ল্যাবে তা কভার করা হয়নি। আরও তথ্যের জন্য ডকারফাইল রেফারেন্স ডকুমেন্টেশনের CMD` বিভাগটি দেখুন

সিনট্যাক্স: CMD ["executable","param1","param2"]

এই ল্যাবের জন্য আমরা আমাদের সংকলিত JAR ফাইলটি চালাই, আপনার ডকারফাইলের নীচে নিম্নলিখিত লাইনটি যোগ করুন

CMD ["java","-jar","/app/target/sample-app-1.0.0-jar-with-dependencies.jar"]

চূড়ান্ত ডকারফাইল

চূড়ান্ত Dockerfile হবে

FROM openjdk:11.0-jdk
WORKDIR /app
COPY . /app
RUN ./mvnw compile assembly:single
CMD ["java","-jar","/app/target/sample-app-1.0.0-jar-with-dependencies.jar"]

স্থানীয়ভাবে ডকারফাইলটি কমিট করুন

cd ${HOME}/sample-app
git add Dockerfile
git commit -m "Added Dockerfile"

4. নির্মাণ

এখন আমরা docker build কমান্ড ব্যবহার করে ডকারফাইল থেকে ইমেজ তৈরি করব। এই কমান্ডটি আমাদের ডকারফাইলের নির্দেশাবলী ব্যবহার করে ইমেজ তৈরি করতে ডকার ডেমনকে নির্দেশ দেয়। আরও তথ্যের জন্য ডকার বিল্ড রেফারেন্স ডকুমেন্টেশন দেখুন।

ইমেজ তৈরি করুন

cd ${HOME}/sample-app
export IMAGE_TAG=$(git rev-parse --short HEAD)
docker build --tag sample-app:${IMAGE_TAG} .

আউটপুট

Sending build context to Docker daemon  221.2kB
Step 1/4 : FROM openjdk:11.0-jdk
11.0-jdk: Pulling from library/openjdk
0c6b8ff8c37e: Pull complete
412caad352a3: Pull complete
e6d3e61f7a50: Pull complete
461bb1d8c517: Pull complete
e442ee9d8dd9: Pull complete
542c9fe4a7ba: Pull complete
41de18d1833d: Pull complete
Digest: sha256:d72b1b9e94e07278649d91c635e34737ae8f181c191b771bde6816f9bb4bd08a
Status: Downloaded newer image for openjdk:11.0-jdk
---> 2924126f1829
Step 2/4 : WORKDIR /app
---> Running in ea037abb273d
Removing intermediate container ea037abb273d
---> bd9b6d078082
Step 3/4 : COPY . /app
---> b9aec2b5de51
Step 4/4 : RUN ./mvnw compile jar:jar
---> Running in 3f5ff737b7fd
[INFO] Scanning for projects...
...
[INFO] Building jar: /app/target/sample-app-1.0.0.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  22.952 s
[INFO] Finished at: 2022-02-23T18:09:08Z
[INFO] ------------------------------------------------------------------------
Removing intermediate container 331443caebd3
---> 152f65cc441e
Step 5/5 : CMD ["java", "-jar", "/app/target/sample-app-1.0.0.jar"]
---> Running in 3d595a72231c
Removing intermediate container 3d595a72231c
---> 0e40d7548cab
Successfully built 0e40d7548cab
Successfully tagged sample-app:aaa8895

5. রান

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

ছবিটি ব্যবহার করে একটি ধারক চালান

cd ${HOME}/sample-app
export IMAGE_TAG=$(git rev-parse --short HEAD)
docker run \
  --rm \
  -p 8080:8080 \
  sample-app:${IMAGE_TAG}

আউটপুট

Listening at http://localhost:8080

একটি পাত্রে চলমান অ্যাপ্লিকেশনটির পূর্বরূপ দেখুন

  • ক্লাউড শেল ওয়েব প্রিভিউ বোতামে ক্লিক করুন
  • পোর্ট 8080-এ পূর্বরূপ ক্লিক করুন
  • ক্লাউড শেলে CTRL + c টিপুন কনটেইনার বন্ধ করতে

ধারক আচরণ পরিবর্তন

Docker Run কার্যকর করা ডকারফাইলে ডিফল্ট কনফিগারেশন ব্যবহার করে। এই আচরণ পরিবর্তন করতে অতিরিক্ত নির্দেশাবলী এবং পরামিতি যোগ করা যেতে পারে।

TRACE লগিং সক্ষম করুন৷

cd ${HOME}/sample-app
export IMAGE_TAG=$(git rev-parse --short HEAD)
docker run \
  --rm \
  -p 8080:8080 \
  sample-app:${IMAGE_TAG} \
  java -Dorg.slf4j.simpleLogger.defaultLogLevel=trace -jar /app/target/sample-app-1.0.0-jar-with-dependencies.jar

একটি পাত্রে চলমান অ্যাপ্লিকেশনটির পূর্বরূপ দেখুন

  • ক্লাউড শেল ওয়েব প্রিভিউ বোতামে ক্লিক করুন
  • পোর্ট 8080-এ পূর্বরূপ ক্লিক করুন
  • ক্লাউড শেল ট্যাবে স্যুইচ করুন এবং সেই অতিরিক্ত লগিং দেখুন
  • কনটেইনার বন্ধ করতে ক্লাউড শেল-এ CTRL + c টিপুন

পোর্ট পরিবর্তন করুন

cd ${HOME}/sample-app
export IMAGE_TAG=$(git rev-parse --short HEAD)
docker run \
--rm \
-e PORT=8081 \
-p 8081:8081 \
sample-app:${IMAGE_TAG}

একটি পাত্রে চলমান অ্যাপ্লিকেশনটির পূর্বরূপ দেখুন

  • ক্লাউড শেল ওয়েব প্রিভিউ বোতামে ক্লিক করুন
  • পোর্ট পরিবর্তন ক্লিক করুন
  • 8081 লিখুন
  • পরিবর্তন এবং পূর্বরূপ ক্লিক করুন
  • কনটেইনার বন্ধ করতে ক্লাউড শেল-এ CTRL + c টিপুন

6. ধাক্কা

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

নমুনা-অ্যাপ সংগ্রহস্থলে ডকারফাইল কমিটটি পুশ করুন

cd ${HOME}/sample-app
export IMAGE_TAG=$(git rev-parse --short HEAD)
git push

আর্টিফ্যাক্ট রেজিস্ট্রির জন্য ছবিটি ট্যাগ করুন

docker tag sample-app:${IMAGE_TAG} \
    us-central1-docker.pkg.dev/${GOOGLE_CLOUD_PROJECT}/apps/sample-app:${IMAGE_TAG}

আর্টিফ্যাক্ট রেজিস্ট্রির জন্য আপনার শংসাপত্রগুলি কনফিগার করুন

gcloud auth configure-docker us-central1-docker.pkg.dev

যখন অনুরোধ করা হয় Do you want to continue (Y/n)? উত্তর y এবং Enter টিপুন

চিত্রটিকে আর্টিফ্যাক্ট রেজিস্ট্রিতে পুশ করুন

docker push us-central1-docker.pkg.dev/${GOOGLE_CLOUD_PROJECT}/apps/sample-app:${IMAGE_TAG}

আউটপুট

 The push refers to repository [us-central1-docker.pkg.dev/qwiklabs-gcp-04-b47ced695a3c/apps/sample-app]
  453b97f86449: Pushed
  e86791aa0382: Pushed
  d404c7ee0850: Pushed
  fe4f44af763d: Pushed
  7c072cee6a29: Pushed
  1e5fdc3d671c: Pushed
  613ab28cf833: Pushed
  bed676ceab7a: Pushed
  6398d5cccd2c: Pushed
  0b0f2f2f5279: Pushed
  aaa8895: digest: sha256:459de00f86f159cc63f98687f7c9563fd65a2eb9bcc71c23dda3351baf13607a size: 2424

7. অভিনন্দন!

অভিনন্দন, আপনি কোডল্যাব শেষ করেছেন!

আপনি কভার করেছেন কি

  • একটি নমুনা অ্যাপ্লিকেশনের জন্য একটি ডকারফাইল তৈরি করা হয়েছে
  • একটি ইমেজ তৈরি করেছেন
  • স্থানীয়ভাবে একটি ধারক হিসাবে চিত্র চালান
  • পরিবর্তিত ধারক আচরণ
  • চিত্রটিকে আর্টিফ্যাক্ট রেজিস্ট্রিতে পুশ করা হয়েছে