/ / Chứa ứng dụng Go với Docker

Chứa ứng dụng Go với Docker

Docker là công nghệ container hóa phổ biến nhất nhờ tính đơn giản và dễ sử dụng của nó. Docker giảm bớt căng thẳng về các vấn đề về tính di động trong quá trình phát triển và phân phối phần mềm. Bạn có thể triển khai bộ chứa docker của mình cho hầu hết các nhà cung cấp dịch vụ đám mây.


Việc chứa các ứng dụng Go của bạn bằng Docker có thể giúp bạn đảm bảo việc triển khai nhất quán và đáng tin cậy trên các môi trường khác nhau. Bạn có thể triển khai các ứng dụng Go của mình cho các môi trường khác nhau như phát triển, dàn dựng và sản xuất. Docker container nhẹ và chiếm ít không gian hơn so với các máy ảo truyền thống. Điều này có thể giúp bạn tiết kiệm tiền cho chi phí lưu trữ và nó cũng có thể giúp bạn triển khai nhanh hơn.


Thiết lập một máy chủ web đơn giản trong Go

Thư viện chuẩn Go chứa các gói bạn cần để thiết lập một máy chủ web đơn giản.

Đầu tiên, nhập khẩu http, đăng nhậpjson gói. Bạn sẽ sử dụng gói http của Go để thiết lập máy chủ và LẤY yêu cầu điểm cuối. Các đăng nhập gói để ghi các lỗi có thể xảy ra vào bảng điều khiển của bạn. Gói json để mã hóa cấu trúc thành JSON cho điểm cuối API.

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

Bạn có thể mã hóa một thể hiện cấu trúc dưới dạng JSON cho máy khách dưới dạng phản hồi dựa trên tính hợp lệ của yêu cầu như sau:

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

Hàm xử lý sẽ trả về một thông báo thành công cho máy khách nếu yêu cầu tới điểm cuối là một LẤY lời yêu cầu.

 
func dockerTestEndpoint(writer http.ResponseWriter, request *http.Request) {

    
    writer.Header().Set("Content-Type," "application/json")

    
    if request.Method == "GET" {

        
        writer.WriteHeader(http.StatusOK)

        
        message := Message{
            Response: "Successful",
            Description: "You've successfully hit the API endpoint " +
                "From your Docker Container",
        }
        
        err := json.NewEncoder(writer).Encode(&message)
        if err != nil {
            return
        }
    } else {

        
        
        writer.WriteHeader(http.StatusBadRequest)

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

        
        err := json.NewEncoder(writer).Encode(&message)
        if err != nil {
            return
        }
    }
}

Bạn thiết lập hàm xử lý trong hàm main với route là /api/docker/go. Các dockerTestEndpoint chức năng xử lý xác thực rằng yêu cầu tới trình xử lý là yêu cầu GET. Nếu đó là một yêu cầu GET, nó mã hóa một khởi tạo Tin nhắn struct cho máy khách dựa trên trạng thái của yêu cầu.

Đây là cách bạn có thể gắn hàm xử lý trên một tuyến và thiết lập máy chủ để chạy trên cổng 8080:

 func main() {
    
    
    http.HandleFunc("/api/docker/go", dockerTestEndpoint)

    
    err := http.ListenAndServe(":8080", nil)
    if err != nil {
        log.Fatalln("There's an error with the server:", err)
    }
}

Các chủ yếu chức năng là điểm vào của máy chủ, lắng nghe trên cổng 8080. Các xử lý chức năng phương thức gắn kết các tuyến trên chức năng xử lý. Các lắng nghe và phục vụ phương thức khởi động máy chủ trên cổng máy chủ cục bộ được chỉ định 8080.

Bắt đầu chứa các ứng dụng Go của bạn với Docker

Sau khi cài đặt và thiết lập Docker, bạn sẽ cần một tệp Docker có tên Dockerfile để tạo và xây dựng hình ảnh Docker cho ứng dụng Go của mình. Bạn sẽ chỉ định các lệnh cho hình ảnh cơ sở và các lệnh để sao chép tệp, thêm thư mục làm việc và chạy ứng dụng trong Dockerfile.

Chạy lệnh này trong thiết bị đầu cuối của không gian làm việc của bạn để tạo Dockerfile.

 touch Dockerfile

Bạn sẽ chỉ định các lệnh để xây dựng hình ảnh Docker của mình trong Dockerfile.

Nếu có bất kỳ tệp nào bạn muốn tách khỏi hình ảnh Docker của mình, bạn có thể sử dụng .dockerignore tài liệu. Các .dockerignore tập tin hoạt động chính xác như .gitignore các tập tin.

 touch .dockerignore

Tiếp theo, bạn sẽ chỉ định các lệnh xây dựng trong Dockerfile để chứa các ứng dụng của mình.

Xác định các lệnh trong Dockerfile

Ubuntu chạy như một container docker

Dockerfiles có thể tùy chỉnh dựa trên thông số kỹ thuật của dự án của bạn. Bạn sẽ xác định các lệnh để xây dựng hình ảnh cơ sở để xây dựng ứng dụng.

Đây là một ví dụ về nội dung của Dockerfile xây dựng máy chủ web ở trên:

 
FROM golang:latest


WORKDIR /app


COPY . .


RUN go mod download


RUN go build -o app


ENTRYPOINT ["./app"]

Dockerfile sử dụng golang: mới nhất hình ảnh cơ sở, để xây dựng ứng dụng sau khi đặt thư mục làm việc thành /ứng dụng.

Dockerfile sao chép các tệp bằng SAO CHÉP lệnh và tải xuống các phụ thuộc với CHẠY yêu cầu.

Tệp chỉ định thao tác xây dựng và chạy với CHẠY lệnh, sau đó đặt lệnh để chạy khi vùng chứa bắt đầu bằng lệnh cmd yêu cầu.

Lưu Dockerfile trong cùng thư mục với của bạn go.modchính.go các tập tin; sau đó chạy lệnh này để tạo hình ảnh Docker từ Dockerfile này:

 docker build -t GolangTutorial .

Lệnh trên sẽ tạo một hình ảnh Docker với thẻ golangtutorial. Bạn có thể chạy một container bằng lệnh này:

 docker run -p 8080:8080 golangtutorial

Lệnh ánh xạ cổng 8080 từ vùng chứa sang cổng 8080 trên máy chủ cục bộ của máy chủ. Bạn có thể yêu cầu máy chủ đang chạy trong bộ chứa Docker từ máy chủ.

Đây là kết quả từ việc gửi yêu cầu CURL đến máy chủ, lần này chạy trên Docker:

Kết quả từ việc thực hiện các yêu cầu tới bộ chứa Docker

Bạn có thể sử dụng Docker Compose cho Container Orchestration

Docker Compose là một công cụ mà bạn có thể sử dụng để sắp xếp (làm việc với nhiều) bộ chứa Docker. Docker Compose cho phép bạn xác định một ứng dụng nhiều vùng chứa trong một tệp YAML. Bạn có thể chạy và quản lý toàn bộ ứng dụng bằng một lệnh duy nhất.

Bạn có thể sử dụng Docker Compose để triển khai và quản lý các ứng dụng được chứa trong vùng chứa phức tạp. Docker Compose đơn giản hóa việc quản lý bằng các triển khai tự động và nhất quán.

Similar Posts

Leave a Reply

Your email address will not be published. Required fields are marked *