windows系统中开发的GO程序生成docker镜像并部署到阿里云服务(linux系统)的操作说明

本文简述将go程序生成docker镜像的操作方法,以及如何部署到阿里云服务。其中go程序在windows系统中开发,阿里云服务的操作系统为linux(centos7.9),以下为流程示意图:

一、window系统中开发go程序

程序实现的功能:

http响应返回配置文件中设置的服务名

代码实现:
package mainimport ("flag""fmt""io""log""os""github.com/gin-gonic/gin""gopkg.in/yaml.v2"
)var flagconf stringvar cfg Configtype Server struct {Port    int    `yaml:"port"`Address string `yaml:"address"`Name    string `yaml:"name"`
}type Config struct {Server Server `yaml:"server"`
}func initConfig() {// 定义命令行标志flag.StringVar(&flagconf, "conf", "./data/conf", "config path, eg: -conf config.yaml")// 解析命令行标志flag.Parse()// 打开YAML配置文件file, err := os.Open(flagconf + "/config.yaml")if err != nil {log.Fatalf("Error opening file: %v", err)}defer file.Close()// 读取文件内容data, err := io.ReadAll(file)if err != nil {log.Fatalf("Error reading file: %v", err)}// 解析YAML配置文件err = yaml.Unmarshal(data, &cfg)if err != nil {log.Fatalf("Error parsing YAML: %v", err)}
}func main() {//初始化配置文件initConfig()//从配置文件中获取服务名svrname := cfg.Server.Name//gin框架处理http请求r := gin.Default()r.GET("/", func(context *gin.Context) {context.String(200, fmt.Sprintf("Hello, World! hello, %v", svrname))})r.Run(":8080")
}
配置文件路径:

./data/conf/config.yaml

server:  port: 8080  address: localhostname: 这是window系统开发环境中的aliyun_docker
 工程目录结构:

效果展示:

二、编译go程序可执行文件

由于阿里云服务选择的系统为linux系统(centos7.9),所以在windows系统中需要进行交叉编译,编译可在linux系统中运行的可执行文件。步骤如下:

1、windows命令窗口中设置go环境变量GOOS=linux
//在windows命令窗口中设置
set GOOS=linux

注意:set GOOS=linux 只是临时生效,当退出当前命令窗口后,GOOS还是原来的值windows。如需设置为永久生效,需执行:go env -w GOOS=linux

2、编译生产linux下的可执行文件
go build -o ./bin/aliyun-docker main.go

三、编写Dockerfile文件

Dockerfile 是一个用于自动构建 Docker 镜像的脚本文件(注意文件名必须为大写字母开头的Dockerfile),内容如下:

# 使用debian基础镜像
FROM debian:stable-slim# 将当前目录下的所有内容复制到容器的 /app 内
COPY . /app# 设置工作目录为 /app
WORKDIR /app# 暴露 8080 端口
EXPOSE 8080# 声明一个卷,这些卷可以被挂载到容器中,以便持久化和共享数据
VOLUME /data/conf# 更改文件的执行权限,重要!!!与基础镜像或系统有关
RUN chmod +x /app/aliyun-docker# 容器启动时运行的命令
CMD ["./aliyun-docker", "-conf", "/data/conf"]

四、构建Docker镜像

注册和购买阿里云服务后(个人账户可免费使用3个月),创建一个centos服务实例,并安装 docker(此处忽略具体操作,可自行搜索相关操作方法)。

1、进入阿里云服务实例并远程连接

2、远程连接中打开文件管理,将编译的可执行文件aliyun-docker、Dockerfile、config.yaml三个文件上传到新创建的文件夹aliyuntest文件夹中

 3、远程连接的页签切换到终端,进入到aliyuntest目录,构建docker镜像
# -t 表示指定镜像的名称和标签   
# 特别注意末尾的 .: 表示 Dockerfile 所在的上下文目录
docker build -t aliyundocker .

4、查看新生成的 docker 镜像
docker images

五、阿里云服务中运行Docker容器

1、阿里云实例的安全组中增加8080端口,以便我们编写的 aliyun-docker 服务能正常访问

2、远程连接切换到文件管理,将 config.yaml 拷贝到 /data/conf文件夹下

3、运行镜像 aliyundocker,生成 docker 容器

