写在前面,由于docker学了好久没有用,忘得差不多了,发布花了两天多,主要的坑是使用了golang:1.16-alpine
这个镜像,单独使用dockerfile打包没有问题;使用多阶段打包,会报错找不到文件或者路径
- 解决方式1: alpine上应该使用网络编译go,需要增加 -tags netgo。
GOOS=linux GOARCH=amd64 go build -tags netgo -o rollingupdate${TAG} main.go
- 解决方式2: 使用
golang:1.16
镜像,去掉alpine
我的golang项目目录
捕获.PNG
1.创建 Dockersfile
文件,用来编译项目,打包
##
## Build
##
FROM golang:1.16 AS build
WORKDIR /app
RUN go env -w GOPROXY=https://goproxy.cn,direct
COPY . .
RUN go mod download
RUN GOOS=linux CGO_ENABLED=1 GOARCH=amd64 go build -o /gin-admin
##
## Deploy
##
FROM fssq/distroless_base-debian10
# FROM scratch
WORKDIR /
# 复制编译后的程序
COPY --from=build /gin-admin /gin-admin
# 复制配置文件
COPY configs /configs
EXPOSE 8080
ENTRYPOINT ["/gin-admin"]
- 1.1分为两个阶段
Build
和Deploy
;
- 1.2引入cgo ,需要
CGO_ENABLED=1
;
2.创建docker-compose.yml
将多个关联引用整合在一起,主要用到数据库
和redis
version: "3.7"
services:
app:
build: .
ports:
- "8080:8080"
links:
- postgres
- redis
postgres:
image: "postgres:alpine"
environment:
POSTGRES_DB: "gin-admin"
POSTGRES_PASSWORD: 123456
volumes:
- pgdata:/var/lib/postgresql/data
redis:
image: "redis:alpine"
volumes:
- rddata:/data
volumes:
pgdata:
rddata:
- 2.1 app 是自己的应用 ,build 会执行
Dockersfile
- 2.2 postgres sql数据库
- 2.3 redis
- 2.4 访问同一容器其他服务网络,可以使用
networks
和 links
将三个应用整合成一个服务,后续直接部署
3. 打包镜像
3.1 打包并运行
docker-compose up -d
3.2 只打包
docker-compose build
-
网友评论