برنامه نویسی

استفاده از GitHub Container Registry (GHCR) برای میزبانی تصاویر Docker شما

Summarize this content to 400 words in Persian Lang

ابزارهای مورد استفاده

داکر

Github

GHCR (رجیستری کانتینر GitHub)

اکشن Github

طرح کلی ابزارها

داکر

داکر یک ابزار کانتینری‌سازی است. امروزه به طور گسترده در بسیاری از شرکت ها استفاده می شود زیرا ساخت، آزمایش و استقرار سریع برنامه ها را آسان می کند. می تواند در هر محیطی اجرا شود.

Docker حاوی کد منبع برنامه‌ای است که توسعه می‌دهید و یک سیستم‌عامل با کتابخانه‌های داخلی.

مانند یک ماشین مجازی عمل می کند، به همین دلیل است که شامل یک سیستم عامل است. ما می توانیم تصاویر سیستم عامل را بر اساس نیاز خود انتخاب کنیم.

به زبان ساده، مثل این است که کل سیستم خود را بسته بندی می کنیم، یک برچسب حمل و نقل را روی آن می زنیم و مستقیماً آن را به درب منزل مشتری می فرستیم!

GitHub

GitHub یک سیستم کنترل نسخه است که در آن کد خود را آپلود و مدیریت می کنیم. تغییرات ایجاد شده در فایل ها را پیگیری می کند.

به عنوان مثال، اگر من یک فایل تصویری را در یک مخزن در GitHub آپلود کنم و بعداً تصمیم بگیرم آن را با یک نسخه جدید جایگزین کنم، می‌توانم فایل تصویری جدید را به مخزن اضافه کنم.

این عمل با حفظ تاریخچه تغییرات، نسخه جدیدی از فایل را ایجاد می کند. اگر در هر نقطه ای، مردم تصمیم بگیرند که تصویر اصلی را به تصویر جدید ترجیح دهند، می توانم به راحتی با استفاده از ویژگی های کنترل نسخه GitHub به نسخه قبلی برگردم.

این فرآیند تضمین می‌کند که همه تغییرات ردیابی شده و قابل برگشت هستند و روشی قوی برای مدیریت و نگهداری نسخه‌های مختلف فایل‌ها در طول زمان ارائه می‌دهد.

علاوه بر این، GitHub امکان کار مشترک را فراهم می‌کند، بنابراین افراد متعددی می‌توانند در پروژه مشارکت کنند، تغییرات را بررسی کنند و پیشرفت‌ها را پیشنهاد دهند، و آن را به ابزاری ارزشمند برای توسعه نرم‌افزار و مدیریت پروژه تبدیل کنند.

GHCR

GHCR مخفف GITHUB CONTAINER Registry است

GitHub Container Registry (GHCR) رجیستری است که به کاربران اجازه می دهد تا تصاویر کانتینر Docker را در حساب GitHub خود میزبانی و مدیریت کنند.

اکشن Github

GitHub Actions یک پلتفرم یکپارچه سازی و تحویل مداوم (CI/CD) است که به شما امکان می دهد خط لوله ساخت، آزمایش و استقرار خود را خودکار کنید.

بیایید ببینیم چگونه پروژه های خود را بسازم

یک روز، در حین یادگیری Docker، یک ایده به ذهنم رسید: “چرا یک Dockerfile ایجاد نکنیم، آن را در GitHub اجرا نکنیم و در آنجا میزبانی کنیم؟”

بنابراین، تصمیم گرفتم یک Dockerfile بنویسم که حاوی بازی 2048 باشد. من قبلاً Dockerfile را به صورت محلی آزمایش کرده بودم و بدون مشکل اجرا شد. اجازه دهید آن را به GHCR منتقل کنیم.

# Use a lightweight base image
FROM alpine:3.18

# Install dependencies (Nginx, zip, curl)
RUN apk add –no-cache nginx zip curl && \
mkdir -p /var/www/html

