Golang 镜像拉取与 Docker 部署全教程

关于 Golang

Golang(简称 Go)是 Google 开发的静态类型编程语言,语法上借鉴了 C 语言的简洁性,但弥补了 C 语言的诸多痛点,比如自带垃圾回收(不用手动管理内存)、强类型安全(减少运行时错误)、原生支持并发(轻松处理高并发场景),还内置了变长数组、键值映射(map)等实用类型,以及一个极其丰富的标准库(从网络请求到文件处理,不用依赖太多第三方库)。

简单说,Golang 的核心优势是“快、简、稳”:编译快(几分钟能编译大型项目)、运行快(编译后是二进制文件,直接执行,比解释型语言快很多)、写法简洁(代码量比 Java 少 30%-50%)、运行稳定(垃圾回收机制减少内存泄漏,并发模型避免死锁)。

它的应用场景几乎覆盖了后端开发的所有领域,也是当前云原生技术的“首选语言”:

  • 后端服务开发:搭建 API 接口、用户服务、订单系统等(比如字节跳动、腾讯的很多后端服务用 Go 写);
  • 微服务与云原生:Kubernetes(容器编排工具)、Docker(容器引擎)、Istio(服务网格)等核心组件全是 Go 开发的,用 Go 写微服务能完美适配这些生态;
  • 高并发场景:直播弹幕、实时聊天、秒杀系统等(Go 的 goroutine 并发模型,能轻松支撑百万级并发,资源占用还少);
  • 工具开发:比如 Terraform(基础设施即代码工具)、Grafana(监控工具)、 Hugo(静态网站生成器),都是 Go 写的,编译后单文件,跨平台易部署;
  • 嵌入式开发:Go 编译后的二进制体积小、不依赖虚拟机,适合嵌入式设备(比如物联网设备的控制程序)。

为什么用 Docker 部署 Golang?

传统方式用 Golang 开发部署,常踩这些坑:“本地跑的好好的,到服务器就报错”(开发机 Go 1.24,服务器 1.22,版本不兼容)、“两个项目依赖不同版本的库,装在同一台机器冲突了”、“服务器没装 Go 环境,编译都没法弄”。而 Docker 能把这些问题全解决,核心优势有 5 点:

  1. 环境绝对一致:Golang 镜像里已经打包好了指定版本的 Go 环境、系统依赖(比如 gcc、git),不管是开发机、测试机还是生产服务器,只要能跑 Docker,就能用一模一样的 Go 环境——彻底告别“本地能跑、线上崩了”;
  2. 轻量高效:Go 编译后是单文件二进制,本身就小,再搭配 Alpine 版的 Golang 镜像(仅几十 MB),最终的容器体积比 Java、Python 容器小 80%,启动只要几秒,还能灵活限制 CPU/内存;
  3. 完全隔离:不同项目的 Go 环境互不干扰(比如 A 项目用 Go 1.25,B 项目用 1.24),就算一个项目的容器崩了,也不会影响其他项目,降低故障扩散风险;
  4. 部署迭代快:编译、打包、启动全用命令行搞定,更新时只要重新构建镜像、重启容器(10 秒内完成);如果新版本有问题,删了新容器、启动旧镜像就能回滚,比传统“装环境→编译→部署”快 10 倍;
  5. 不用装本地 Go 环境:就算你电脑没装 Go,只要有 Docker,就能拉取 Golang 镜像,在容器里写代码、编译、运行——尤其适合新手,不用折腾本地环境配置。

🧰 准备工作:安装 Docker 与 Docker Compose

如果你的 Linux 服务器还没装 Docker,直接用下面的一键安装脚本(推荐新手用),能自动装 Docker、Docker Compose,还会配置轩辕镜像加速(拉取 Golang 镜像更快):

