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
  • Coding
    • Terraform
      • GCP – Google Cloud
      • AWS – Amazon Web Service
    • Golang
    • Laravel
    • Jquery & JavaScript
    • Git
    • Selenium
  • Log & Monitor
    • Prometheus
    • Grafana
    • ELK
      • Kibana
      • Logstash
  • BareMetal
  • Toggle search form

[Golang/Container] Build docker/container Golang

Posted on January 28, 2022February 13, 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

[Harbor] Install Private Docker Hub on Ubuntu Docker
Đo kích thước browser của bạn là bao nhiêu! Coding
[JS] Lấy value hoặc text của option đã được chọn trong thẻ select bằng jquery hay javascript Coding
[Code] Visual Studio Code SFTP Extension Coding
[Golang/string] Remove or Delete a few words or characters in a string through Golang. Golang
[SQL] what are DDL, DML, DCL in SQL? 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

  • Protected: My Assignment  June 24, 2022
  • [Spinnaker] Spinnaker writes too many logs – Reduce spinnaker log level June 22, 2022
  • [Jenkins] Jobs will be created automatically by Jenkins Job Builder June 20, 2022
  • [Postgresql] Install postgresql client and trying a few command postgresql. June 20, 2022
  • [Mount/Nextcloud] How do you mount a hard disk that was used windows into Linux. June 19, 2022

Archives

  • 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
    • Jenkins
    • Spinnaker
  • Coding
    • Git
    • Golang
    • Jquery & JavaScript
    • Laravel
    • 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 © 2022 NimTechnology.