# -- name 指定容器名为 ali
# -p 8080:8080 将容器的 8080 端口映射到宿主机的 8080 端口
# -v /data/conf:/data/conf 将容器的 /data/conf 目录映射到宿主机的 /data/conf 目录,实现数据或文件持久化,数据不随容器的删除而丢失docker run --name ali -p 8080:8080 -v /data/conf:/data/conf aliyundocker

注意:①如果报错 exec: "./aliyun-docker": permission denied: unknown,是因为执行文件权限不够,需要在 Dockerfile 中增加命令 RUN chmod +x /app/aliyun-docker

重要(今后补充详细例子):如果存在多个容器直接相互访问,需要创建一个新的网络桥接(docker network newnet),然后运行各个容器时增加命令 -network newnt,这样各个容器之间能根据容器名访问,而不用根据IP访问(容器的IP会变化)。

六、测试

window系统浏览器输入阿里云服务中docker容器的请求IP和端口,检查是否能打印出配置文件中的服务名。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/354456.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python学习打卡:day10

day10 笔记来源于:黑马程序员python教程,8天python从入门到精通,学python看这套就够了 目录 day1073、文件的读取操作文件的操作步骤open()打开函数mode常用的三种基础访问模式读操作相关方法read()方法readlines()方法readline()方法for循…

数据结构:小白专场:树的同构2程序框架、建树及同构判别

T1T2是之前提到的结构数组,是全局变量,作为参数传进去 调用Ismorphic这个函数判断R1R2是不是同构的 首先考虑如何构建BuidTree函数 输入数据的结构如左图 知道n之后,n不为0,循环,循环一次读入一行数据 为了处理方便…

计算机组成原理---Cache的基本工作原理习题

