go语言进程容器部署
#说明:
#1、Dockerfile 中的 FROM scratch 是一个空镜像大小只有1M
# 这个库没有版本,也没有任何安全问题,最是好了。
# 由于go语言写的程序可以编译为不需要任何依赖的可执行二进制文件,所以可以用这个镜像
#2、go语言的编译语句:
#GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -o go-gin-hello-world main.go
#CGO_ENABLED=0 代表不依赖c语言的库
#准备工作
#准备好应用程序并且copy到host_dockerfile_path所在的目录
#在host宿主机上执行
#变量
#app
app_name="go-gin-hello-world"
image_name=${app_name}
container_name=${app_name}
#host
host_dockerfile_path="/docker-data/dockerfiles/${app_name}"
host_dockerfile_filename=${host_dockerfile_path}/Dockerfile
if [ ! -d $host_dockerfile_path ]; then
mkdir -p $host_dockerfile_path
fi
#创建Dockerfile
cat > $host_dockerfile_filename << eof
FROM scratch
# 复制静态编译的 Go 程序到镜像中
COPY ./$app_name /$app_name
# 容器启动时执行 Go 程序
CMD ["/${app_name}"]
eof
#生成映像,最后一个参数是设置命令执行的当前目录
docker build -t ${image_name} -f ${host_dockerfile_filename} ${host_dockerfile_path}
#运行容器
docker run -d \
-p 8080:8080 \
--name ${container_name} \
${image_name}
#测试
curl http://localhost:8080