使用dockerfile发布go项目

2023-11-14

docker安装

下载docker
yum install docker
 
设置docker随系统启动
chkconfig docker on
 
启动docker服务
service docker start
 
启动后查看docker状态
systemctl status docker:
[root@dev-k8s ~]# systemctl status docker● docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
   Active: active (running) since Mon 2022-06-13 15:50:16 CST; 7min ago
     Docs: http://docs.docker.com
 Main PID: 12197 (dockerd-current)
   CGroup: /system.slice/docker.service
           ├─12197 /usr/bin/dockerd-current --add-runtime docker-runc=/usr/libexec/docker/docker-runc-current --default-runtime=docker-runc --exec-opt native.cgroupdriver=systemd --userland-proxy-path=/usr/libexec...
           └─12207 /usr/bin/docker-containerd-current -l unix:///var/run/docker/libcontainerd/docker-containerd.sock --metrics-interval=0 --start-timeout 2m --state-dir /var/run/docker/libcontainerd/containerd --s...
 
Jun 13 15:50:16 dev-k8s dockerd-current[12197]: time="2022-06-13T15:50:16.283640021+08:00" level=warning msg="Docker could not enable SELinux on the host system"
Jun 13 15:50:16 dev-k8s dockerd-current[12197]: time="2022-06-13T15:50:16.323651305+08:00" level=info msg="Graph migration to content-addressability took 0.00 seconds"
Jun 13 15:50:16 dev-k8s dockerd-current[12197]: time="2022-06-13T15:50:16.324181137+08:00" level=info msg="Loading containers: start."
Jun 13 15:50:16 dev-k8s dockerd-current[12197]: time="2022-06-13T15:50:16.327645142+08:00" level=info msg="Firewalld running: false"
Jun 13 15:50:16 dev-k8s dockerd-current[12197]: time="2022-06-13T15:50:16.421269250+08:00" level=info msg="Default bridge (docker0) is assigned with an IP address 192.168.0.0/24. Daemon optio...d IP address"
Jun 13 15:50:16 dev-k8s dockerd-current[12197]: time="2022-06-13T15:50:16.452900303+08:00" level=info msg="Loading containers: done."
Jun 13 15:50:16 dev-k8s dockerd-current[12197]: time="2022-06-13T15:50:16.572134045+08:00" level=info msg="Daemon has completed initialization"
Jun 13 15:50:16 dev-k8s dockerd-current[12197]: time="2022-06-13T15:50:16.572172608+08:00" level=info msg="Docker daemon" commit="7d71120/1.13.1" graphdriver=overlay2 version=1.13.1
Jun 13 15:50:16 dev-k8s dockerd-current[12197]: time="2022-06-13T15:50:16.585165447+08:00" level=info msg="API listen on /var/run/docker.sock"
Jun 13 15:50:16 dev-k8s systemd[1]: Started Docker Application Container Engine.

go-helloworld代码

package main
 
import (
   "fmt"
   "log"
   "net/http"
   "os"
)
 
func handler(w http.ResponseWriter, r *http.Request) {
   log.Print("Hello world received a request.")
   target := "Welcome to go"
   fmt.Fprintf(w, "Hello, %s!\n", target)
}
 
func main() {
   log.Print("Hello world sample started.")
 
   http.HandleFunc("/", handler)
 
   port := os.Getenv("PORT")
   if port == "" {
      port = "8009"
   }
 
   log.Fatal(http.ListenAndServe(fmt.Sprintf(":%s", port), nil))
 
}

go项目打包

CMD中进入main方法目录设置linux运行环境 后 打包
F:\私人代码\go-helloword>set GOARCH=amd64
F:\私人代码\go-helloword>set GOOS=linux
 
 
环境问题导致打包出错,使用go env -w GO111MODULE=off命令解决下
F:\私人代码\go-helloword>go build -o helloworld
go: cannot find main module, but found .git/config in F:\私人代码\go-helloword
to create a module there, run:
go mod init
F:\私人代码\go-helloword>go mod init
go: cannot determine module path for source directory F:\私人代码\go-helloword (outside GOPATH, module path must be specified)
Example usage:
'go mod init example.com/m' to initialize a v0 or v1 module
'go mod init example.com/m/v2' to initialize a v2 module
F:\私人代码\go-helloword>go env -w GO111MODULE=off
 
 
重新打包后成功
F:\私人代码\go-helloword>go build -o helloworld
F:\私人代码\go-helloword>dir
驱动器 F 中的卷是 文档及代码
卷的序列号是 DB44-E624
F:\私人代码\go-helloword 的目录
2022/06/13 16:37 <DIR> .
2022/06/13 16:37 <DIR> ..
2022/06/10 16:43 6,148 .DS_Store
2022/06/13 10:33 <DIR> .idea
2022/06/13 16:20 425 Dockerfile
2022/06/13 16:37 6,066,257 helloworld
2022/06/10 17:50 448 helloworld.go
4 个文件 6,073,278 字节
3 个目录 307,233,075,200 可用字节

