• Ukieweb

    佳的博客

    曾梦想仗剑天涯,后来工作忙没去。

Docker 部署Go的两种基础镜像 busybox不行

刚开始用 busybox,启动了,但是运行时有空指针的情况,最后发现是镜像的问题。

推荐下面两个镜像

一、 golang:latest 基础镜像

mkdir gotest
touch main.go
touch Dockerfile

1. 实例代码

package main
import (
        "fmt"
        "log"
        "net/http"
)
func main() {
        http.HandleFunc("/", func(writer http.ResponseWriter, request *http.Request) {
                fmt.Fprint(writer, "Hello World")
        })
        fmt.Println("3000!!")
        log.Fatal(http.ListenAndServe(":3000", nil))
}

2. Dockerfile配置

#源镜像
FROM golang:latest

#设置工作目录
WORKDIR $GOPATH/src/github.com/gotest

#将服务器的go工程代码加入到docker容器中
ADD . $GOPATH/src/github.com/gotest

#go构建可执行文件
RUN go build .

#暴露端口
EXPOSE 3000

#最终运行docker的命令
ENTRYPOINT  ["./gotest"]

3. 打包镜像

docker build -t gotest .

golang:latest 编译过程,其实就是在容器内,构建了一个go开发环境

这种源镜像打包大概800M左右,比较大。

二、 alpine:latest 基础镜像(enheng)

使用此镜像大概过程就是,在linux机器,先把go程序打包成二进制文件,再丢到apine环境,执行编译好的文件。

默认情况下,Go的runtime环境变量CGO_ENABLED=1,即默认开始cgo,允许你在Go代码中调用C代码。通过设置CGO_ENABLED=0就禁用CGO了。所以需要执行:CGO_ENABLED=0 go build .即可。

此基础镜像打包只有13M,特别小。

#源镜像
FROM alpine:latest

#设置工作目录
WORKDIR $GOPATH/src/github.com/common

#将服务器的go工程代码加入到docker容器中
ADD . $GOPATH/src/github.com/common

#暴露端口
EXPOSE 3002

#最终运行docker的命令
ENTRYPOINT  ["./common"]

打包镜像

docker build -t common .





0
0
下一篇:docker容器内网络请求缓慢问题解决 更改dns

0 条评论

老佳啊

85后,大专学历,中原人士,家里没矿。

由于年轻时长的比较帅气,导致在别人眼里,我一直不谈恋爱的原因是清高,实则是自己的小自卑。最大的人生目标就是找一个相知相爱相容的人,共度余生。

和人相处时如果能感受到真诚,会非常注重彼此的关系,对别人没有什么心机,即使有利益冲突,一般也会以和为贵,因为在这个世界上,物质的东西,从来不会吸引到我。

特别迷恋那些大山大水,如果现在还能隐居,可能早就去了。对那些宏伟的有底蕴的人文景观比较不感冒。

从事于IT行业,却一直对厨房念念不忘,由于身材魁梧,总觉得自己上辈子是个将军,可惜这辈子没当兵,也不会打架。