使用alpine镜像部署go应用时踩的坑
关于交叉编译
实际上我在ubuntu的交叉编译出来的exe并不能在alpine上运行,这边采取拉镜像编译复制出来的做法,部署再用干净的alpine
拉取golang:alpine踩坑
在Dockerhub上可以找到:
然而拉取的alpine中go版本为1.17,对于go 1.18(即使用了泛型)后的go应用就不适用了
于是我试图拉取
然而拉取失败,在拉取时卡死,我自己去看了下github的Dockerfile
实际上可能是因为阿里云镜像只拉取了alpine:latest,把github找到的镜像Dockerfile的第一行的
FROM alpine:3.19
这个改成
FROM alpine
这样就能拉取了,把这个编译好的镜像推送到自己的Dockerhub就行了
在我的场合
docker push realconsider/golang:1.21-alpine
我在alpine中编译时一直报错:
后来发现:
是因为代码中有这么一句
import "C"
把这句删掉就能编译了
在makefile中集成(编译cmd/main.go) :
简单看下脚本
#!/bin/bash
docker kill alpine3golangbulding
docker rm alpine3golangbulding
export GOPROXY=https://goproxy.cn
docker run -d -it --name alpine3golangbulding -v "$(pwd)":/app -w /app --env GOPROXY=${GOPROXY} realconsider/golang:1.21-alpine
docker exec -w /app/cmd alpine3golangbulding go build -o main main.go
docker cp alpine3golangbulding:/app/cmd/main ./main
makefile参考
export USAGE_OPTIONS
# ==============================================================================
.PHONY: help
help: Makefile
@printf "\nUsage: make <TARGETS> <OPTIONS> ...\n\nTargets:\n"
@sed -n 's/^##//p' $< | column -t -s ':' | sed -e 's/^/ /'
@echo "$$USAGE_OPTIONS"
# Add a new target for build using compile.sh
.PHONY: build
build:
@echo "===========> Building executable main"
@./scripts/compile.sh
.PHONY: build-alpine
build-alpine:
@echo "===========> Building executable main with docker/golang-alpine"
@./scripts/complie-alpine.sh