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?
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?
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
Đươ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"]