خبر و ترفند روز

خبر و ترفند های روز را اینجا بخوانید!

کانتینر کردن برنامه های Go با Docker

بیاموزید که چگونه از Docker برای بسته بندی و استقرار کارآمد برنامه های Go خود استفاده کنید و آنها را قابل حمل و مدیریت آسان کنید.

Docker به دلیل سادگی و سهولت استفاده، محبوب‌ترین فناوری کانتینری‌سازی است. Docker استرس ناشی از مسائل قابل حمل را در توسعه و توزیع نرم افزار کاهش می دهد. می توانید کانتینرهای docker خود را در اکثر ارائه دهندگان خدمات ابری مستقر کنید.

کانتینر کردن برنامه های Go خود با Docker می تواند به شما کمک کند از استقرار مداوم و قابل اعتماد در محیط های مختلف اطمینان حاصل کنید. می‌توانید برنامه‌های Go خود را در محیط‌های مختلفی مانند توسعه، مرحله‌بندی، و تولید مستقر کنید. کانتینرهای Docker نسبت به ماشین های مجازی سنتی سبک وزن هستند و فضای کمتری را اشغال می کنند. این می تواند در هزینه های میزبانی صرفه جویی کند و همچنین می تواند استقرار شما را سریعتر کند.

راه اندازی یک وب سرور ساده در Go

کتابخانه استاندارد Go شامل بسته هایی است که برای راه اندازی یک وب سرور ساده به آن نیاز دارید.

ابتدا بسته های http، log و json را وارد کنید. شما از بسته http Go برای راه اندازی سرور و نقطه پایان درخواست GET استفاده خواهید کرد. بسته log برای ثبت خطاهای احتمالی در کنسول شما. بسته json برای رمزگذاری یک ساختار به JSON برای نقطه پایانی API.

import (
    "encoding/json"
    "log"
    "net/http"
)

می‌توانید یک نمونه ساختار را به‌عنوان JSON به‌عنوان پاسخی بر اساس اعتبار درخواست به مشتری کدگذاری کنید:

type Message struct {
    Response string`json:"response"`
    Description string`json:"description"`
}

اگر درخواست به نقطه پایانی یک درخواست GET باشد، تابع handler یک پیام موفقیت آمیز را به مشتری برمی گرداند.

// dockerTestEndpoint handles the API endpoint for testing Docker connectivity
func dockerTestEndpoint(writer http.ResponseWriter, request *http.Request) {

    // Set the response header to indicate JSON content
    writer.Header().Set("Content-Type," "application/json")

    // If the request method is GET
    if request.Method == "GET" {

        // Set the response status code to 200 OK
        writer.WriteHeader(http.StatusOK)

        // Create a message struct for a successful response
        message := Message{
            Response: "Successful",
            Description: "You've successfully hit the API endpoint " +
                "From your Docker Container",
        }
        // Encode the message as JSON and send it as the response
        err := json.NewEncoder(writer).Encode(&message)
        if err != nil {
            return
        }
    } else {

        // If the request method is not GET
        // Set the response status code to 400 Bad Request
        writer.WriteHeader(http.StatusBadRequest)

        // Create a message struct for a bad request response
        message := Message{
            Response: "Bad Request",
            Description: "You've successfully hit the API endpoint From your " +
                "Docker Container, But you made a bad request",
        }

        // Encode the message as JSON and send it as the response
        err := json.NewEncoder(writer).Encode(&message)
        if err != nil {
            return
        }
    }
}

شما تابع handler را در تابع اصلی با مسیر به صورت /api/docker/go تنظیم می کنید. تابع کنترل کننده dockerTestEndpoint تأیید می کند که درخواست به کنترل کننده یک درخواست GET است. اگر یک درخواست GET باشد، یک نمونه ساختار Message instantated را بر اساس وضعیت درخواست برای مشتری رمزگذاری می کند.

مطلب مرتبط:   نحوه ایجاد درخواست HTTP در Go

در اینجا نحوه نصب تابع هندلر در مسیر و راه اندازی سرور برای اجرا در پورت 8080 آمده است:

func main() {
    // Register the handler function 'dockerTestEndpoint'
    // to handle requests for the "/api/docker/go" URL.
    http.HandleFunc("/api/docker/go", dockerTestEndpoint)

    // Start the HTTP server and listen for incoming requests on port 8080.
    err := http.ListenAndServe(":8080", nil)
    if err != nil {
        log.Fatalln("There's an error with the server:", err)
    }
}

