Skip to content

NimTechnology

Trình bày các công nghệ CLOUD một cách dễ hiểu.

  • Kubernetes & Container
    • Docker
    • Kubernetes
      • Ingress
      • Pod
    • Helm Chart
    • OAuth2 Proxy
    • Isito-EnvoyFilter
    • Apache Kafka
      • Kafka
      • Kafka Connect
      • Lenses
    • Vault
    • Longhorn – Storage
    • VictoriaMetrics
    • MetalLB
    • Kong Gateway
  • CI/CD
    • ArgoCD
    • ArgoWorkflows
    • Argo Events
    • Spinnaker
    • Jenkins
    • Harbor
    • TeamCity
    • Git
      • Bitbucket
  • Coding
    • DevSecOps
    • Terraform
      • GCP – Google Cloud
      • AWS – Amazon Web Service
      • Azure Cloud
    • Golang
    • Laravel
    • Python
    • Jquery & JavaScript
    • Selenium
  • Log, Monitor & Tracing
    • DataDog
    • Prometheus
    • Grafana
    • ELK
      • Kibana
      • Logstash
  • BareMetal
    • NextCloud
  • Toggle search form

[Golang/Container] Build docker/container Golang

Posted on January 28, 2022February 11, 2023 By nim No Comments on [Golang/Container] Build docker/container Golang

Làm sao để tụi build docker với golang nhỉ?
sau đây mình có code 1 project GRPC demo và mình thử build docker sem sao?

Ở đây chúng ta có 1 file server và chứa hàm main()

Contents

Toggle
  • First way! No change version repo in go.mod
  • Second way! Don’t care about version of repo
  • Build golang window image

First way! No change version repo in go.mod

thường golang có go.mod thì nó lưu version repo ở đó! Nên là khi bạn build docker bạn cũng muốn giữ nguyên các version đó

Vậy file Dockerfile của chúng ta như sau:

FROM golang:1.17.6-alpine

RUN apk update && apk add git

ENV CGO_ENABLED=0
ENV GO111MODULE=on

ENV GOPATH /go
ENV PATH $GOPATH/bin:/usr/local/go/bin:$PATH

RUN mkdir -p "$GOPATH/src" "$GOPATH/bin" && chmod -R 777 "$GOPATH"
WORKDIR $GOPATH/src/calculator

COPY . .

RUN go mod download
WORKDIR server
RUN GOOS=linux go build -o app
ENTRYPOINT ["./app"]

EXPOSE 50069

Second way! Don’t care about version of repo

Lúc này bạn sẽ muốn là build thì cứ pull repo mới sem sao?

Chúng ta sẽ cần file .dockerignore cùng cấp với Dockerfile nhé
Mục đích của file .dockerignore là khi thực hiện lệnh COPY. Docker sẽ không copy các file đã được khai báo trong .dockerignore

Dockerfile
go.mod
go.sum

Nếu bạn ko có file .dockerignore thì sao?

khi nó sẽ báo lỗi này "go.mod already exists"

Giờ file Dockerfile sẽ khác síu

FROM golang:1.17.6-alpine

RUN apk update && apk add git

ENV CGO_ENABLED=0
ENV GO111MODULE=on

ENV GOPATH /go
ENV PATH $GOPATH/bin:/usr/local/go/bin:$PATH

RUN mkdir -p "$GOPATH/src" "$GOPATH/bin" && chmod -R 777 "$GOPATH"
WORKDIR $GOPATH/src/calculator

COPY . .

RUN go mod init calculator
WORKDIR server
RUN GOOS=linux go build -o app
ENTRYPOINT ["./app"]

EXPOSE 50069
Đây là điểm khác nhau của 2 file.
Có 1 lưu ý.
chỗ này mình để tên giống với folder code của mình luôn nhé

Đương nhiên các của mình là các trên của mình chưa thật sự vip nhưng nên bạn mới làm quen build docker golang có thể tham khảo.

Build golang window image

Bạn có thể tham khảo link này.

https://www.phillipsj.net/posts/building-windows-and-linux-containers-with-github-actions/

FROM winamd64/golang:1.20

WORKDIR /usr/src/cyclops

# pre-copy/cache go.mod for pre-downloading dependencies and only redownloading them in subsequent builds if they change
COPY go.mod go.sum ./
RUN go mod download
RUN go mod verify
COPY . .
RUN go build -v -o app .

CMD ["./app"]
Coding, Docker, Golang

Post navigation

Previous Post: [Node exporter] Install node_exporter on Linux by a script file!
Next Post: [Kafka-Zookeeper] Starting Kafka and Zookeeper

More Related Articles

[JetBrains] JetBrains Students! Chỉ có 80 ngàn/ 1 năm Coding
[MongoDB] Install and config MongoDB is so easy on Docker. Docker
[RabbitMQ] Installing RabbitMQ by Docker and Run RabbitMQ commands Docker
[iframe/Grafana]Hướng dẫn nhúng iframe grafana đẹp xoá left menu Coding
[Golang] In-Memory Cache or Local Cache with Golang. Golang
[Helm/Golang] Install Helm chart on Kubernetes using Go. Golang

Leave a Reply Cancel reply

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

Tham Gia Group DevOps nhé!
Để Nim có nhiều động lực ra nhiều bài viết.
Để nhận được những thông báo mới nhất.

Recent Posts

  • [Laravel] Laravel Helpful June 26, 2025
  • [VScode] Hướng dẫn điều chỉnh font cho terminal June 20, 2025
  • [WordPress] Hướng dấn gửi mail trên WordPress thông qua gmail. June 15, 2025
  • [Bitbucket] Git Clone/Pull/Push with Bitbucket through API Token. June 12, 2025
  • [Teamcity] How to transfer the value from pipeline A to pipeline B June 9, 2025

Archives

  • June 2025
  • May 2025
  • April 2025
  • March 2025
  • February 2025
  • January 2025
  • December 2024
  • November 2024
  • October 2024
  • September 2024
  • August 2024
  • July 2024
  • June 2024
  • May 2024
  • April 2024
  • March 2024
  • February 2024
  • January 2024
  • December 2023
  • November 2023
  • October 2023
  • September 2023
  • August 2023
  • July 2023
  • June 2023
  • May 2023
  • April 2023
  • March 2023
  • February 2023
  • January 2023
  • December 2022
  • November 2022
  • October 2022
  • September 2022
  • August 2022
  • July 2022
  • June 2022
  • May 2022
  • April 2022
  • March 2022
  • February 2022
  • January 2022
  • December 2021
  • November 2021
  • October 2021
  • September 2021
  • August 2021
  • July 2021
  • June 2021

Categories

  • BareMetal
    • NextCloud
  • CI/CD
    • Argo Events
    • ArgoCD
    • ArgoWorkflows
    • Git
      • Bitbucket
    • Harbor
    • Jenkins
    • Spinnaker
    • TeamCity
  • Coding
    • DevSecOps
    • Golang
    • Jquery & JavaScript
    • Laravel
    • NextJS 14 & ReactJS & Type Script
    • Python
    • Selenium
    • Terraform
      • AWS – Amazon Web Service
      • Azure Cloud
      • GCP – Google Cloud
  • Kubernetes & Container
    • Apache Kafka
      • Kafka
      • Kafka Connect
      • Lenses
    • Docker
    • Helm Chart
    • Isito-EnvoyFilter
    • Kong Gateway
    • Kubernetes
      • Ingress
      • Pod
    • Longhorn – Storage
    • MetalLB
    • OAuth2 Proxy
    • Vault
    • VictoriaMetrics
  • Log, Monitor & Tracing
    • DataDog
    • ELK
      • Kibana
      • Logstash
    • Fluent
    • Grafana
    • Prometheus
  • Uncategorized
  • Admin

Copyright © 2025 NimTechnology.