Golang - 使用docker部署专案

之前就有做过这件事情
当时搞定了之後想说,简单吗~~~就是搞个Dockerfile而已
结果好一阵子没用就给他忘了,然後卡很久还7pupu= =
最近会继续用的原因是在学Kuberbetes,体会到了容器部署的强大之处

Source code

https://github.com/whitefloor/building_golang_with_docker_exercise

Golang code

就是个api sample连进去会有反应,有用go mod

package main

import (
	"log"

	"github.com/gin-gonic/gin"
)

func main() {
	r := gin.Default()
	r.GET("/ping", func(c *gin.Context) {
		log.Println(("hello user"))
		c.JSON(200, gin.H{
			"message": "pong",
		})
	})
	r.Run() // listen and serve on 0.0.0.0:8080 (for windows "localhost:8080")
}

Dockerfile

# 小坑:记得做docker image的时候一定要命名成"Dockerfile"不然会发生错误
FROM golang:1.18
# 有设定WORKDIR就不需要mkdir,会自己创资料夹
WORKDIR /app
# COPY ./src ./dest
COPY . .
# RUN 用多个RUN去写的话,会产生新的image,因此最好是使用一次RUN,然後换行处理
# go build的时候中过一招卡很久,没有指定-o输出档名的话,会使用资料夹预设的名称当做app name,然後ENTRYPOINT怎样都找不到
RUN go mod tidy && \
    go build -o myGolangApp
# ENTRYPOINT docker执行的进入点,预设工作目录是/app,所以才可以用相对路径直接找到myGolangApp进入
ENTRYPOINT ./myGolangApp

Build docker image and run

docker bulid . -t golang_app_image
docker run --rm -p 8080:8080 -d golang_app_image

Testing

用postman或浏览器连线到

http://localhost:8080/ping

会看到response,docker用dashboard看log也会有结果

参考资源


<<:  [VSCodeVim] Vim的思维、哲学与解决问题之道 (二)

>>:  [VSCodeVim] 官方文件没有详述的实用技巧:以virtualedit所解决的情境为例

DAY 5 Big Data 5Vs – Volume(容量) - RedShift

相较於资料湖,另一个更常见的大数据储存系统是 — 资料仓储。和资料湖一样,资料仓储也用来储存巨量资料...

Day27-移动侦测1

在开始编写程序之前,让我们先汇入必要的函式库。 import cv2 import numpy as...

Day1-网路与K8s的奇怪漂流

小弟大概五年工作经验从修PC玩玩LinkIt开始,模仿过Boss Sensor与Agoda的推荐算法...

Day 3 - 原型 (2) : 主页元件

设置 先在Figma中建立2个页面(Page), 名字分别为Blog跟Components(元件)。...

[Day03]程序菜鸟自学C++资料结构演算法 – 常见的线性串列其一:阵列Array List

前言:先来谈谈线串列表示甚麽,线性串列就是一种a[0],a[1],a[2]…,a[n]所组成的有限序...