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