dockerfile编写,需要加上RUN chmod +x /build/helloworld命令,否则导致容器启动时对go二进制文件helloworld没有使用权限

FROM golang:alpine
 
WORKDIR /build
 
COPY helloworld .
 
EXPOSE 8009
 
RUN chmod +x /build/helloworld
 
CMD ["/build/helloworld"]

使用dockerfile创建镜像,然后使用镜像创建容器

使用dockerfile创建镜像
[root@dev-k8s docker-go]# docker build . -t go-helloworld:0.0.4
Sending build context to Docker daemon 6.069 MB
Step 1/6 : FROM golang:alpine
 ---> 155ead2e66ca
Step 2/6 : WORKDIR /build
 ---> Using cache
 ---> 6b6f9f40297e
Step 3/6 : COPY helloworld .
 ---> 44fefa2c08df
Removing intermediate container f2ed9e5c80b6
Step 4/6 : EXPOSE 8009
 ---> Running in 3dff69240776
 ---> b7ce1ff0c201
Removing intermediate container 3dff69240776
Step 5/6 : RUN chmod +x /build/helloworld
 ---> Running in 344e235c6ee8
 
 ---> 2dea00206ded
Removing intermediate container 344e235c6ee8
Step 6/6 : CMD /build/helloworld
 ---> Running in a8a56639f2fb
 ---> df2ca4071b8c
Removing intermediate container a8a56639f2fb
Successfully built df2ca4071b8c
 
 
用镜像创建容器
root@dev-k8s ~]# docker run -d -it -p 8009:8009  go-helloworld:0.0.4
29ea4e02b8319f564b6cf7073792f275c754fcbeb08bb6062683c1524f9cbc7c

访问helloworld项目

root@dev-k8s docker-go]# netstat -antp |grep 8009
tcp        0      0 10.6.0.11:33522         172.22.254.3:8009       ESTABLISHED 17128/n9e-agent
tcp6       0      0 :::8009                 :::*                    LISTEN      12318/docker-proxy-
 
[root@dev-k8s docker-go]# curl localhost:8009
Hello, Welcome to go!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用dockerfile发布go项目 的相关文章

