最简单的Go Dockerfile编写姿势,没有之一!
1. Dockerfile一些额外注意点
-
选择最简单的镜像
比如alpine,整个镜像5M左右
-
设置镜像时区
RUN apk add --no-cache tzdata ENV TZ Asia/Shanghai
2. 多阶段构建
- 第一阶段构建否则构建出可执行文件,确保构建过程独立于宿主机
- 第二阶段将第一阶段的输出作为输入,构建出最终的极简镜像
3. 完整Dockerfile编写过程
-
首先安装
goctl
工具GO111MODULE=on GOPROXY=https://goproxy.cn/,direct go get -u github.com/tal-tech/go-zero/tools/goctl
-
在
greet
项目下创建一个hello
服务goctl api new hello
文件结构如下:
greet ├── go.mod ├── go.sum └── service └── hello ├── Dockerfile ├── etc │ └── hello-api.yaml ├── hello.api ├── hello.go └── internal ├── config │ └── config.go ├── handler │ ├── hellohandler.go │ └── routes.go ├── logic │ └── hellologic.go ├── svc │ └── servicecontext.go └── types └── types.go
-
在
hello
目录下一键生成Dockerfile
goctl docker -go greet.go
Dockerfile
内容如下:FROM golang:alpine AS builder LABEL stage=gobuilder ENV CGO_ENABLED 0 ENV GOOS linux ENV GOPROXY https://goproxy.cn,direct WORKDIR /build/zero ADD go.mod . ADD go.sum . RUN go mod download COPY . . COPY service/hello/etc /app/etc RUN go build -ldflags="-s -w" -o /app/hello service/hello/hello.go FROM alpine RUN apk update --no-cache && apk add --no-cache ca-certificates tzdata ENV TZ Asia/Shanghai WORKDIR /app COPY --from=builder /app/hello /app/hello COPY --from=builder /app/etc /app/etc CMD ["./hello", "-f", "etc/hello-api.yaml"]
-
在
greet
目录下build
镜像docker build -t hello:v1 -f service/hello/Dockerfile .
-
查看镜像
hello v1 5455f2eaea6b 7 minutes ago 18.1MB
可以看出镜像大小约为18M。
-
启动服务
docker run --rm -it -p 8888:8888 hello:v1
-
测试服务
$ curl -i http://localhost:8888/from/you HTTP/1.1 200 OK Content-Type: application/json Date: Thu, 10 Dec 2020 06:03:02 GMT Content-Length: 14 {"message":""}
4. 总结
goctl
工具极大简化了 Dockerfile
文件的编写,提供了开箱即用的最佳实践,并且支持了模板自定义。
5. 项目地址
https://github.com/tal-tech/go-zero
欢迎使用 go-zero 并 star 支持我们!
6. 微信交流群
关注『微服务实践』公众号并点击 进群 获取社区群二维码。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
100个HarmonyOS 2.0开发者Beta公测名额,限时认领!
5月初HarmonyOS 2.0开发者Beta开启了公测招募。社区的开发者们是否都提交了申请呢? 公测资格对于咱们的广大的开发者群体来说实在太有限,仍有不少人错过了这个优先体验HarmonyOS 2.0开发者Beta公测版的机会…… 为了答谢开发者对华为开发者社区的支持,特地为大家争取到了限量的公测资格。 100个名额!! 即时开启!! 【活动时间】 2021年5月19日22:00-5月28日12:00 【参与方式】 1. 完成注册、实名认证(操作步骤详见原帖子附件:华为开发者联盟用户注册、开发者实名认证流程.doc) 2. 在原帖子下方跟帖回复“已完成HarmonyOS开发者授权” 3. 留意每天公布的中奖名单,若收到华为开发者社区中奖站内信通知(个人中心-我的消息-公共消息),根据要求完成剩余步骤 【适配要求】 Beta公测适配设备,仅限于以下2个链接公布的机型: https://developer.huawei.com/consumer/cn/activity/301607581257578636 https://developer.huawei.com/consumer/cn/...
- 下一篇
Spring+Hibernate+Jersey整合
导入需要的jar包 项目结构 Spring配置 classpath:database.propertiescom.test.bean${hibernate.dialect}${hibernate.show_sql}${hibernate.format_sql} 数据库连接配置 jdbc.driverClassName=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8 jdbc.username=root jdbc.password=root jdbc.initialPoolSize=30 jdbc.minPoolSize=20 jdbc.maxPoolSize=100 jdbc.maxIdleTime=600 jdbc.maxStatements=200 jdbc.acquireIncrement=10 hibernate.dialect=org.hibernate.dialect.MySQLDialect hiberna...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- CentOS关闭SELinux安全模块
- CentOS7设置SWAP分区,小内存服务器的救世主
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题