Docker 生成 golang 程序镜像

这篇具有很好参考价值的文章主要介绍了Docker 生成 golang 程序镜像。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一. 准备golang程序

package main

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

func main() {
	go func() {
		r1 := gin.Default()
		r1.GET("/sayHello/", func(c *gin.Context) {
			c.JSON(200, "hello1")
		})
		r1.Run(":8992")
	}()

	r := gin.Default()
	r.GET("/sayHello/", func(c *gin.Context) {
		c.JSON(200, "hello")
	})
	r.Run(":8991")
}

二. 下载docker镜像

默认已经安装好docker

docker pull centos

三. 编译二进制文件

我这里使用makefile

makefile文件如下

#!/bin/bash
export LANG=zh_CN.UTF-8

ENVARG=GOPATH=$(CURDIR) GO111MODULE=on
LINUXARG=CGO_ENABLED=1 GOOS=linux GOARCH=amd64
BUILDARG=-ldflags " -s -X main.buildTime=`date '+%Y-%m-%dT%H:%M:%S'` -X main.gitHash=(`git symbolic-ref --short -q HEAD`)`git rev-parse HEAD`"

gateway:
	cd src; ${ENVARG} go build ${BUILDARG} -o ./projects/docker_demo/main ./projects/docker_demo/main.go;

linux_gateway:
	cd src; ${ENVARG} ${LINUXARG} go build ${BUILDARG} -o ./projects/docker_demo/main ./projects/docker_demo/main.go;

执行编译linux二进制

make linux_gateway

报错

Docker 生成 golang 程序镜像

查找原因网上说是因为os本身系统库不兼容的问题,首先因为我是在macos上编译linux的版本,所以需要安装:

brew install FiloSottile/musl-cross/musl-cross

同样参数要调整

CGO_ENABLED=1 GOOS=linux  GOARCH=amd64  CC=x86_64-linux-musl-gcc  CXX=x86_64-linux-musl-g++

我这里看到应该是cgo报的错,我们这里是简单的示例,没用用到cgo,所以把CGO_ENABLED设置为0,就可以编译通过

CGO_ENABLED=0

 CGO_ENABLED 环境变量对我们程序的影响。 CGO_ENABLED是用来控制golang 编译期间是否支持调用 cgo 命令的开关,其值为1或0,默认情况下值为1,可以用 go env 查看默认值。

四. 编写Dockerfile文件

# 指定基础镜像
FROM centos:latest
LABEL authors="docker-test"

# 设置工作目录
WORKDIR /app/gateway

# 复制当前目录下的所有文件到工作目录
COPY . .

# 声明容器运行时需要暴露的端口
EXPOSE 8991 8992

# 定参
ENTRYPOINT ["./main"]

五. 构建镜像

docker build -t my-golang-app .

Docker 生成 golang 程序镜像

docker images | grep my-golang-app

#my-golang-app                   latest    dfd4bab9dabd   About a minute ago   239MB

运行镜像

docker run -idt -p 8991:8991 -p 8992:8992 my-golang-app

#630728cd4ef04d4fc2ee94a986eaaed281d60bd74922126d4f345d12ed941c5f

docker ps

#CONTAINER ID   IMAGE           COMMAND    CREATED          STATUS          PORTS                              NAMES
#630728cd4ef0   my-golang-app   "./main"   10 seconds ago   Up 10 seconds   0.0.0.0:8991-8992->8991-8992/tcp   charming_yonath

可以看到已经运行起来

六.  请求服务接口

Docker 生成 golang 程序镜像

Docker 生成 golang 程序镜像 可以看到已经通了

七. 推送images到docker hub

7.1 docker打tag

docker tag my-golang-app:latest 你的账号/my-golang-app:latest

7.2 推送到docker hub

docker push pengdylan7/my-golang-app:latest

docker push 你的账号/my-golang-app:latest

docker客户端里可以看到推送成功

Docker 生成 golang 程序镜像文章来源地址https://www.toymoban.com/news/detail-486229.html