对应知识点: Cache的基本原理 1.某存储系统中,主存容量是Cache容量的4096倍,Cache 被分为 64 个块,当主存地址和Cache地址采用直接映射方式时,地址映射表的大小应为()(假设不考虑一致维护和替…

课程设计---哈夫曼树的编码与解码(Java详解)

目录 一.设计任务&&要求: 二.方案设计报告: 2.1 哈夫曼树编码&译码的设计原理: 2.3设计目的: 2.3设计的主要过程: 2.4程序方法清单: 三.整体实现源码: 四.运行结果展示&…

pytorch库 02 Anaconda、Jupyter常用命令及操作

文章目录 一、Anaconda Prompt1、conda常用命令2、pip常用命令 二、Jupyter1、Jupyter常用命令及基本操作2、Jupyter代码补全插件安装 一、Anaconda Prompt 1、conda常用命令 下列命令可以在Anaconda Prompt中输入。 清屏: cls 查看帮助: conda -h 查…

【MySQL统计函数count详解】

MySQL统计函数count详解 1. count()概述2. count(1)和count(*)和count(列名)的区别3. count(*)的实现方式 1. count()概述 count() 是一个聚合函数,返回指定匹配条件的行数。开发中常用来统计表中数据,全部数据,不为null数据,或…

【尝鲜】SpringCloudAlibaba AI 配置使用教程

1、环境配置 maven依赖pom.xml 注意配置远程仓库&#xff0c;原因见&#xff1a;Unresolved dependency: ‘org.springframework.ai:spring-ai-core:jar:0.8.1’ <dependencies><!--Base--><dependency><groupId>org.springframework.boot</group…

【Python机器学习实战】 | Lasso回归和弹性网回归详细分析研究

&#x1f3a9; 欢迎来到技术探索的奇幻世界&#x1f468;‍&#x1f4bb; &#x1f4dc; 个人主页&#xff1a;一伦明悦-CSDN博客 ✍&#x1f3fb; 作者简介&#xff1a; C软件开发、Python机器学习爱好者 &#x1f5e3;️ 互动与支持&#xff1a;&#x1f4ac;评论 &…

自然语言处理概述

目录 1.概述 2.背景 3.作用 4.优缺点 4.1.优点 4.2.缺点 5.应用场景 5.1.十个应用场景 5.2.文本分类 5.2.1.一般流程 5.2.2.示例 6.使用示例 7.总结 1.概述 自然语言处理&#xff08;NLP&#xff09;是计算机科学、人工智能和语言学的交叉领域&#xff0c;旨在实…

Charles代理https接口到本地

一、操作手册 1、安装工具 1.1、安装代理软件Charles 软件下载地址&#xff1a;Download a Free Trial of Charles • Charles Web Debugging Proxy 1.2、安装https代理插件&#xff1a;&#xff08;有问题自行百度解决&#xff09; 2、配置策略 以下以https接口为例&…

JAVAEE之网络原理(2)_传输控制协议(TCP)的连接管理机制,三次握手、四次挥手,及常见面试题

前言 在上一节中&#xff0c;我们简单介绍了 TCP 协议的相关概念和格式&#xff0c;而且还介绍了TCP 协议原理中的 确认应答机制、超时重传机制&#xff0c;在本节中我们将会继续介绍 TCP协议原理中的其他机制。 连接管理机制&#xff08;安全机制&#xff09; 在正常情况下&…

QT基础 - QMainWindow主窗口

目录 零. 简介 一. 菜单栏 二. 工具栏 三. 状态栏 四. 可停靠区域 五. 总结 零. 简介 QMainWindow 是 Qt 中用于构建主窗口的类。 它通常包含以下几个主要部分&#xff1a; 菜单栏&#xff1a;用于提供各种操作选项。工具栏&#xff1a;放置常用的操作按钮。中心区域&…

气体泄露隐患多,佛山工业可燃气体报警器年检校准来帮忙

在佛山这座工业发达的城市&#xff0c;可燃气体报警器的应用日益广泛&#xff0c;涉及化工、冶金、石油等多个领域。 然而&#xff0c;长时间的使用和恶劣的工业环境可能导致报警器的性能下降&#xff0c;甚至出现误报或漏报的情况。 因此&#xff0c;定期对可燃气体报警器进…

win 打包java项目为exe一键部署,包括mysql和redis

需求&#xff1a;打包springboot项目在win系统下执行&#xff0c;并且要一键部署和开机启动 把所需的程序放在同一个文件夹 1.jdk文件夹&#xff1a;自己去下载&#xff0c;jdk8的话拿jre目录好了 2.mysql文件夹&#xff1a;是8.0.36版&#xff0c;270M精简版了 3.redis文件夹…

Apple - Authorization Services Programming Guide

本文翻译整理自&#xff1a;Authorization Services Programming Guide&#xff08;更新日期&#xff1a;2011-10-19 https://developer.apple.com/library/archive/documentation/Security/Conceptual/authorization_concepts/01introduction/introduction.html#//apple_ref/d…

【JavaEE 进阶(五)】SpringBoot日志

❣博主主页: 33的博客❣ ▶️文章专栏分类:JavaEE◀️ &#x1f69a;我的代码仓库: 33的代码仓库&#x1f69a; &#x1faf5;&#x1faf5;&#x1faf5;关注我带你了解更多进阶知识 目录 1.前言2.日志使用2.1打印日志2.2 门面模式(外观模式)2.3SLF4J框架2.4日志格式说明 3.Sl…

SQL注入-下篇

HTTP注入 一、Referer注入 概述 当你访问一个网站的时候&#xff0c;你的浏览器需要告诉服务器你是从哪个地方访问服务器的。如直接在浏览器器的URL栏输入网址访问网站是没有referer的&#xff0c;需要在一个打开的网站中&#xff0c;点击链接跳转到另一个页面。 Less-19 判…

Elasticsearch 认证模拟题 - 22

一、题目 索引 task 索引中文档的 fielda 字段内容包括了 hello & world&#xff0c;索引后&#xff0c;要求使用 match_phrase query 查询 hello & world 或者 hello and world 都能匹配该文档 1.1 考点 分词器 1.2 答案 # 创建符合条件的 task 索引&#xff0c;…

华为云与AWS负载均衡服务深度对比:性能、成本与可用性

随着云计算的迅速发展&#xff0c;企业对于云服务提供商的选择变得越来越关键。在选择云服务提供商时&#xff0c;负载均衡服务是企业关注的重点之一。我们九河云将深入比较两大知名云服务提供商华为云和AWS的负载均衡服务&#xff0c;从性能、成本和可用性等方面进行对比。 AW…

Blender:渲染输出

一、渲染设置 渲染设置界面&#xff1a; 渲染器选择切换 Cycles渲染器 【文档】 Cycles渲染目标&#xff1a; Cycles是Blender用于产品级渲染&#xff0c;基于物理的路径跟踪器。主要关注于影视质量&#xff0c;更高质量的外观它旨在提供易于使用以及准确的物理渲染结果具有艺术…