# Download and extract 2048 game files
RUN curl -o /var/www/html/master.zip -L https://codeload.github.com/gabrielecirulli/2048/zip/master && \
cd /var/www/html/ && unzip master.zip && mv 2048-master/* . && rm -rf 2048-master master.zip

# Copy Nginx configuration file
COPY default.conf /etc/nginx/http.d/default.conf

# Expose port 80 for Nginx
EXPOSE 80

# Start Nginx in foreground
CMD [“nginx”, “-g”, “daemon off;”]

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

سپس یک تصویر Docker ایجاد کردم و آن را به GitHub فشار دادم. پس از آن، من یک خط لوله CI/CD با استفاده از GitHub Actions برای اتصال به GHCR نوشتم.

از آنجا که GitHub نمی تواند مستقیماً خود را بسازد، اجرا کند و میزبانی کند، ما به یک رجیستری کانتینری مانند Docker Hub یا جایگزین هایی مانند GHCR نیاز داریم.

GitHub فقط می تواند میزبان یک سایت ثابت باشد.

با استفاده از این ابزارها می توانیم این Dockerfile را اجرا کنیم. تصمیم گرفتم GHCR را انتخاب کنم زیرا محصول GitHub است و پیکربندی آن نیز آسان است.

بنابراین، اگر تغییری در شاخه اصلی ایجاد شود، اکشن GitHub به طور خودکار فعال می شود.

name: Build, Push, and Deploy Docker Image for 2048

on:
push:
branches:
– main

jobs:
build_and_publish:
runs-on: ubuntu-latest

steps:
– name: Checkout repository
uses: actions/checkout@v3

– name: Log in to GitHub Container Registry
run: echo “${{ secrets.GH_PAT }}” | docker login ghcr.io -u madhucheran –password-stdin

– name: Build and push the Docker image
run: |
docker build . –tag ghcr.io/madhucheran/2048-ghcr:latest
docker push ghcr.io/madhucheran/2048-ghcr:latest

deploy:
needs: build_and_publish
runs-on: ubuntu-latest

steps:
– name: Checkout repository
uses: actions/checkout@v3

– name: Log in to GitHub Container Registry
run: echo “${{ secrets.GH_PAT }}” | docker login ghcr.io -u madhucheran –password-stdin

– name: Pull Docker image
run: docker pull ghcr.io/madhucheran/2048-ghcr:latest

– name: Create a container and extract static files
run: |
mkdir -p ./public
docker run –rm -d –name 2048-container ghcr.io/madhucheran/2048-ghcr:latest
sleep 10 # Wait for the container to start
docker cp 2048-container:/var/www/html ./public
docker stop 2048-container
ls -la ./public # List files to ensure index.html is present

– name: Deploy to GitHub Pages
uses: peaceiris/actions-gh-pages@v3
with:
github_token: ${{ secrets.GIT_TOKEN }}
publish_dir: ./public/html # Adjusted path to the html folder
publish_branch: gh-pages

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

این فرآیند CI/CD فایل‌های داخل Dockerfile را ساخته، اجرا و مستقر می‌کند.

فایل را در GHCR می سازد، آن را در GHCR اجرا می کند و سپس آن را به GitHub می کشد. به طور خودکار یک شعبه جدید در GitHub ایجاد می کند.

در GitHub، ما باید آن را میزبانی کنیم، بنابراین من از gh-pages برای میزبانی استفاده کردم.

بخش CI/CD

هر گونه تغییر در شاخه اصلی github بخش CI/CD به طور خودکار راه اندازی می شود و دستورات

بعد از ماشه

به رجیستری کانتینر github وارد می شود

سپس فایل ها را در داخل dockerfile ساخته و فشار می دهد

گسترش

اکنون دوباره به GHCR وارد می شود

اکنون فایل هایی را که همگی توسط dockerfile در حال اجرا هستند توسط docker می کشد

فایل های داخل کانتینر در حال اجرا را در پوشه مورد نظر کپی کنید

./public برای نشان دادن github استفاده می شود که در اینجا index.html در میزبان ذخیره می شود

سپس این فایل ها را از کانتینر در صفحات gh مستقر می کند

و اگر با موفقیت اجرا و اجرا شود، gh-pages خودش میزبان خواهد بود

در تجربه من می‌گویم که “اگر هنگام اجرای هر کاری با خطاهای زیادی روبرو می‌شوید، پس خوشبخت هستید”

خلاصه

این مقاله نحوه ساخت، آزمایش و استقرار نسخه Dockerized بازی 2048 را با استفاده از Docker، GitHub، GHCR (Registry Container GitHub) و GitHub Actions برای اتوماسیون CI/CD توضیح می دهد. ما یک Dockerfile ایجاد می‌کنیم، تصویر Docker را به GHCR فشار می‌دهیم و یک خط لوله CI/CD با GitHub Actions راه‌اندازی می‌کنیم که هر زمان که تغییراتی در شاخه اصلی ایجاد شود، به‌طور خودکار تصویر Docker را می‌سازد، فشار می‌دهد و مستقر می‌کند. در نهایت، ما میزبان سایت ایستا با صفحات gh خواهیم بود که امکان یکپارچه سازی و استقرار یکپارچه بازی 2048 را فراهم می کند.

اگر خطایی در این وبلاگ وجود دارد به من اطلاع دهید

❝𝐋𝐞𝐭𝐬-𝐋𝐞𝐚𝐫𝐧-𝐓𝐨𝐠𝐞𝐭𝐡𝐞𝐫❞

پیوند داده شده است

توییتر

Reddit

پخته شده با 🔥 توسط Maducheran

ابزارهای مورد استفاده

داکر

Github

GHCR (رجیستری کانتینر GitHub)

اکشن Github

طرح کلی ابزارها

داکر

داکر یک ابزار کانتینری‌سازی است. امروزه به طور گسترده در بسیاری از شرکت ها استفاده می شود زیرا ساخت، آزمایش و استقرار سریع برنامه ها را آسان می کند. می تواند در هر محیطی اجرا شود.

Docker حاوی کد منبع برنامه‌ای است که توسعه می‌دهید و یک سیستم‌عامل با کتابخانه‌های داخلی.

مانند یک ماشین مجازی عمل می کند، به همین دلیل است که شامل یک سیستم عامل است. ما می توانیم تصاویر سیستم عامل را بر اساس نیاز خود انتخاب کنیم.

به زبان ساده، مثل این است که کل سیستم خود را بسته بندی می کنیم، یک برچسب حمل و نقل را روی آن می زنیم و مستقیماً آن را به درب منزل مشتری می فرستیم!

GitHub

GitHub یک سیستم کنترل نسخه است که در آن کد خود را آپلود و مدیریت می کنیم. تغییرات ایجاد شده در فایل ها را پیگیری می کند.

به عنوان مثال، اگر من یک فایل تصویری را در یک مخزن در GitHub آپلود کنم و بعداً تصمیم بگیرم آن را با یک نسخه جدید جایگزین کنم، می‌توانم فایل تصویری جدید را به مخزن اضافه کنم.

این عمل با حفظ تاریخچه تغییرات، نسخه جدیدی از فایل را ایجاد می کند. اگر در هر نقطه ای، مردم تصمیم بگیرند که تصویر اصلی را به تصویر جدید ترجیح دهند، می توانم به راحتی با استفاده از ویژگی های کنترل نسخه GitHub به نسخه قبلی برگردم.

این فرآیند تضمین می‌کند که همه تغییرات ردیابی شده و قابل برگشت هستند و روشی قوی برای مدیریت و نگهداری نسخه‌های مختلف فایل‌ها در طول زمان ارائه می‌دهد.

علاوه بر این، GitHub امکان کار مشترک را فراهم می‌کند، بنابراین افراد متعددی می‌توانند در پروژه مشارکت کنند، تغییرات را بررسی کنند و پیشرفت‌ها را پیشنهاد دهند، و آن را به ابزاری ارزشمند برای توسعه نرم‌افزار و مدیریت پروژه تبدیل کنند.

GHCR

GHCR مخفف GITHUB CONTAINER Registry است

GitHub Container Registry (GHCR) رجیستری است که به کاربران اجازه می دهد تا تصاویر کانتینر Docker را در حساب GitHub خود میزبانی و مدیریت کنند.

اکشن Github

GitHub Actions یک پلتفرم یکپارچه سازی و تحویل مداوم (CI/CD) است که به شما امکان می دهد خط لوله ساخت، آزمایش و استقرار خود را خودکار کنید.


بیایید ببینیم چگونه پروژه های خود را بسازم

یک روز، در حین یادگیری Docker، یک ایده به ذهنم رسید: “چرا یک Dockerfile ایجاد نکنیم، آن را در GitHub اجرا نکنیم و در آنجا میزبانی کنیم؟”

بنابراین، تصمیم گرفتم یک Dockerfile بنویسم که حاوی بازی 2048 باشد. من قبلاً Dockerfile را به صورت محلی آزمایش کرده بودم و بدون مشکل اجرا شد. اجازه دهید آن را به GHCR منتقل کنیم.

# Use a lightweight base image
FROM alpine:3.18

# Install dependencies (Nginx, zip, curl)
RUN apk add --no-cache nginx zip curl && \
    mkdir -p /var/www/html

# Download and extract 2048 game files
RUN curl -o /var/www/html/master.zip -L https://codeload.github.com/gabrielecirulli/2048/zip/master && \
    cd /var/www/html/ && unzip master.zip && mv 2048-master/* . && rm -rf 2048-master master.zip

# Copy Nginx configuration file
COPY default.conf /etc/nginx/http.d/default.conf

# Expose port 80 for Nginx
EXPOSE 80

# Start Nginx in foreground
CMD ["nginx", "-g", "daemon off;"]

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

سپس یک تصویر Docker ایجاد کردم و آن را به GitHub فشار دادم. پس از آن، من یک خط لوله CI/CD با استفاده از GitHub Actions برای اتصال به GHCR نوشتم.

از آنجا که GitHub نمی تواند مستقیماً خود را بسازد، اجرا کند و میزبانی کند، ما به یک رجیستری کانتینری مانند Docker Hub یا جایگزین هایی مانند GHCR نیاز داریم.

GitHub فقط می تواند میزبان یک سایت ثابت باشد.

با استفاده از این ابزارها می توانیم این Dockerfile را اجرا کنیم. تصمیم گرفتم GHCR را انتخاب کنم زیرا محصول GitHub است و پیکربندی آن نیز آسان است.

بنابراین، اگر تغییری در شاخه اصلی ایجاد شود، اکشن GitHub به طور خودکار فعال می شود.

name: Build, Push, and Deploy Docker Image for 2048

on:
  push:
    branches:
      - main

jobs:
  build_and_publish:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout repository
        uses: actions/checkout@v3

      - name: Log in to GitHub Container Registry
        run: echo "${{ secrets.GH_PAT }}" | docker login ghcr.io -u madhucheran --password-stdin

      - name: Build and push the Docker image
        run: |
          docker build . --tag ghcr.io/madhucheran/2048-ghcr:latest
          docker push ghcr.io/madhucheran/2048-ghcr:latest

  deploy:
    needs: build_and_publish
    runs-on: ubuntu-latest

    steps:
      - name: Checkout repository
        uses: actions/checkout@v3

      - name: Log in to GitHub Container Registry
        run: echo "${{ secrets.GH_PAT }}" | docker login ghcr.io -u madhucheran --password-stdin

      - name: Pull Docker image
        run: docker pull ghcr.io/madhucheran/2048-ghcr:latest

      - name: Create a container and extract static files
        run: |
          mkdir -p ./public
          docker run --rm -d --name 2048-container ghcr.io/madhucheran/2048-ghcr:latest
          sleep 10 # Wait for the container to start
          docker cp 2048-container:/var/www/html ./public
          docker stop 2048-container
          ls -la ./public # List files to ensure index.html is present

      - name: Deploy to GitHub Pages
        uses: peaceiris/actions-gh-pages@v3
        with:
          github_token: ${{ secrets.GIT_TOKEN }}
          publish_dir: ./public/html  # Adjusted path to the html folder
          publish_branch: gh-pages

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

این فرآیند CI/CD فایل‌های داخل Dockerfile را ساخته، اجرا و مستقر می‌کند.

فایل را در GHCR می سازد، آن را در GHCR اجرا می کند و سپس آن را به GitHub می کشد. به طور خودکار یک شعبه جدید در GitHub ایجاد می کند.

در GitHub، ما باید آن را میزبانی کنیم، بنابراین من از gh-pages برای میزبانی استفاده کردم.


بخش CI/CD

هر گونه تغییر در شاخه اصلی github بخش CI/CD به طور خودکار راه اندازی می شود و دستورات

بعد از ماشه

به رجیستری کانتینر github وارد می شود

سپس فایل ها را در داخل dockerfile ساخته و فشار می دهد

گسترش

اکنون دوباره به GHCR وارد می شود

اکنون فایل هایی را که همگی توسط dockerfile در حال اجرا هستند توسط docker می کشد

فایل های داخل کانتینر در حال اجرا را در پوشه مورد نظر کپی کنید

./public برای نشان دادن github استفاده می شود که در اینجا index.html در میزبان ذخیره می شود

سپس این فایل ها را از کانتینر در صفحات gh مستقر می کند

و اگر با موفقیت اجرا و اجرا شود، gh-pages خودش میزبان خواهد بود


در تجربه من می‌گویم که “اگر هنگام اجرای هر کاری با خطاهای زیادی روبرو می‌شوید، پس خوشبخت هستید”


خلاصه

این مقاله نحوه ساخت، آزمایش و استقرار نسخه Dockerized بازی 2048 را با استفاده از Docker، GitHub، GHCR (Registry Container GitHub) و GitHub Actions برای اتوماسیون CI/CD توضیح می دهد. ما یک Dockerfile ایجاد می‌کنیم، تصویر Docker را به GHCR فشار می‌دهیم و یک خط لوله CI/CD با GitHub Actions راه‌اندازی می‌کنیم که هر زمان که تغییراتی در شاخه اصلی ایجاد شود، به‌طور خودکار تصویر Docker را می‌سازد، فشار می‌دهد و مستقر می‌کند. در نهایت، ما میزبان سایت ایستا با صفحات gh خواهیم بود که امکان یکپارچه سازی و استقرار یکپارچه بازی 2048 را فراهم می کند.


اگر خطایی در این وبلاگ وجود دارد به من اطلاع دهید

❝𝐋𝐞𝐭𝐬-𝐋𝐞𝐚𝐫𝐧-𝐓𝐨𝐠𝐞𝐭𝐡𝐞𝐫❞

پیوند داده شده است

توییتر

Reddit

پخته شده با 🔥 توسط Maducheran

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا