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
    • Helm Chart
    • Isito-EnvoyFilter
    • Apache Kafka
      • Kafka
      • Kafka Connect
      • Lenses
    • Vault
    • Longhorn – Storage
    • VictoriaMetrics
  • CI/CD
    • ArgoCD
    • ArgoWorkflows
    • Spinnaker
    • Jenkins
    • Harbor
    • TeamCity
    • Git
      • Bitbucket
  • Coding
    • Terraform
      • GCP – Google Cloud
      • AWS – Amazon Web Service
    • Golang
    • Laravel
    • Python
    • Jquery & JavaScript
    • Selenium
  • Log & Monitor
    • Prometheus
    • Grafana
    • ELK
      • Kibana
      • Logstash
  • BareMetal
  • Toggle search form

[Golang/Container] Build docker/container Golang

Posted on January 28, 2022December 20, 2022 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

  • First way! No change version repo in go.mod
  • Second way! Don’t care about version of repo

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.

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

[RabbitMQ] Installing RabbitMQ by Docker and Run RabbitMQ commands Docker
[GRPC] BloomRPC aims to provide the simplest and most efficient developer Coding
[Golang] Lưu log trên server với golang Golang
[Ajax/PHP] Cách để PHP trả Json Data về cho Ajax Coding
[web] 1 vài web vui vọc vạch. Coding
[DevSecOps] Application Security Testing Tools Coding

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

  • [Smartctl] Instruction check the health disk of Raspberry. January 16, 2023
  • [kubectl/Argocd] How to create a kubectl config file for serviceaccount or from the cluster secret of Argocd January 12, 2023
  • [Helm/Github] Create a public Helm chart repository with GitHub Pages January 8, 2023
  • [AWS] How to increase the disk size of a Windows EC2 machine? January 4, 2023
  • [Redis] ElastiCache-Redis Cross-Region Replication|Global DataStore January 3, 2023

Archives

  • 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
  • CI/CD
    • ArgoCD
    • ArgoWorkflows
    • Git
      • Bitbucket
    • Harbor
    • Jenkins
    • Spinnaker
    • TeamCity
  • Coding
    • Golang
    • Jquery & JavaScript
    • Laravel
    • Python
    • Selenium
    • Terraform
      • AWS – Amazon Web Service
      • GCP – Google Cloud
  • Kubernetes & Container
    • Apache Kafka
      • Kafka
      • Kafka Connect
      • Lenses
    • Docker
    • Helm Chart
    • Isito-EnvoyFilter
    • Kubernetes
      • Ingress
    • Longhorn – Storage
    • Vault
    • VictoriaMetrics
  • Log & Monitor
    • ELK
      • Kibana
      • Logstash
    • Grafana
    • Prometheus
  • Uncategorized
  • Admin

Copyright © 2023 NimTechnology.