bash <(wget -qO- https://xuanyuan.cloud/docker.sh)

脚本支持 CentOS、Ubuntu、Debian 等主流 Linux 发行版,执行后等几分钟,出现“Docker installed successfully”就说明装好了。

1、查看 Golang 镜像:选对版本很重要

首先打开轩辕镜像的 Golang 页面:👉 https://xuanyuan.cloud/r/library/golang,页面里列了所有“支持的标签(tags)”,不同标签对应不同的 Go 版本和基础系统,选对标签能少走很多弯路。

先简单解释下标签的含义(新手必看,高级工程师可快速跳过):

标签示例含义说明适用场景
1.25.2-trixieGo 1.25.2 版本,基于 Debian Trixie 系统需要完整系统工具(如 git)
1.25.2-bookwormGo 1.25.2 版本,基于 Debian Bookworm 系统稳定版系统,推荐生产用
1.25.2-alpine3.22Go 1.25.2 版本,基于 Alpine 3.22 系统追求最小镜像体积(仅 ~50MB)
1.25.2-windowsservercoreGo 1.25.2 版本,基于 Windows Server CoreWindows 服务器环境
tip-trixieGo 最新开发分支(不稳定),基于 Debian Trixie测试新特性,不适合生产

推荐选择:生产环境用 1.25.2-bookworm(稳定)或 1.25.2-alpine3.22(轻量);测试用 1.25-bookworm(自动匹配 1.25 系列最新小版本);Windows 环境用 1.25.2-windowsservercore-ltsc2022

2、下载 Golang 镜像:4 种拉取方式

下面提供 4 种拉取方式,新手优先选“免登录拉取”(不用配置账户,直接用),高级工程师可根据网络环境选。所有方式拉取的镜像内容完全一致,只是地址不同。

2.1 免登录拉取(推荐新手)

这是最简单的方式,不用注册登录,直接拉取,还能自动用轩辕镜像加速:

# 拉取 Go 1.25.2 稳定版(基于 Debian Bookworm)
docker pull xxx.xuanyuan.run/library/golang:1.25.2-bookworm

# (可选)如果想简化镜像名,比如改成“golang:1.25”,后续命令更短
docker tag xxx.xuanyuan.run/library/golang:1.25.2-bookworm golang:1.25

# (可选)删除临时的长标签镜像,避免占用额外空间
docker rmi xxx.xuanyuan.run/library/golang:1.25.2-bookworm

2.2 登录验证拉取(需账户)

如果用轩辕镜像的登录功能,可拉取 docker.xuanyuan.run 前缀的镜像(需先在轩辕镜像平台注册登录):

# 1. 先登录(按提示输入用户名密码)
docker login docker.xuanyuan.run

# 2. 拉取镜像
docker pull docker.xuanyuan.run/library/golang:1.25.2-bookworm

# 3. (可选)改名+删临时标签(同 2.1)
docker tag docker.xuanyuan.run/library/golang:1.25.2-bookworm golang:1.25
docker rmi docker.xuanyuan.run/library/golang:1.25.2-bookworm

2.3 官方直连拉取(网络好时用)

如果你的服务器能直接连 Docker Hub(或已配置其他镜像加速),可直接拉取官方镜像:

docker pull library/golang:1.25.2-bookworm
# 简化名:docker tag library/golang:1.25.2-bookworm golang:1.25

2.4 确认镜像拉取成功

不管用哪种方式,拉取后执行下面的命令,查看是否成功:

docker images

如果输出类似下面的内容,说明成功了(IMAGE ID 会不一样,正常):

REPOSITORY          TAG               IMAGE ID       CREATED        SIZE
golang              1.25              a1b2c3d4e5f6   1 week ago     980MB  # Debian 版
# 或 Alpine 版(体积更小):
# golang              1.25-alpine       f5e6d7c8b9a0   1 week ago     45MB

3、部署 Golang:3 种场景,按需选择

下面提供 3 种部署方案,覆盖“快速测试”“开发生产”“企业级多服务”场景,步骤详细到能照着敲命令。

3.1 快速部署:测试单个 Go 程序(新手入门)

适合想快速跑一段 Go 代码,不用复杂配置的场景(比如测试“Hello World”)。

步骤 1:写一个简单的 Go 程序

在你的服务器上新建一个目录(比如 golang-test),然后创建 main.go 文件:

# 1. 新建目录并进入
mkdir -p ~/golang-test && cd ~/golang-test

# 2. 写一个简单的 Go 程序(输出 Hello + 当前时间)
cat > main.go << 'EOF'
package main

import (
    "fmt"
    "time"
)

func main() {
    fmt.Printf("Hello Golang! Current time: %s\n", time.Now().Format("2006-01-02 15:04:05"))
    // 让程序多跑 30 秒,方便查看容器
    time.Sleep(30 * time.Second)
}
EOF
步骤 2:用 Golang 镜像运行程序

不用在本地装 Go 环境,直接用容器里的 Go 执行代码:

docker run --rm -v $PWD:/app -w /app golang:1.25 go run main.go
命令解释(新手必看):
  • --rm:容器退出后自动删除(避免残留无用容器);
  • -v $PWD:/app:把当前目录(~/golang-test)挂载到容器的 /app 目录(这样容器能读到 main.go);
  • -w /app:把容器的工作目录设为 /app(相当于在容器里 cd /app);
  • golang:1.25:用我们之前拉取的镜像;
  • go run main.go:在容器里执行 Go 程序的命令。
预期结果:

控制台会输出类似下面的内容,说明运行成功:

Hello Golang! Current time: 2025-01-01 10:00:00

3.2 挂载目录部署:开发/生产推荐(兼顾灵活与稳定)

这种方式适合“需要保留编译结果”“代码经常修改”的场景(比如开发中的项目,或生产环境的服务)。核心思路是:把宿主机的“代码目录”“编译目录”挂载到容器,在容器里编译,编译后的二进制文件存在宿主机,下次运行直接用二进制(不用重复编译)。

步骤 1:创建宿主机目录

先在宿主机建 3 个目录,分别存代码、编译结果、日志(目录路径可自定义,这里用 /data/golang 为例):

# 一次性创建 3 个目录
mkdir -p /data/golang/{src,build,logs}
  • /data/golang/src:放 Go 源代码(比如 main.gogo.mod);
  • /data/golang/build:放编译后的二进制文件;
  • /data/golang/logs:放程序运行日志。
步骤 2:准备 Go 代码与依赖文件

在 src 目录下创建 main.go 和 go.mod(Go 1.11+ 依赖管理用 go mod,必须有这个文件):

# 进入 src 目录
cd /data/golang/src

# 1. 创建 go.mod(初始化模块,模块名自定义,比如 github.com/my-golang-app)
go mod init github.com/my-golang-app
# (如果宿主机没装 Go,也可以在容器里执行:docker run --rm -v $PWD:/app -w /app golang:1.25 go mod init github.com/my-golang-app)

# 2. 创建 main.go(写一个简单的 HTTP 服务,监听 8080 端口,返回 Hello)
cat > main.go << 'EOF'
package main

import (
    "fmt"
    "log"
    "net/http"
    "os"
    "time"
)

// 日志文件路径(容器里的路径,对应宿主机 /data/golang/logs)
const logPath = "/logs/app.log"

func main() {
    // 初始化日志(写入文件,同时输出到控制台)
    logFile, err := os.OpenFile(logPath, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644)
    if err != nil {
        log.Fatalf("Failed to open log file: %v", err)
    }
    defer logFile.Close()
    log.SetOutput(logFile)

    // 定义 HTTP 路由:访问 / 时返回 Hello
    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
        msg := fmt.Sprintf("Hello Golang! Time: %s", time.Now().Format("2006-01-02 15:04:05"))
        log.Println(msg)  // 写日志
        fmt.Fprintln(w, msg)  // 返回给客户端
    })

    // 启动 HTTP 服务,监听 8080 端口
    log.Println("Server starting on :8080...")
    if err := http.ListenAndServe(":8080", nil); err != nil {
        log.Fatalf("Server failed: %v", err)
    }
}
EOF
步骤 3:在容器里编译代码

用 Golang 镜像编译 src 里的代码,把二进制文件输出到 build 目录:

docker run --rm -v /data/golang/src:/app/src -v /data/golang/build:/app/build -w /app/src golang:1.25 go build -o /app/build/my-golang-server ./main.go
命令解释:
  • -v /data/golang/src:/app/src:挂载宿主机代码目录到容器 /app/src
  • -v /data/golang/build:/app/build:挂载宿主机编译目录到容器 /app/build
  • go build -o /app/build/my-golang-server:编译 main.go,输出二进制文件到 /app/build/my-golang-server(宿主机对应 /data/golang/build/my-golang-server)。
步骤 4:运行编译后的二进制文件

编译后的二进制文件是独立的,不用 Go 环境也能运行——推荐用轻量的 alpine 镜像运行(比 Golang 镜像小很多,节省资源):

# 启动容器,命名为 golang-server,后台运行
docker run -d --name golang-server \
  -p 8080:8080 \  # 宿主机 8080 端口映射到容器 8080 端口(服务监听的端口)
  -v /data/golang/logs:/logs \  # 挂载日志目录,保存运行日志
  -v /data/golang/build:/app \  # 挂载编译目录,读取二进制文件
  -w /app \  # 工作目录设为 /app(二进制文件所在目录)
  alpine:3.22 ./my-golang-server  # 用 alpine 镜像运行二进制
步骤 5:验证服务是否正常

有 3 种方式验证:

  1. 访问 HTTP 服务:用浏览器或 curl 访问服务器的 8080 端口:

    curl http://你的服务器IP:8080
    

    预期输出:Hello Golang! Time: 2025-01-01 10:30:00

  2. 查看容器状态

    docker ps | grep golang-server
    

    预期输出(STATUS 为 Up,表示正常运行):

    abc123def456   alpine:3.22   "./my-golang-server"   5 minutes ago   Up 5 minutes   0.0.0.0:8080->8080/tcp   golang-server
    
  3. 查看运行日志

    cat /data/golang/logs/app.log
    

    预期输出(包含服务启动日志和请求日志):

    2025/01/01 10:30:00 Server starting on :8080...
    2025/01/01 10:30:05 Hello Golang! Time: 2025-01-02 10:30:05
    

3.3 Docker Compose 部署:企业级多服务场景(高级工程师用)

如果你的 Golang 服务需要依赖其他服务(比如 Redis、MySQL),用 docker-compose 能统一管理所有服务的配置,实现“一键启动/停止”。下面以“Golang 服务 + Redis”为例,演示部署流程。

步骤 1:创建 docker-compose.yml 文件

在宿主机新建一个目录(比如 /data/golang-compose),然后创建 docker-compose.yml 文件:

# 新建目录并进入
mkdir -p /data/golang-compose && cd /data/golang-compose

# 创建 docker-compose.yml
cat > docker-compose.yml << 'EOF'
version: '3.8'  # docker-compose 语法版本(3.8 兼容大部分 Docker 版本)

# 定义所有服务
services:
  # 1. Golang 服务
  golang-app:
    build:  # 用 Dockerfile 构建镜像(不用提前拉取,自动构建)
      context: ./src  # Dockerfile 所在目录(这里是 ./src)
      dockerfile: Dockerfile  # Dockerfile 文件名
    container_name: golang-app  # 容器名
    ports:
      - "8080:8080"  # 端口映射
    volumes:
      - ./logs:/logs  # 挂载日志目录
    depends_on:
      - redis  # 依赖 redis 服务,redis 启动后再启动 golang-app
    restart: always  # 容器退出后自动重启(保障服务可用性)
    environment:
      - REDIS_ADDR=redis:6379  # 给 Golang 服务传环境变量:Redis 地址(容器名:端口)
      - TZ=Asia/Shanghai  # 设置时区(避免日志时间不对)

  # 2. Redis 服务(依赖的服务)
  redis:
    image: redis:7.2-alpine  # 用 Redis 轻量镜像
    container_name: golang-redis
    volumes:
      - ./redis-data:/data  # 挂载 Redis 数据目录,持久化数据
    restart: always
    environment:
      - TZ=Asia/Shanghai
EOF
步骤 2:创建 Golang 服务的 Dockerfile(多阶段构建)

在 src 目录下创建 Dockerfile(多阶段构建能大幅减小最终镜像体积,生产环境强烈推荐):

# 新建 src 目录
mkdir -p ./src && cd ./src

# 创建 Dockerfile
cat > Dockerfile << 'EOF'
# 第一阶段:构建阶段(用完整的 Golang 镜像编译代码)
FROM golang:1.25.2-bookworm AS builder

# 设置工作目录
WORKDIR /app

# 复制 go.mod 和 go.sum(先复制依赖文件,利用 Docker 缓存,后续代码修改不用重新下载依赖)
COPY go.mod go.sum ./
# 下载依赖(如果依赖没改,这一步会用缓存)
RUN go mod download

# 复制所有源代码
COPY . .

# 编译代码:CGO_ENABLED=0 禁用 CGO,生成静态链接的二进制(能在 alpine 里运行)
RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o my-golang-app ./main.go

