1.首先编写dockerfile 文件
#使用基础的官方镜像 FROM golang:1.17-alpine As build #工作目录 WORKDIR /project/ #复制 COPY . /project #制作镜像的时候运行 设置 go代理, 设置go mod 模式 RUN go env -w GOPROXY=https://goproxy.io,direct RUN go env -w GO111MODULE=on #编译二进制文件 Go的runtime环境变量CGO_ENABLED=1,即默认开始cgo,允许你在Go代码中调用C代码 #CGO_ENABLED 如果标准库中是在CGO_ENABLED=1情况下编译的,那么编译出来的最终二进制文件可能是动态链接, # 所以建议设置 CGO_ENABLED=0以避免移植过程中出现的不必要问题。 # GOOS 编译目标平台上的操作系统(darwin, freebsd, linux, windows) # GOARCH 编译目标平台上的硬件体系架构(amd64, 386, arm, ppc64等) RUN CGO_ENABLED=1 GOOS=linux GOARCH=amd64 go build -o hello hello.go FROM alpine ENV TZ Asia/Shanghai COPY --from=build /project/hello /project/hello #定义工作目录为project WORKDIR /project #CMD ["./hello"] #声明镜像使用80端口 并不代表可以 直接访问此端口 EXPOSE 80 #容器启动命令 ENTRYPOINT ["./hello"]
2.编写hello.go文件
package main import ( "fmt" "net/http" ) func Hello(w http.ResponseWriter, r *http.Request) { fmt.Println("handle hello") //服务端打印输出 fmt.Fprintf(w, "hello GoLandWEB") } func login(w http.ResponseWriter, r *http.Request) { fmt.Println("handle login") fmt.Fprintf(w, "login ...") } func main() { http.HandleFunc("/", Hello) http.HandleFunc("/login", login) err := http.ListenAndServe("0.0.0.0:80", nil) if err != nil { fmt.Println("http listen failed") } }
3.执行docker build 命令
docker build -t hello:v2 .
4.查看镜像 docker images
5.启动容器
[root@k8s-master httpdemo]# docker run -p 80:80 hello:v2 handle hello handle hello
6.访问测试
[root@k8s-master zhangxueqing]# curl 127.0.0.1:80 hello GoLandWEB
标签:http,80,fmt,project,go,镜像,docker,hello From: https://www.cnblogs.com/zxqblogrecord/p/16928230.html