到了这里,关于Docker 生成 golang 程序镜像的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SpringBoot项目docker镜像生成

    拉取基础镜像 基于镜像创建容器 在容器中,安装所需依赖 部署脚本 提交容器,生成新的镜像 编写Dockerfile,添加启动命令,生成最终镜像 导出镜像 参数如下: FROM 依赖镜像 WORKDIR 当前文件夹 COPY 拷贝,将文件拷贝到容器中 CMD 容器启动后执行的初始化命令 EXPOSE 暴露端口

    2024年01月24日
    浏览(38)
  • 使用docker 生成镜像,并启动容器。

    指令详情: 指令 解析 FROM 指定基础镜像,必须为第一个命令 MAINTAINER 维护者邮箱等信息 RUN 构建镜像docker build时执行的命令 ADD 将本地文件添加到容器中,tar 类型文件会自动解压 COPY 功能类似ADD,但是是不会自动解压文件,也不能访问网络资源 CMD 在docker run时会执行的命令,

    2024年02月16日
    浏览(51)
  • docker 生成镜像的几个问题

    首选做准备工作 ① 新建一个空的目录(以jdktemp为例),然后在目录中新建一个文件,命名为Dockerfile ② 拷贝课前资料提供的 jdk8.tar.gz 到这个目录中 ③ 编写Dockerfile文件: a )基于java:8-alpine作为基础镜像 b )将app.jar拷贝到镜像中 c )暴露端口 d )编写入口ENTRYPOINT ④ 使用

    2024年02月09日
    浏览(50)
  • AIGC:生成简单的Golang语言程序

    【问1】:编写一个golang程序,在屏幕上显示: Programming is fun! And Programming in C is even more fun! 【答1】:可以用如下的代码实现: 输出结果为: 【问2】:编写一个golang程序,求华氏温度 100°F 对应的摄氏温度。摄氏温度 c=5*(f-32)/9,其中f表示华氏温度。 【答2】:以下是实现代码

    2024年02月09日
    浏览(34)
  • 让golang程序生成coredump文件并进行调试

    今天讲讲怎么让golang程序生成coredump文件,并且进行调试的。 别看我写了不少golang的博客,其实我平时写c++的时间更多,所以也算和coredump是老相识了。 core dump 文件实际上是进程在某个时间点时的内存映像,当时进程使用的内存是啥样就会被原样保存下来存在文件系统的某个

    2024年02月12日
    浏览(38)
  • Maven生成和推送Docker镜像到Docker仓库( IDEA 亲测可用)

    目录 1.搭建私有Docker镜像仓库 1.搭建docker registry 2.搭建docker registry web UI: 2.Maven创建并上传Docker镜像: 1.允许docker被远程访问 2.重启docker服务 3.构建和上传Docker镜像(不适用IDEA) 4.构建并上传Docker镜像(适用IDEA) 1.搭建docker registry 参考文档:docker-registry私有镜像库搭建并配置

    2023年04月08日
    浏览(41)
  • 改造 ChatGPT-Next-Web 项目重新生成 Docker 镜像

    需要通过 ChatGPT-Next-Web 使用自己搭建的 OpenAI API 兼容的服务器,需要对 ChatGPT-Next-Web 项目的少量代码进行改造。 克隆代码, 修改代码, 完结!

    2024年02月14日
    浏览(43)
  • 麒麟V10 ARM 离线生成RabbitMQ docker镜像并上传Harbor私有仓库

    第一步在外网主机执行: docker pull arm 64 v 8 / rabbitmq: 3.8.9 -management 将下载的镜像打包给离线主机集群使用 在指定目录下执行打包命令: 执行:  docker save -o rabbitmq_arm3.8.9.tar arm64v8/rabbitmq:3.8.9-management 如果懒得打包给你飞机票下载镜像包:https://download.csdn.net/download/jiejiegua/88

    2024年02月03日
    浏览(44)
  • 【go语言开发】go项目打包成Docker镜像,包括Dockerfile命令介绍、goctl工具生成

    本文主要介绍如何将go项目打包成镜像,首先介绍Dockerfile常用命令介绍,然后介绍使用工具goctl用于生成Dockerfile,还可以根据需求自定义指令内容,最后讲解如何将go-blog项目打包成镜像,以及如何运行等 参考文档: docker日常使用,编写dockerfile等 dockerfile编写 开发完项目之后

    2024年01月20日
    浏览(51)
  • 【CI/CD技术专题】「Docker实战系列」本地进行生成镜像以及标签Tag推送到DockerHub

    背景介绍 Docker镜像构建成功后,只要有docker环境就可以使用,但必须将镜像推送到Docker Hub上去。创建的镜像最好要符合Docker Hub的tag要求,因为在Docker Hub注册的用户名是liboware,最后利用docker push命令推送镜像到公共仓库。 前提概要 你需要在Docker hub注册用户:到官网注册账

    2024年02月10日
    浏览(60)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包