docker容器化golang应用

news/2025/1/16 0:54:01/

docker容器化golang应用

前言:为什么使用容器化技术?

相比于虚拟机容器化技术的优点:

  • 启动快
  • 硬盘使用量小
  • 性能好
  • 系统支持量大
  • 有利于开发环境和生产环境的协调

看看这个小demo的目录结构,非常简单,新建一个docker-go文件夹,然后再这个文件夹中新建一个Dockerfile文件和server.go

image-20221003170329772

1. 编写一个简单的go server 应用

package mainimport ("fmt""html""log""net/http"
)func main() {fmt.Println("launching server at port 9090")http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {fmt.Fprintf(w, "hello, %q", html.EscapeString(r.URL.Path))})log.Fatal(http.ListenAndServe(":9090", nil))}

如果我们的宿主机本身就有go环境的话,我们可以试试这个程序是否正确

go run server.go

浏览器地址中输入http://localhost:9090/docker-go,如果返回成功即说明程序没有问题

image-20221003170345130

2. 创建Dockerfile文件

FROM golang:latestRUN mkdir /appWORKDIR /appADD . /appRUN go build -o main ./server.goEXPOSE 9090CMD /app/main

Dockerfile文件的各行命令代码的作用:

  • FROM golang:latest 以golang的最新的镜像为基础镜像创建

  • RUN mkdir /app 在容器中创建一个app文件夹

  • WORKDIR /app 将这个app认为默认工作文件夹

  • ADD . /app 将当前目录的下的所有文件加入到这个app工作文件夹中

  • RUN go build -o main ./server.go 开始build server.go名称任意 (是你的go项目的程序入口)

  • EXPOSE 9090 向外面暴露9090端口

  • CMD /app/main 然后运行我们build的生成的可执行文件main.exe

插叙:

如果我们的宿主机环境中没有go语言支持,那么我们无法验证这个程序是否正确,可以首先在环境中安装自己的go语言工作环境,然后测试后进行镜像打包,如果创建镜像后运行的容器实例也没有问题,那么相当于两次测试,一次是在你的宿主机上的测试,一次是在容器中的测试。

3. 创建一个镜像

在宿主机的Dockfile文件所在的目录下, 运行命令

docker build . -t my-go-env1

my-go-env1为这个镜像的名称

build . 表示当前目录 即我们Dockerfile所在的文件夹

如果没有报错的话,我们可以使用以下命令来查看镜像是否创建成功

docker image ls

image-20221003170411373

4. 运行镜像创建容器

docker run -d  -p 9090:9090 --name go-demo1 my-go-env1
  • -d 表示后台运行

  • -p 表示端口映射 将本地的9090端口映射到容器的9090端口

  • go-demo 新建的容器的名称

  • my-go-env1 容器所使用的镜像的名称

查看当前有哪些容器在运行

docker container ls

image-20221003170802220

然后去本地浏览器测试一下是否9090可用(确保先关闭宿主机上之前的测试)

image-20221003170846628

至此,我们简单的容器化了我们的golang应用


http://www.ppmy.cn/news/284262.html

相关文章

go-zero:开箱即用的微服务框架

go-zero 是一个集成了各种工程实践的 Web 和 rpc 框架,它的弹性设计保障了大并发服务端的稳定性,并且已经经过了充分的实战检验。 go-zero 在设计时遵循了 “工具大于约定和文档” 的理念,所以 go-zero 包含极简的 API 定义和生成工具 goctl…

linux centos安装google chrome浏览器使用headless无头模式 制作docker镜像

chromedriver 驱动下载地址: https://npm.taobao.org/mirrors/chromedriver/ linux centos安装google chrome浏览器使用headless无头模式 用java开发爬虫,或者需要java操作控制浏览器来渲染页面,抓取页面元素,都需要在linux安装…

SpringBoot中的定时任务@Scheduled的使用

1.Scheduled注解介绍 在spring boot的项目中需要使用到定时任务的时候,可以使用Scheduled注解,这只是在一个JVM进程中很适用,如果涉及到服务器是集群的情况下,建议使用任务调度平台。这样任务调度平台会在多台服务器中选择一台进…

Kubernets配置存储

Kubernets配置存储 💽ConfigMap ConfigMap(cm):较为特殊的存储卷,用来存储配置信息。 创建configmap.yaml apiVersion: v1 kind: ConfigMap metadata:name: configmapnamespace: dev data:info: |username:rkun18password:1234…

Controller代码优化过程

前言:MVC架构下,我们的web工程结构会分为三层,自下而上是dao层,service层和controller层。controller层为控制层,主要处理外部请求,调用service层。 一般情况下,controller层不应该包含业务逻辑…

联想服务器装系统极慢,联想win10系统安装版重装后运行速度变慢了

最近网友重装了联想win10系统安装版,但是重装系统之后发现电脑运行速度变慢了。当电脑遭遇了一些问题的时候,很多人都会选择直接重装,一般来说当电脑重装之后电脑里面的垃圾和病毒会被彻底清理,从而速度上会有很大的提升&#xff…

联想服务器销售话术,经典的联想电脑销售话术实例

经典的联想电脑销售话术实例 经典的联想电脑销售话术实例 1.家用机和商用机在配制上差别不大,他们有什么本质区别吗? 答:就像汽车分商务型和家用型一样,电脑针对不同类型的客户也有区分,比如从软硬件设计来看&#xff…

联想微型计算机一体机b505,联想IdeaCentreB505一体机电脑外型不错,都说它配置很? 爱问知识人...

5500元 联想IdeaCentre B505-飚速型A 基本参数 产品类型家用一体电脑 操作系统DOS 处理器 CPU 系列AMD 速龙64四核 CPU 型号AMD 速龙 II X4 610e CPU频率2400MHz 总线4000MHz 二级缓存2MB 核心数四核心 制程工艺45nm 存储设备 内存容量4GB 内存类型DDR3 1066MHz 硬盘容量1TB 硬…