# 第二阶段:运行阶段(用 alpine 镜像,仅保留二进制文件,体积小)
FROM alpine:3.22

# 安装必要工具(比如 ca-certificates,支持 HTTPS;tzdata 支持时区)
RUN apk --no-cache add ca-certificates tzdata

# 设置工作目录
WORKDIR /app

# 从构建阶段复制二进制文件到当前镜像
COPY --from=builder /app/my-golang-app .

# 暴露服务端口(和程序监听的端口一致)
EXPOSE 8080

# 启动程序
CMD ["./my-golang-app"]
EOF
步骤 3:准备 Golang 代码(带 Redis 依赖)

在 src 目录下创建 main.gogo.modgo.sum(代码会连接 Redis,记录请求次数):

# 1. 初始化 go mod(模块名自定义)
go mod init github.com/my-golang-compose-app

# 2. 安装 Redis 依赖(go-redis 库)
go get github.com/redis/go-redis/v9@latest

# 3. 创建 main.go
cat > main.go << 'EOF'
package main

import (
    "context"
    "fmt"
    "log"
    "net/http"
    "os"
    "time"

    "github.com/redis/go-redis/v9"
)

// 全局变量:Redis 客户端、上下文、日志文件
var (
    redisClient *redis.Client
    ctx         = context.Background()
    logFile     *os.File
)

