我們大家常說的container,其實就是一個實踐微服務架構的方法。藉由container,你就可以專心開發服務,不必擔心依附元件。
為了實作container,我們在這邊使用 Docker。Docker應用容器技術(container),並將應用程式轉為container。你可以想像他是一個自己世界的盒子,你可以把自己寫的服務放進這個盒子。帶著這個盒子,你在你同學的電腦、學校電腦,只要有docker都可以直接運行,不用煩惱環境問題。
Docker有三個重要概念
image(映像檔)
image就是這個盒子的藍圖,這盒子裡面的世界長怎樣(環境)、可以跟誰溝通(port)都會變成image。而要把專案放進盒子,我們就需要一個定義的檔案,也叫做Dockerfile。
container(容器)
container就是將image實例化後的真正在跑的服務。
Repository(倉庫)
你可以將盒子的藍圖放在倉庫,如果倉庫對誰公開,誰就可以拿到這個盒子。
首先我們先依照裝置安裝docker
在 terminal
確認docker
版本有出來
$ docker -v
Docker version 20.10.17, build 100c70180f
接下來我們要使用Dockerfile
來定義我們的image要長怎樣。
// Dockerfile
# Dockerfile References: https://docs.docker.com/engine/reference/builder/
# Start from the latest golang base image
FROM golang:1.18 as builder
# Set the Current Working Directory inside the container
WORKDIR /app
# Copy go mod and sum files
COPY go.mod go.sum ./
# Download all dependencies. Dependencies will be cached if the go.mod and go.sum files are not changed
RUN go mod download
# Copy the source from the current directory to the Working Directory inside the container
COPY . .
# Build the Go app
RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o main .
######## Start a new stage from scratch #######
FROM alpine:latest
RUN apk --no-cache add ca-certificates
WORKDIR /root/
# Copy the Pre-built binary file from the previous stage
COPY --from=builder /app/main .
# Expose port 8080 to the outside world
EXPOSE 8090
RUN chmod +x ./main
# Command to run the executable
CMD ["./main"]
這邊我們來分步說明一下,因為要運行程式,還是需要環境,所以我們從官方引用 Golang:1.18
FROM golang:1.18 as builder
再來,我們把昨天的程式碼運行下列指令,讓他成為image。
docker build -t ooii8929/youtube-go --platform linux/amd64 .
你可以使用 docker image ls 查看
docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
ooii8929/youtube-go latest 82cd8856eeb9 2 weeks ago 1.01GB