تابع اصلی نقطه ورودی سرور است که به پورت 8080 گوش می دهد. روش HandleFunc مسیرها را بر روی تابع کنترلر نصب می کند. متد ListenAndServe سرور را روی پورت میزبان محلی مشخص شده 8080 راه اندازی می کند.

شروع به کانتینر کردن برنامه های Go خود با Docker

پس از نصب و راه‌اندازی Docker، برای ایجاد و ساختن یک تصویر Docker برای برنامه Go خود به یک فایل Docker به نام Dockerfile نیاز دارید. شما دستوراتی را برای تصویر پایه و دستوراتی برای کپی کردن فایل ها، افزودن دایرکتوری کاری و اجرای برنامه در Dockerfile مشخص خواهید کرد.

این دستور را در ترمینال فضای کاری خود اجرا کنید تا یک Dockerfile ایجاد کنید.

touch Dockerfile

شما دستورات ساخت تصویر Docker خود را در Dockerfile مشخص خواهید کرد.

اگر فایلی وجود دارد که می خواهید از تصویر Docker خود جدا کنید، می توانید از یک فایل .dockerignore استفاده کنید. فایل‌های .dockerignore دقیقاً مانند فایل‌های .gitignore کار می‌کنند.

touch .dockerignore

در مرحله بعد، دستورات ساخت را در Dockerfile خود برای محفظه کردن برنامه های خود مشخص می کنید.

مطلب مرتبط:   اشاره گرهای هوشمند در زنگ: چگونه کار می کنند؟

تعریف دستورات در Dockerfile

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

Dockerfiles بر اساس مشخصات پروژه شما قابل تنظیم است. شما دستوراتی را برای ساختن تصویر پایه برای ساخت برنامه تعریف خواهید کرد.

در اینجا نمونه ای از محتویات یک Dockerfile است که سرور وب را در بالا می سازد:

# Use a Golang base image
FROM golang:latest

# Set the working directory inside the container
WORKDIR /app

# Copies all the files in the local directory to the working directory in the container
COPY . .

# Download the Go module dependencies
RUN go mod download

# Build the Go application
RUN go build -o app

# Set the entry point for the application
ENTRYPOINT ["./app"]

Dockerfile از golang: آخرین تصویر پایه برای ساخت برنامه پس از تنظیم دایرکتوری کاری روی /app استفاده می کند.

Dockerfile فایل ها را با دستور COPY کپی می کند و وابستگی ها را با دستور RUN دانلود می کند.

فایل یک عملیات ساخت و اجرا را با دستور RUN مشخص می‌کند، سپس دستور را تنظیم می‌کند تا زمانی که ظرف با دستور CMD شروع می‌شود، اجرا شود.

Dockerfile را در همان فهرستی که فایل‌های go.mod و main.go خود ذخیره می‌کنند. سپس این دستور را اجرا کنید تا یک تصویر Docker از این Dockerfile بسازید:

docker build -t GolangTutorial .

دستور بالا یک تصویر Docker با آموزش تگ golang ایجاد می کند. با این دستور می توانید یک کانتینر را اجرا کنید:

docker run -p 8080:8080 golangtutorial

این فرمان پورت 8080 را از کانتینر به پورت 8080 در لوکال هاست دستگاه میزبان نگاشت می کند. می توانید سرور در حال اجرا در ظرف Docker را از دستگاه میزبان درخواست کنید.

مطلب مرتبط:   نحوه حذف ایمن دسکتاپ Docker از مک

در اینجا نتیجه ارسال درخواست CURL به سرور است که این بار در Docker اجرا می شود:

نتیجه درخواست به کانتینر Docker

می توانید از Docker Compose برای ارکستراسیون کانتینر استفاده کنید

Docker Compose ابزاری است که می توانید از آن برای هماهنگی (کار با بسیاری از) کانتینرهای Docker استفاده کنید. Docker Compose به شما امکان می دهد یک برنامه چند کانتینری را در یک فایل YAML تعریف کنید. شما می توانید با یک دستور کل برنامه را اجرا و مدیریت کنید.

می توانید از Docker Compose برای استقرار و مدیریت برنامه های پیچیده کانتینری استفاده کنید. Docker Compose مدیریت را با استقرار خودکار و مداوم ساده می کند.