随机推荐

  • Failed to execute goal org.apache.maven.plugins:maven-checkstyle-plugin

    idea编译项目时 出现如下报错 ERROR Failed to execute goal org apache maven plugins maven checkstyle plugin 3 0 0 check validate on p
  • k8s学习笔记(二):k8s的组件介绍

    文章目录 k8s组件介绍 架构图 角色 控制平面组件 Control Plane Components kube apiserver 端口 容器 etcd 端口 容器 kube scheduler 容器 端口 kube controller
  • Postman脚本——断言测试

    pm对象提供了测试相关功能 pm test testName String specFunction Function Function 测试函数 pm expect assertion Function Assertion 允许在响应数据
  • [552]python实现聚类算法(6种算法)

    1 Mean shift 1 概述 Mean shift 即 均值迁移 的基本思想 在数据集中选定一个点 然后以这个点为圆心 r为半径 画一个圆 二维下是圆 求出这个点到所有点的向量的平均值 而圆心与向量均值的和为新的圆心 然后迭代此过程
  • AI炼丹技巧

    目录 样本不平衡 1 什么是样本不平衡问题 2 样本不平衡会对我们模型的训练带来哪些影响呢 3 在机器学习中解决样本不平衡问题有哪些通用的解决策略 4 在深度学习中 有哪些解决样本不平衡的方法 5 从模型评价指标的角度 重新审视训练好的模型
  • 计算机中丢失msvcp140.dll怎么解决?分享三个解决方法

    当我们在运行某些应用程序时 可能会遇到 缺少msvcp140 dll 或 找不到msvcp140 dll 的错误提示 这意味着我们的系统缺少这个重要的动态链接库文件 msvcp140 dll丢失会造成很多软件无法正常启动运行 下面小编就分享
  • 全网最全!Python爬虫requests库教程(附案例)

    1 requests 库简介 Requests 是一个为人类设计的简单而优雅的 HTTP 库 requests 库是一个原生的 HTTP 库 比 urllib3 库更为容易使用 requests 库发送原生的 HTTP 1 1 请求 无需手
  • 【MySQL高级篇笔记-性能分析工具的使用 (中) 】

    此笔记为尚硅谷MySQL高级篇部分内容 目录 一 数据库服务器的优化步骤 二 查看系统性能参数 三 统计SQL的查询成本 last query cost 四 定位执行慢的 SQL 慢查询日志 1 开启慢查询日志参数 2 查看慢查询数目 3
  • 常见的排序算法及其复杂度分析

    1 常见算法分类 十种常见排序算法一般分为以下几种 非线性时间比较类排序 交换类排序 快速排序和冒泡排序 插入类排序 简单插入排序和希尔排序 选择类排序 简单选择排序和堆排序 归并排序 二路归并排序和多路归并排序 线性时间非比较类排序 计数
  • 黑盒测试与白盒测试的区別

    黑盒测试与白盒测试是软件测试中两种不同的测试方法 它们的主要区别在于测试者对被测试软件的了解程度 下面 我们将详细介绍这两种测试方法的特点和适用场景 一 黑盒测试 黑盒测试又称为功能测试 是针对被测试软件的功能进行测试的一种测试方法 测试者
  • linux 进程几种状态,linux进程状态

    linux系统最常用的命令莫过于ps 经常要用其查看linux的进程和线程情况 此文我们着重来看进程 进程又分为以下几种状态 1 运行 正在运行或在运行队列中等待 2 中断 休眠中 受阻 在等待某个条件的形成或接受到信号 3 不可中断 收到
  • Kotlin Coroutines Flow 系列(一) Flow 基本使用

    一 Kotlin Flow 介绍 Flow 库是在 Kotlin Coroutines 1 3 2 发布之后新增的库 官方文档给予了一句话简单的介绍 Flow cold asynchronous stream with flow build
  • C# socket异步通信服务器和客户端

    本文章向大家介绍C socket异步通信服务器和客户端 主要包括C socket异步通信服务器和客户端使用实例 应用技巧 基本知识点总结和需要注意事项 具有一定的参考价值 需要的朋友可以参考一下 服务器代码 只要客户端连接进来就会接收到Se
  • Qt之QTableView 保持滚动条自动滚动到底部

    在使用QTableView添加数据时 当数据量超出显示范围时会自动的打开滚动条 如果设置了在需要时打开滚动条属性 而默认的是滚动条一直是保持在最顶部 但是有些时候我们添加数据时是需要查看添加的最新结果的 所以一般都会把滚动条滚动到最新数据那
  • 【scrapy】scrapy爬取数据指南

    scrapy是爬虫界常用的基于Python爬虫框架 但是网上找了很多这类的文章 发现有多处错误 故为了让刚想尝试爬虫的蜘蛛们少走点坑 故把最新的方法奉上 在此之前 请先更新你的pip版本 并安装scrapy pymysql pip inst
  • kernelbase.dll崩溃的处理_kernelbase.dll故障教程

    kernelbase dll是存放在windows系统下的一个非常重要的dll文件 DLL英文全称Dynamic Link Library 中文意思是 动态链接库 DLL是一个作为共享函数库的可执行文件 它使进程可以调用不属于本身可执行代码
  • java 代理模式

    1 静态代理 1 1 代码实现 接口 interface Hello String sayHello String str 实现 class HelloImp implements Hello Override public String
  • 对象常用的方法

    思维导图 对象中常用的方法 Object prototype 1 hasOwnProperty 方法会返回一个布尔值 指示对象自身属性中是否具有指定的属性 也就是 是否有指定的键 检测是否为私有属性 即使属性的值是 null 或 undef
  • (五)redis常用命令之list

    概述 列表类型用来存储多个有序的字符串 列表中的每个字符串就是一个元素 一个列表最多可以存储2 32 1个元素 redis的列表结构操作起来非常灵活 应用场景非常广 lpush命令 从列表左边插入多个元素 格式 lpush key valu
  • 使用dockerfile发布go项目

    docker安装 下载docker yum install docker 设置docker随系统启动 chkconfig docker on 启动docker服务 service docker start 启动后查看docker状态 sys