gin web框架docker多阶段构建实战

简介: 自从知道有多阶段构建以后,就实战了一把,顺便记录下来,供参考

准备项目

初始化一个项目

# mkdir demobuild
# cd demobuild/
# go mod init gindemo
go: creating new go.mod: module gindemo


编写代码gindemo.go

packagemainimport"github.com/gin-gonic/gin"funcmain() {
r :=gin.Default()
r.GET("/ping", func(c*gin.Context) {
c.JSON(200, gin.H{
"message": "pong",
        })
    })
r.Run("0.0.0.0:9091") // listen and serve on 0.0.0.0:8080}

尝试运行

没运行成功,提示需要安装gin

#gorungindemo.gogindemo.go:3:8: norequiredmoduleprovidespackagegithub.com/gin-gonic/gin; toaddit:
gogetgithub.com/gin-gonic/gin


安装依赖

#gogetgithub.com/gin-gonic/gingoget: addedgithub.com/gin-gonic/ginv1.7.4

再次运行

#gorungindemo.go[GIN-debug] [WARNING] CreatinganEngineinstancewiththeLoggerandRecoverymiddlewarealreadyattached.[GIN-debug] [WARNING] Runningin"debug"mode.Switchto"release"modeinproduction.-usingenv:   exportGIN_MODE=release-usingcode:  gin.SetMode(gin.ReleaseMode)
[GIN-debug] GET/ping-->main.main.func1 (3handlers)
[GIN-debug] ListeningandservingHTTPon0.0.0.0:9091

多阶段构建

编写Dockerfile

FROM golang:1.17 as build
WORKDIR /go/src/gindemo
COPY . .
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 GOPROXY=https://goproxy.cn,direct go build -ldflags="-w-s" -o gindemo .
FROM ubuntu:18.04
WORKDIR /usr/local/demo
COPY --from=build /go/src/gindemo/gindemo .
EXPOSE9091CMD ["./gindemo"]

查看目录结构

# tree.
|-- Dockerfile
|-- gindemo.go
|-- go.mod
`-- go.sum0 directories, 4 files

执行构建镜像

如果没有多阶段构建,你的操作可能如下:

  1. 在本地把go程序编译好,再通过docker的方式拷贝到容器镜像中,那么本地环境是存在差异的
  2. 在容器镜像中,先是安装go环境,然后配置go可执行文件环境变量,最后编译,强耦合在一起了
# docker build . -t morebuild:test

检测镜像是否构建成功

# docker images|grep morebuildmorebuild                                              test      4a0218330261   25 seconds ago      69.5MB

项目运行

运行容器

docker run -it-d-p9091:9091 morebuild:test

查看容器内部

45f54为容器运行部分ID

# docker exec -it 45f54 bashroot@45f541ce524f:/usr/local/demo# pwd/usr/local/demo
root@45f541ce524f:/usr/local/demo# lsgindemo
root@45f541ce524f:/usr/local/demo# ps -efUID        PID  PPID  C STIME TTY          TIME CMD
root         10006:13 pts/0    00:00:00 ./gindemo
root        110006:13 pts/1    00:00:00 bashroot        2311006:13 pts/1    00:00:00 ps-ef

curl访问

curl http://127.0.0.1:9091/ping

查看容器日志

# docker logs -f 45f54[GIN-debug] [WARNING] Creating an Engine instance with the Logger and Recovery middleware already attached.
[GIN-debug] [WARNING] Running in"debug" mode. Switch to "release" mode in production.
- using env: exportGIN_MODE=release
- using code:  gin.SetMode(gin.ReleaseMode)
[GIN-debug] GET    /ping                     --> main.main.func1 (3 handlers)
[GIN-debug] Listening and serving HTTP on 0.0.0.0:9091
[GIN] 2021/10/29 -06:23:43 | 200 |      58.471µs |      172.17.0.1 | GET      "/ping"


至此已经演示完毕了

相关文章
|
16天前
|
编解码 前端开发 JavaScript
构建高效响应式Web界面:现代前端框架的比较
【4月更文挑战第9天】在移动设备和多样屏幕尺寸盛行的时代,构建能够适应不同视口的响应式Web界面变得至关重要。本文深入探讨了几种流行的前端框架——Bootstrap、Foundation和Tailwind CSS,分析它们在创建响应式设计中的优势与局限。通过对比这些框架的栅格系统、组件库和定制化能力,开发者可以更好地理解如何选择合适的工具来优化前端开发流程,并最终实现高性能、跨平台兼容的用户界面。
|
17天前
|
前端开发 JavaScript 关系型数据库
从前端到后端:构建现代化Web应用的技术探索
在当今互联网时代,Web应用的开发已成为了各行各业不可或缺的一部分。从前端到后端,这篇文章将带你深入探索如何构建现代化的Web应用。我们将介绍多种技术,包括前端开发、后端开发以及各种编程语言(如Java、Python、C、PHP、Go)和数据库,帮助你了解如何利用这些技术构建出高效、安全和可扩展的Web应用。
|
1月前
|
存储 运维 安全
构建高效自动化运维体系:Ansible与Docker的完美结合
【2月更文挑战第31天】 随着云计算和微服务架构的兴起,自动化运维成为保障系统稳定性和提升部署效率的关键手段。本文将详细探讨如何通过Ansible和Docker的结合来构建一个高效、可靠且易于管理的自动化运维体系。首先,介绍自动化运维的必要性及其在现代IT基础设施中的作用;然后,分别阐述Ansible和Docker的技术特点及优势;最后,提供一个基于Ansible和Docker结合使用的实践案例,以及实施过程中遇到的挑战和解决方案。
|
17天前
|
安全 数据库 C++
Python Web框架比较:Django vs Flask vs Pyramid
【4月更文挑战第9天】本文对比了Python三大Web框架Django、Flask和Pyramid。Django功能全面,适合快速开发,但学习曲线较陡;Flask轻量灵活,易于入门,但默认配置简单,需自行添加功能;Pyramid兼顾灵活性和可扩展性,适合不同规模项目,但社区及资源相对较少。选择框架应考虑项目需求和开发者偏好。
|
1月前
|
前端开发 应用服务中间件 nginx
使用Docker快速搭建Web服务器Nginx
本文指导如何使用Docker快速搭建Nginx服务器。首先,通过`docker pull`命令获取Nginx镜像,然后以容器形式运行Nginx并映射端口。通过挂载目录实现本地文件与容器共享,便于自定义网页。使用`docker ps`检查运行状态,访问IP:8088确认部署成功。最后,介绍了停止、删除Nginx容器的命令,强调Docker简化了服务器部署和管理。
50 0
|
22小时前
|
存储 中间件 Go
探索Gin框架:快速构建高性能的Golang Web应用
探索Gin框架:快速构建高性能的Golang Web应用
|
2天前
|
测试技术 Linux Docker
【好玩的经典游戏】Docker部署FC-web游戏模拟器
【好玩的经典游戏】Docker部署FC-web游戏模拟器
19 1
|
2天前
|
开发框架 前端开发 数据库
Python从入门到精通:3.3.2 深入学习Python库和框架:Web开发框架的探索与实践
Python从入门到精通:3.3.2 深入学习Python库和框架:Web开发框架的探索与实践
|
7天前
|
存储 运维 监控
构建高效稳定的Docker容器监控体系
【4月更文挑战第18天】 在现代微服务架构中,Docker容器已成为部署和运行应用的标准环境。随之而来的挑战是如何有效监控这些容器的性能与健康状况,确保系统的稳定性和可靠性。本文将探讨构建一个高效稳定的Docker容器监控体系的关键技术和方法,包括日志管理、性能指标收集以及异常检测机制,旨在为运维人员提供实用的指导和建议。
13 0
|
11天前
|
数据库 开发者 Python
Python中使用Flask构建简单Web应用的例子
【4月更文挑战第15天】Flask是一个轻量级的Python Web框架,它允许开发者快速搭建Web应用,同时保持代码的简洁和清晰。下面,我们将通过一个简单的例子来展示如何在Python中使用Flask创建一个基本的Web应用。