// 初始化函数:初始化 Redis 客户端和日志
func init() {
    // 1. 初始化日志
    var err error
    logFile, err = os.OpenFile("/logs/app.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644)
    if err != nil {
        log.Fatalf("Failed to open log file: %v", err)
    }
    log.SetOutput(logFile)

    // 2. 从环境变量获取 Redis 地址(docker-compose 里设置的 REDIS_ADDR)
    redisAddr := os.Getenv("REDIS_ADDR")
    if redisAddr == "" {
        redisAddr = "localhost:6379"  // 默认值(本地测试用)
    }

    // 3. 初始化 Redis 客户端
    redisClient = redis.NewClient(&redis.Options{
        Addr:     redisAddr,
        Password: "",  // Redis 没设密码(生产环境要设,通过环境变量传)
        DB:       0,   // 默认 DB
    })

    // 4. 测试 Redis 连接
    _, err = redisClient.Ping(ctx).Result()
    if err != nil {
        log.Fatalf("Failed to connect Redis: %v", err)
    }
    log.Println("Connected to Redis successfully")
}

// HTTP 处理函数:记录请求次数,返回结果
func handleRequest(w http.ResponseWriter, r *http.Request) {
    // 1. Redis 自增,记录请求次数
    count, err := redisClient.Incr(ctx, "request_count").Result()
    if err != nil {
        log.Printf("Redis Incr error: %v", err)
        http.Error(w, "Internal Server Error", http.StatusInternalServerError)
        return
    }

    // 2. 构造响应信息
    msg := fmt.Sprintf("Hello Golang + Redis! Request Count: %d, Time: %s",
        count, time.Now().Format("2006-01-02 15:04:05"))
    
    // 3. 写日志
    log.Println(msg)

    // 4. 返回响应
    fmt.Fprintln(w, msg)
}

func main() {
    // 注册路由
    http.HandleFunc("/", handleRequest)

    // 启动 HTTP 服务
    log.Println("Server starting on :8080...")
    if err := http.ListenAndServe(":8080", nil); err != nil {
        log.Fatalf("Server failed: %v", err)
    }
}
EOF
步骤 4:启动所有服务

在 docker-compose.yml 所在目录(/data/golang-compose)执行:

# 后台启动服务(-d 表示后台运行)
docker compose up -d

第一次启动会自动:1. 拉取 Redis 镜像;2. 构建 Golang 镜像;3. 启动两个容器。耐心等几分钟,出现“Done”就说明启动成功。

步骤 5:验证服务
  1. 访问 Golang 服务

    curl http://你的服务器IP:8080
    

    预期输出(请求次数会递增):

    Hello Golang + Redis! Request Count: 1, Time: 2025-01-01 11:00:00
    

    再执行一次 curl,请求次数会变成 2,说明 Redis 正常工作。

  2. 查看服务状态

    docker compose ps
    

    预期输出(两个服务的 STATUS 都是 Up):

    NAME                IMAGE                        COMMAND                  SERVICE             CREATED             STATUS              PORTS
    golang-app          golang-compose-golang-app    "./my-golang-app"        golang-app          2 minutes ago       Up 2 minutes        0.0.0.0:8080->8080/tcp
    golang-redis        redis:7.2-alpine             "docker-entrypoint.s…"   redis               2 minutes ago       Up 2 minutes        6379/tcp
    
  3. 停止服务(如需)

    # 停止并删除容器(数据目录 ./redis-data、./logs 会保留)
    docker compose down
    # 停止但不删除容器:docker compose stop
    

4、常见问题:踩坑后怎么解决?

4.1 编译后的二进制在 Alpine 里运行报错:“exec format error”

原因:编译时没禁用 CGO,生成的二进制依赖 glibc,但 Alpine 用的是 musl libc,不兼容。
解决:编译时加 CGO_ENABLED=0,比如:

# 容器里编译时
RUN CGO_ENABLED=0 GOOS=linux go build -o /app/build/my-app ./main.go
# 或本地编译时(用于挂载到容器)
CGO_ENABLED=0 GOOS=linux go build -o my-app ./main.go

4.2 容器里访问不到宿主机的文件/目录?

原因:挂载目录时路径写错,或权限不足。
解决

  1. 检查挂载路径:确保宿主机路径是绝对路径(比如用 $PWD 或 /data/golang/src,不要用相对路径 ./src 除非在当前目录);
  2. 调整目录权限:给宿主机目录加读权限(比如 chmod -R 755 /data/golang);
  3. 用 --user 指定用户:如果容器内用户和宿主机用户 UID 不一致,挂载时加 --user $(id -u):$(id -g),比如:
    docker run --rm -v $PWD:/app -w /app --user $(id -u):$(id -g) golang:1.25 go run main.go
    

4.3 Go 依赖下载慢,甚至超时?

原因:默认的 GOPROXY(proxy.golang.org)在国内访问慢。
解决:设置 GOPROXY 为国内镜像(比如阿里云、七牛云),有两种方式:

  1. 运行容器时指定环境变量
    docker run --rm -v $PWD:/app -w /app -e GOPROXY=https://goproxy.cn,direct golang:1.25 go mod download
    
  2. 在 Dockerfile 里设置
    ENV GOPROXY=https://goproxy.cn,direct
    

4.4 容器内时区不对,日志时间和本地差 8 小时?

原因:容器默认用 UTC 时区,国内是东八区(Asia/Shanghai)。
解决:启动容器时加 -e TZ=Asia/Shanghai,或在 Dockerfile 里加 ENV TZ=Asia/Shanghai(Alpine 镜像要先装 tzdata,参考 3.3 里的 Dockerfile)。

4.5 端口冲突:启动容器时提示“port is already allocated”?

原因:宿主机的端口(比如 8080)已经被其他进程占用。
解决

  1. 查看占用端口的进程:netstat -tuln | grep 8080 或 lsof -i:8080
  2. 要么停止占用端口的进程,要么换宿主机端口(比如把 -p 8080:8080 改成 -p 8081:8080)。

结尾

到这里,你已经掌握了 Golang 镜像的拉取和 Docker 部署全流程——从“快速测试代码”到“生产环境服务”,再到“多服务编排”,覆盖了大部分场景。

对于初学者,建议先从“3.1 快速部署”开始,熟悉容器和 Golang 镜像的交互;然后尝试“3.2 挂载目录部署”,理解持久化和编译分离的意义;最后再挑战“3.3 Docker Compose 部署”,掌握多服务管理。

对于高级工程师,推荐用“多阶段构建”减小镜像体积,用“环境变量”管理配置(避免硬编码),用“volume 挂载”实现数据持久化——这些都是生产环境的最佳实践。

如果遇到文档没覆盖的问题,先看容器日志(docker logs 容器名),大部分错误都能在日志里找到原因;也可以参考 Golang 官方文档 或 Docker 官方文档,或在 Stack Overflow、Docker Community 提问。

随着实践深入,你还可以基于本文的基础,探索更多高级用法:比如用 CI/CD 自动构建 Golang 镜像、用 Kubernetes 编排 Golang 服务、用 Prometheus 监控 Golang 服务性能——Golang + Docker 的生态非常强大,能支撑从个人项目到企业级应用的所有需求。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值