使用go构建容器镜像开发http函数-j9九游会登录
使用容器镜像创建并执行http函数的完整操作步骤可参考使用容器镜像创建并执行http函数,本章节介绍如何使用go语言制作镜像,并进行本地验证。
步骤一:制作镜像
以在linux x86 64位系统上制作镜像为例(系统配置无要求)。
- 执行以下命令,创建一个空文件夹。
mkdir custom_container_http_example && cd custom_container_http_example
- 以golang语言为例,实现一个http server,处理函数初始化init请求和函数调用invoke请求并响应。
创建一个“server_demo.go”文件,引入gin依赖包,实现method为post和path为/index的函数执行入口,请根据具体业务修改。通过init函数进行初始化配置,golang会自动执行该函数。示例代码如下:
package main import ( "fmt" "net/http" "time" "github.com/gin-gonic/gin" // 导入 gin 框架 ) // 初始化函数,程序启动时会执行 func init() { fmt.println("init in main.go ") } // logger 是一个中间件函数,用于记录请求和响应的信息 func logger() gin.handlerfunc { return func(c *gin.context) { start := time.now() reqbody, _ := c.getrawdata() fmt.printf("[info] request: %s %s %s\n", c.request.method, c.request.requesturi, reqbody) c.next() end := time.now() latency := end.sub(start) respbody := string(rune(c.writer.size())) fmt.printf("[info] response: %s %s %s (%v)\n", c.request.method, c.request.requesturi, respbody, latency) } } // index 是一个处理函数,处理 post /index 路由的请求 func index(c *gin.context) { println("hello world") c.string(http.statusok, "*** hello world ***") return } func main() { router := gin.default() // 创建一个默认的 gin 路由器 router.use(logger()) // 使用 logger 中间件 router.post("/index", index) // 注册一个处理http post请求的路由,路径为/index,当客户端发送一个post请求到/index路径时,gin框架会调用index函数来处理这个请求。 err := router.run(":8000") // 启动 http 服务器,监听 8000 端口 if err != nil { return } } - 执行以下命令进行编译,生成server_demo二进制文件。
go build server_demo.go
- 创建dockerfile文件,使用编译后的文件名替换dockerfile中的server_demo。文件内容如下:
from ubuntu:22.04 env home=/home/paas env group_id=1003 env group_name=paas_user env user_id=1003 env user_name=paas_user run mkdir -m 550 ${home} && groupadd -g ${group_id} ${group_name} && useradd -u ${user_id} -g ${group_id} ${user_name} copy server_demo ${home} run chown -r ${user_id}:${group_id} ${home} run chmod -r 775 ${home} user ${user_name} workdir ${home} expose 8000 entrypoint ["./server_demo"]
表1 参数说明 参数
说明
from
指定基础镜像为ubuntu:22.04,基础镜像必须设置,值可修改。
env
设置环境变量,设置home环境变量为/home/custom_container,设置group_name和user_name为custom_container,user_id和group_id为1003,这些环境变量必须设置,值可修改。
run
执行命令,格式为run <命令>。例如run mkdir -m 550 ${home}表示构建容器时创建${user_name}用户的${home}目录。
copy
从构建上下文复制文件或目录到镜像中。将“server_demo.go”文件拷贝到容器的${user_name}用户的${home}目录下。
user
切换${user_name}用户。
workdir
切换工作目录到${user_name}用户的${home}目录下。
expose
声明容器运行时监听的端口。暴露容器的8000端口,请勿修改。
entrypoint
设置容器启动时运行的命令,使用./server_demo命令启动容器。
- 执行以下命令构建镜像。
docker build -t custom_container_http_example:latest .
指定镜像的名称为“custom_container_http_example”,版本为latest,“.”指定dockerfile所在目录,镜像构建命令将该路径下所有的内容打包给容器引擎帮助构建镜像。
步骤二:本地验证
- 执行以下命令启动docker容器。
docker run -u 1003:1003 -p 8000:8000 custom_container_http_example:latest
- 打开一个新的命令行窗口,向开放的8000端口发送消息,访问模板代码中指定的/invoke路径。
curl -xpost -h 'content-type: application/json' -d '{"message":"helloworld"}' localhost:8000/index将按照模块代码返回以下内容:
*** hello world ***
相关文档
意见反馈
文档内容是否对您有帮助?
如您有其它疑问,您也可以通过华为云社区问答频道来与我们联系探讨