介绍
使用Docker开发Golang云原生应用程序,使用Golang服务和Redis服务
注:写得很详细 为方便我的朋友可以看懂
环境部署
确保已经安装Go
、docker
等基础配置
官网下载链接直达:Docker官网下载 Go官网下载
操作步骤
第一步 创建一个Go应用程序
- 创建新Go工程,编辑main.go文件内容如下:
package main
import (
"context"
"fmt"
"github.com/go-redis/redis/v8"
"log"
"net/http"
)
var ctx = context.Background() //创建一个context---用于redis操作
func main() {
// 第一步 设置Redis客户端
client := redis.NewClient(&redis.Options{
Addr: "localhost:6379", // 使用Docker服务名作为地址
})
//1 redis.NewClient()初始化一个新的redis客户端实例(客户端可以执行对redis各种操作)
//在创建一个数据库连接时,其实是创建了一个数据库客户端实例
//2 &redis.Options{}是一个结构体(包含创建redis客户端时配置信息)
//3 Addr:“redis:6379” 设置redis服务端的地址(redis--服务器名/ip地址;6379--redis服务默认端口)
// 第二步 确认 是否与 Redis 连接成功
_, err := client.Ping(ctx).Result() //客户端 发送P ing 到服务端-->检测客户端是否与 Redis服务器 建立连接
if err != nil {
log.Fatalf("Could not connect to Redis: %v", err) //记录err并终止程序
}
//.Result() 获取Ping后的响应和错误
// 第三步 1 设置HTTP服务器
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
//尝试从Redis获取值
val, err := client.Get(ctx, "counter").Result() //查键counter(val:获取到的值value)
//(1)无查到key(redis.Nil--特殊错误:键不存在)
if err == redis.Nil {
//增键counter
val = "0" //无计数器的值--设置为0
_, err := client.Set(ctx, "counter", "1", 0).Result() //增键counter (最后参数0:表示键不会过期)
if err != nil {
fmt.Fprintf(w, "Error setting value in Redis: %v", err) //错误信息写入http响应
//w:HTTP响应写入器(向客户端发送响应数据) %v 格式化占位符:表示err
return //终止函数,不再向下执行
}
//(2)发生错误
} else if err != nil {
fmt.Fprintf(w, "Error getting value from Redis: %v", err)
return
} else {
// (3)查到key,value++
newVal, err := client.Incr(ctx, "counter").Result()
if err != nil { //添加计数器发生错误时
fmt.Fprintf(w, "Error incrementing value in Redis: %v", err)
return
}
val = fmt.Sprintf("%d", newVal) //更新计数器的值
}
fmt.Fprintf(w, "Counter value is: %s", val)
})
// 启动HTTP服务器
log.Fatal(http.ListenAndServe(":8082", nil))
}
注:查询Redis服务端的地址和端口(在Terminal输入以下代码),如图:
redis-cli
第二步 使用Docker编排Go应用程序和Redis服务
-
创建
Dockerfile
文件(无文件后缀名)如图: -
然后编辑该文件:
FROM golang:1.16
WORKDIR /app
COPY go.mod .
COPY go.sum .
RUN go mod download
COPY *.go .
RUN go build -o /hello-redis
EXPOSE 8080
CMD [ "/hello-redis" ]
第三步 初始化Go模块
继续在Terminal编辑(确保还是在这个go程序的路径):
go mod init hello-redis
go mod tidy
第四步 创建并编辑docker-compose.yml文件
在文件夹下创建文件,添加内容如下:
version: '3' #docker compose的版本号
#定义要运行的服务
services:
#自定义应用服务
app: #定义名为app的服务
build: . #构建Dockerfile (使用 . 当前目录下的Dockerfile文件)
ports:
- "8082:8082" # 映射端口: 容器8082端口---映射-->宿主机8082端口
depends_on:
- redis # 依赖redis服务
redis:
image: "redis:alpine"#使用redis的alpine镜像
第五步 构建和运行应用程序
继续在Terminal上输入代码:
docker-compose up --build
此时将会试图构建Go应用程序和Redis服务,并启动它们,在这个过程中需要等待Docker下载相应的依赖配置。
第六步 测试应用程序
使用curl
访问http://localhost:8082
输入代码:
curl http://localhost:8080
这个时候会打开浏览器并访问http://localhost:8080,页面上会显示计数值
附录
比较快一点的编辑文件的方法就是使用Terminal
具体的步骤如下:(一个小案例:创建Dockerfile文件并编辑)
1. 切换到工作目录
在工作目录上右击打开Terminal
或者直接打开Terminal 然后输入代码切换到工作目录
cd Go应用程序的路径
忘记路径的时候 如何查看Go应用程序的工作路径
右击
go文件夹,点击get info
以下信息就是go文件夹的位置
2. 创建文件
输入代码:
vim Dockerfile
3. 编辑文件,保存并退出
复制粘贴前文代码
复制粘贴好之后,直接输入代码,回车即可退出:注意一定要是英文输入法
文章来源:https://www.toymoban.com/news/detail-758306.html
:wq!
文章来源地址https://www.toymoban.com/news/detail-758306.html
到了这里,关于「Docker」如何在苹果电脑上构建简单的Go云原生程序「MacOS」的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!