「Docker」如何在苹果电脑上构建简单的Go云原生程序「MacOS」

介绍

使用Docker 开发Golang云原生应用程序,使用Golang服务和Redis服务

复制代码
 注:写得很详细 为方便我的朋友可以看懂 

环境部署

确保已经安装Godocker等基础配置

官网下载链接直达:Docker官网下载 Go官网下载

操作步骤

第一步 创建一个Go应用程序

  1. 创建新Go工程,编辑main.go文件内容如下:
go 复制代码
package main

import (
    "fmt"
    "log"
    "net/http"
    "github.com/go-redis/redis/v8"
    "context"
)

var ctx = context.Background()

func main() {
    // 设置Redis客户端
    client := redis.NewClient(&redis.Options{
        Addr: "redis:6379", // 使用Docker服务名作为地址
    })

    // 确认Redis连接
    _, err := client.Ping(ctx).Result()
    if err != nil {
        log.Fatalf("Could not connect to Redis: %v", err)
    }

    // 设置HTTP服务器
    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
        // 尝试从Redis获取值
        val, err := client.Get(ctx, "counter").Result()
        if err == redis.Nil {
            val = "0"
            _, err := client.Set(ctx, "counter", "1", 0).Result()
            if err != nil {
                fmt.Fprintf(w, "Error setting value in Redis: %v", err)
                return
            }
        } else if err != nil {
            fmt.Fprintf(w, "Error getting value from Redis: %v", err)
            return
        } else {
            // 增加计数器
            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(":8080", nil))
}

第二步 使用Docker编排Go应用程序和Redis服务

  1. 创建 Dockerfile文件(无文件后缀名)如图:

  2. 然后编辑该文件:

docker 复制代码
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程序的路径):

shell 复制代码
go mod init hello-redis
go mod tidy

第四步 创建并编辑docker-compose.yml文件

在文件夹下创建文件,添加内容如下:

docker 复制代码
version: '3'
services:
  app:
    build: .
    ports:
      - "8080:8080"
    depends_on:
      - redis
  redis:
    image: "redis:alpine"

第五步 构建和运行应用程序

继续在Terminal上输入代码:

shell 复制代码
docker-compose up --build

此时将会试图构建Go应用程序和Redis服务,并启动它们,在这个过程中需要等待Docker下载相应的依赖配置。

第六步 测试应用程序

使用curl访问http://localhost:8082

输入代码:

shell 复制代码
curl http://localhost:8080

这个时候会打开浏览器并访问http://localhost:8080,页面上会显示计数值

附录

比较快一点的编辑文件的方法就是使用Terminal

具体的步骤如下:(一个小案例:创建Dockerfile文件并编辑)

1. 切换到工作目录

在工作目录上右击打开Terminal



或者直接打开Terminal 然后输入代码切换到工作目录

shell 复制代码
cd Go应用程序的路径

忘记路径的时候 如何查看Go应用程序的工作路径

右击go文件夹,点击get info

以下信息就是go文件夹的位置

2. 创建文件

输入代码:

shell 复制代码
vim Dockerfile

3. 编辑文件,保存并退出

复制粘贴前文代码

复制粘贴好之后,直接输入代码,回车即可退出:
注意一定要是英文输入法

shell 复制代码
:wq!
相关推荐
橙色云-智橙协同研发4 小时前
从 CAD 图纸到 Excel 数据:橙色云智橙 PLM 打造制造企业数字化协同新模式
大数据·功能测试·云原生·cad·plm·云plm·bom提取
赵文宇(温玉)6 小时前
构建内网离线的“github.com“,完美解决内网Go开发依赖
开发语言·golang·github
Wang's Blog8 小时前
Nestjs框架: 微服务事件驱动通信与超时处理机制优化基于Event-Based 通信及异常捕获实践
微服务·云原生·架构·nestjs
YXWik68 小时前
新版若依微服务增强swagger增强集成knife4j
微服务·云原生·架构
草明8 小时前
Go 的 IO 多路复用
开发语言·后端·golang
马达加斯加D8 小时前
k8s --- Intro
云原生·容器·kubernetes
Gauss松鼠会9 小时前
【openGauss】构建一个兼容Oracle模式支持创建package的openGauss的docker镜像
数据库·docker·oracle·opengauss
梁正雄11 小时前
16、Docker swarm-3
运维·docker·容器
Freshman小白12 小时前
python算法打包为docker镜像(边缘端api服务)
python·算法·docker
麦兜*12 小时前
Spring Boot 应用 Docker 监控:Prometheus + Grafana 全方位监控
spring boot·后端·spring cloud·docker·prometheus