Mengkontainerisasi Aplikasi Go Dengan Docker

Docker adalah teknologi containerisasi paling populer karena kesederhanaan dan kemudahan penggunaannya. Docker mengurangi tekanan masalah portabilitas dalam pengembangan dan distribusi perangkat lunak. Anda dapat menerapkan wadah buruh pelabuhan Anda ke sebagian besar penyedia layanan cloud.


Mengumpulkan aplikasi Go Anda dengan Docker dapat membantu Anda memastikan penerapan yang konsisten dan andal di berbagai lingkungan. Anda dapat menerapkan aplikasi Go ke berbagai lingkungan seperti pengembangan, pementasan, dan produksi. Kontainer Docker ringan dan memakan lebih sedikit ruang daripada mesin virtual tradisional. Ini dapat menghemat uang Anda untuk biaya hosting, dan juga dapat membuat penyebaran Anda lebih cepat.


Menyiapkan Server Web Sederhana di Go

Pustaka standar Go berisi paket-paket yang Anda perlukan untuk menyiapkan server web sederhana.

Pertama, impor file http, catatanDan json paket. Anda akan menggunakan paket http Go untuk menyiapkan server dan MENDAPATKAN meminta titik akhir. Itu catatan paket untuk mencatat kemungkinan kesalahan ke konsol Anda. Paket json untuk menyandikan struct ke JSON untuk titik akhir API.

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

Anda dapat menyandikan instance struct sebagai JSON ke klien sebagai respons berdasarkan validitas permintaan sebagai berikut:

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

Fungsi penangan akan mengembalikan pesan yang berhasil ke klien jika permintaan ke titik akhir adalah a MENDAPATKAN meminta.

 
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
        }
    }
}

Anda mengatur fungsi penangan di fungsi utama dengan rute sebagai /api/docker/go. Itu dockerTestEndpoint fungsi handler memvalidasi bahwa permintaan ke handler adalah permintaan GET. Jika itu permintaan GET, itu mengkodekan instantiated Pesan struct instance ke klien berdasarkan status permintaan.

Inilah cara Anda dapat memasang fungsi penangan pada rute dan mengatur server agar berjalan di port 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)
    }
}

Itu utama fungsi adalah titik masuk server, yang mendengarkan port 8080. Itu HandleFunc metode me-mount rute pada fungsi handler. Itu Dengarkan Dan Sajikan metode memulai server pada port host lokal yang ditentukan 8080.

Memulai Wadahisasi Aplikasi Go Anda Dengan Docker

Setelah menginstal dan menyiapkan Docker, Anda memerlukan file Docker bernama Dockerfile untuk membuat dan membuat image Docker untuk aplikasi Go Anda. Anda akan menentukan perintah untuk image dasar dan perintah untuk menyalin file, menambahkan direktori kerja, dan menjalankan aplikasi di Dockerfile.

Jalankan perintah ini di terminal ruang kerja Anda untuk membuat Dockerfile.

 touch Dockerfile

Anda akan menentukan perintah untuk membuat image Docker Anda di Dockerfile.

Jika ada file yang ingin Anda pisahkan dari gambar Docker Anda, Anda dapat menggunakan a .dockerignore mengajukan. Itu .dockerignore file bekerja persis seperti .gitignore file.

 touch .dockerignore

Selanjutnya, Anda akan menentukan perintah build di Dockerfile Anda untuk menampung aplikasi Anda.

Mendefinisikan Perintah di Dockerfile

ubuntu berjalan sebagai wadah buruh pelabuhan

Dockerfile dapat disesuaikan berdasarkan spesifikasi proyek Anda. Anda akan menentukan perintah untuk membangun image dasar untuk membangun aplikasi.

Berikut contoh isi Dockerfile yang membangun web server di atas:

 
FROM golang:latest


WORKDIR /app


COPY . .


RUN go mod download


RUN go build -o app


ENTRYPOINT ["./app"]

Dockerfile menggunakan golang: terbaru gambar dasar, untuk membangun aplikasi setelah menyetel direktori kerja /aplikasi.

Dockerfile menyalin file dengan MENYALIN perintah dan unduh dependensi dengan BERLARI memerintah.

File menentukan operasi build and run dengan BERLARI perintah, lalu setel perintah untuk dijalankan saat wadah dimulai dengan CMD memerintah.

Simpan Dockerfile di direktori yang sama dengan Anda go.mod Dan main.go file; kemudian jalankan perintah ini untuk membuat image Docker dari Dockerfile ini:

 docker build -t GolangTutorial .

Perintah di atas akan membuat gambar Docker dengan tag golangtutorial. Anda dapat menjalankan wadah dengan perintah ini:

 docker run -p 8080:8080 golangtutorial

Perintah memetakan port 8080 dari wadah ke port 8080 di localhost dari mesin host. Anda dapat meminta server berjalan di wadah Docker dari mesin host.

Inilah hasil dari mengirimkan permintaan CURL ke server, kali ini berjalan di Docker:

Hasil dari membuat permintaan ke wadah Docker

Anda Dapat Menggunakan Docker Compose untuk Orkestrasi Kontainer

Docker Compose adalah alat yang dapat Anda gunakan untuk mengatur (bekerja dengan banyak) kontainer Docker. Docker Compose memungkinkan Anda menentukan aplikasi multi-kontainer dalam satu file YAML. Anda dapat menjalankan dan mengelola seluruh aplikasi dengan satu perintah.

Anda dapat menggunakan Docker Compose untuk menerapkan dan mengelola aplikasi dalam container yang kompleks. Docker Compose menyederhanakan manajemen dengan penerapan otomatis dan konsisten.

Tags

Related Post