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


    介绍

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

     注:写得很详细 为方便我的朋友可以看懂 
    
    • 1

    环境部署

    确保已经安装Godocker等基础配置
    官网下载链接直达:Docker官网下载         Go官网下载

    操作步骤

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

    1. 创建新Go工程,编辑main.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))
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55

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

    1. 创建 Dockerfile文件(无文件后缀名)如图:
      在这里插入图片描述

    2. 然后编辑该文件:

    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" ]
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    第三步 初始化Go模块

    继续在Terminal编辑(确保还是在这个go程序的路径):

    go mod init hello-redis
    go mod tidy
    
    • 1
    • 2

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

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

    version: '3'
    services:
      app:
        build: .
        ports:
          - "8080:8080"
        depends_on:
          - redis
      redis:
        image: "redis:alpine"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

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

    继续在Terminal上输入代码:

    docker-compose up --build
    
    • 1

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

    第六步 测试应用程序

    使用curl访问http://localhost:8082
    输入代码:

    curl http://localhost:8080
    
    
    • 1
    • 2

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

    附录

    比较快一点的编辑文件的方法就是使用Terminal
    具体的步骤如下:(一个小案例:创建Dockerfile文件并编辑)

    1. 切换到工作目录

    在工作目录上右击打开Terminal

    在这里插入图片描述



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

    cd Go应用程序的路径
    
    • 1

    在这里插入图片描述

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

    右击go文件夹,点击get info
    在这里插入图片描述
    以下信息就是go文件夹的位置
    在这里插入图片描述

    2. 创建文件

    输入代码:

    vim Dockerfile
    
    • 1

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

    复制粘贴前文代码
    在这里插入图片描述
    复制粘贴好之后,直接输入代码,回车即可退出:
    注意一定要是英文输入法

    :wq!
    
    • 1

    在这里插入图片描述
在这里插入图片描述

  • 相关阅读:
    python的opencv操作记录(十)——图像融合
    不要对正则表达式进行频繁重复预编译
    Educational Codeforces Round 17 ACD
    Java设计模式-创建者模式-单例模式
    不同背景+目标图像 Augmentation 代码及使用方法
    软件设计原则-接口隔离原则讲解以及代码示例
    【无标题】
    前端CodeReivew实践 | 京东云技术团队
    matlab 七段式轨迹 S型速度规划
    PAT1021 个位数统计
  • 原文地址:https://blog.csdn.net/weixin_67225910/article/details/134553871