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

【云原生 37】Docker快速部署编程语言Golang_docker go运行环境 🏅云计算领域优质创作者🏅。 阅读详情

关于 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.go、go.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.go、go.mod、go.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 的生态非常强大,能支撑从个人项目到企业级应用的所有需求。

群晖Docker镜像拉取受阻?巧用SSH隧道与命令行高效部署DDNS-GO 本文详细介绍了在群晖NAS上通过SSH隧道和命令行高效部署DDNS-GO的方法,解决Docker图形界面拉取镜像失败的问题。内容包括SSH服务启用、root权限获取、镜像拉取与容器运行实战,以及常见问题排查和自动化部署技巧,帮助用户绕过网络限制,提升部署效率。 阅读详情

相关推荐

【docker】Docker实战 - 将golang工程部署到docker

Docker实战系列文章,是自己在开发golang过程中对docker的业务应用的一个提炼和记录。关于docker详细原理的本系列文章将不会过多讲述,本系列着重在实际应用上,并在操作过程中会讲解部分难点。旨在让读者边看边操作,能在实现功能和解决问题中学会docker。 本人第一次写系列文章,如果讲解不正确和不清晰的地方欢迎指出。 – Razil 文章配套资源地址: https://github.

RazilFelix的博客 1万+

欢迎访问阿里云Go Module代理仓库服务

简介 go module公共代理仓库,代理并缓存go模块。你可以利用该代理来避免DNS污染导致的模块拉取缓慢或失败的问题,加速你的构建。 地址 https://mirrors.aliyun.com/goproxy/ 使用帮助 1.使用go1.11以上版本并开启go module机制 2.导出GOPROXY环境变量 export GOPROXY=https://m...

dechen6073的博客 611

harbor在线安装包

harbor在线安装包

GoLang开发环境搭建和使用docker制作golang项目的镜像

刚接触golang,如何搭建开发环境,如何制作docker镜像

ljj306273464的博客 2716

保姆级教程:用BMS的HVIL检测电路,手把手教你排查高压互锁故障(附PWM/直流源方案对比)

本文详细解析了BMS中的HVIL检测电路,通过对比直流源与PWM两种方案,提供了一套系统化的高压互锁故障诊断流程。从电路原理到实战技巧,帮助维修人员精准定位故障根源,提升电动汽车高压系统的安全性和可靠性。

weixin_29300241的博客 392

从MATLAB到版图:手把手复现一篇16位1MSPS SAR ADC的完整设计流程(含Cadence与Verilog代码)

本文详细介绍了16位1MSPS SAR ADC的完整设计流程,从MATLAB行为级建模到Cadence电路实现,再到Verilog数字逻辑编码和版图生成。重点讲解了高精度逐次逼近型模数转换器的关键技术,包括电容阵列建模、校准算法实现、FFT性能验证以及混合信号仿真等,为工程师提供了实用的工业级设计指南。

weixin_28703507的博客 306

2024年Go最全Go异常处理——defer、panic、recover,Golang零基础

事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!二、panic和recover(宕机和宕机恢复)

2401_84920027的博客 1316

使用Gromacs进行蛋白和配体小分子的动力学模拟+结果分析全流程教程

先选protein,选择non-water,使用pymol打开delWater.pdb,输入util.ss('all')展示cartoon,点击file-Export Moive as-MPEG。这一步完成后,文件夹中会出现以下三个文件,其中gro 文件用于记录蛋白的初始坐标,top 文件记录蛋白的拓扑信息和力场信息,itp 与top文件类似。接下来使用Spdbv软件打开蛋白,如果蛋白中存在原子缺失情况,就会出现以下的提示,如果不存在就不会显示,同时保存为rep.pdb。

weixin_46587777的博客 2855

go golang 配置国内下载镜像

在环境变量中配置或者。

qq_34874784的博客 1590

【PyGIS】ERA5降雨蒸散发数据预处理

ERA5-LAND降雨蒸散发数据预处理

```On Earth, Be Water, By Coding``` 3146

【服务器电源架构与关键技术发展趋势】AI数据中心迅猛发展,服务器电源如何演变?

功率级跃升:机柜功率从 100kW 向 1MW 级发展,供电架构采用 HVDC + 固态变压器(SST),省去传统 UPS、PFC 环节; 母线电压升级:从 48V 向 400V→800V 演进,配套 AI 电弧检测、智能运维解决高压安全与维护难题; 能效(PUE)提升:目标 PUE<1.3,通过液冷 CDU 替代传统风冷,可将 PUE 降至 1.16(传统 AI 集群 PUE 达 1.6); 拓扑控制复杂化:功率拓扑从单相→三相、单级→多交错结构,适配高功率需求; 安全维度扩展:新增网络安全防护需求。

昔时扬尘处 1451

Go:go简介及国内镜像源配置

Go 是一门编译型和静态的编程语言。因为 Go 语言是 2009 年诞生的,比目前市面上主流的编程语言,如 C、C++、Python、Java 都要新,所以它能够基于多种语言,取其精华,去其糟粕。内置并发编程支持:协程(goroutine)和通道(channel)内置映射(map)和切片(slice)类型支持多态使用接口来实现装箱(value boxing)和反射(reflection)支持指针、函数闭包、方法、延迟函数调用(defer)、类型内嵌和推断自动化的内存管理,即垃圾回收。

GIS摆渡人 1万+

基于STM32设计的智能水产养殖系统(2025)_359

本设计提出并实现了一种基于STM32F103RCT6微控制器的智能水产养殖控制系统,针对传统水产养殖中人工依赖高、环境参数监测滞后、控制手段单一等问题,集成了TDS水质检测、水温检测、水位监测、自动喂食、自动充氧、换水控制与加热保温等功能。系统采用ESP8266模块实现WIFI联网,通过MQTT协议将关键数据上传至华为云物联网平台,支持Android手机APP和Windows上位机远程监测与控制。同时,系统具备本地LCD数据显示与蜂鸣器异常报警功能,支持本地按键控制操作。整套系统功能完善,响应灵敏,运行稳定

627

基于Docker镜像部署go项目

依赖知识 Go交叉编译基础 Docker基础 Dockerfile自定义镜像基础 docker-compose编排文件编写基础 当然,一点也不会也可以按照这个步骤部署完成,不过可能中间如果出点小问题,会不知道怎么解决,当然你也可以留言。 我是在mac环境上开发测试的,如果你是在windows上可能有一点出入,但应该不会有啥大问题。 一、依赖环境 Docker 二、编写一个GoLang we...

青羽的专栏 7815

第一章:基础知识 - 概念与基础,理解什么是功耗

电源管理与功耗调优:实战项目经验分享

坚韧与专注 885

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

CENTOS docker拉取私服镜像

docker的应用越来越多,安装部署越来越方便,批量自动化的镜像生成和发布都需要docker镜像的拉取。centos6版本太老,docker的使用过程中问题较多,centos7相对简单容易。本文档主要介绍centos系统安装docker和拉取docker私服镜像的步骤和问题解决。尽快切换掉centos6系统。docker registry的私服镜像使用更方便。docker镜像包的瘦身工作要持续进行。空空如常求真得真。

求真得真的博客 1540

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

golang学习之go程序docker部署

windows 安装wsl2 docker 及 go 程序 docker 部署

weixin_56349119的博客 2843

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

docker pull拉取本地私有仓库镜像

author:@c1awn env如下: 如无特殊说明,docker版本为: [root@c1awn01 ~]# docker version Client: Version: 1.13.1 API version: 1.26 Package version:...

6728

Docker入门(Docker安装,镜像拉取,容器)

文章目录前言:本篇博客主要简述了Docker的一些概念及Docker入门一、Docker简述1.1Docker是什么?1.2什么是Docker容器1.3Docker的用途1.4Docker与虚拟化1.5Docker与虚拟化1.6Docker核心概念二、使用步骤1.引入库2.读入数据总结 前言: 本篇博客主要简述了Docker的一些概念及Docker入门 一、Docker简述 1.1Docker是什么? Docker是一个由GO语言写的程序运行的“容器”(Linux containers, LXCs), 1

liu_sgxggs的博客 3535

dockerfile拉取私库镜像_制作Docker镜像

将应用部署在Docker容器上应用所使用的环境不再需要每次部署的时候都进行编译,这能省下非常多的Build时间。为了节省一些不必要的过程,可以将应用构建时的共性提取出来做成一个基础镜像。下面我就来介绍如何制作一个Docker基础镜像。从选择仓库到私有仓库我这以golang这个基础镜像为例:拉取远程镜像到本地登录您的私有仓库把拉取下来的镜像打一个本地Tag把打好的镜像Tag上传至私有仓库一共就四步,...

weixin_39609051的博客 1060

2025新策略:Docker Compose镜像拉取终极指南——从依赖管理到部署优化

你是否还在为Docker镜像版本不一致抓狂?生产环境突然跑不起来只因本地镜像过旧?本文将彻底解决Docker Compose镜像拉取的5大核心难题,掌握后可使部署效率提升40%,冲突率下降90%。读完你将获得: - 3种拉取策略的实战对比表 - 命令行参数与配置文件的优先级规则 - 离线环境与CI/CD场景的最优解 - 基于源码解析的策略工作流程图 ## 镜像拉取策略核心原理 Docker C...

gitblog_00904的博客 1135

假如服务器上没有 Docker 环境,你还能愉快的拉取容器镜像吗?

你是否曾经遇到过需要在没有安装任何 Docker 客户端的机器上拉取容器镜像这样变态的需求呢?如果有,你当时又是如何解决的呢?今天我们就来给大家介绍几种另辟蹊径的方法来实现这样的需求。使用 docker-drag 实现根据官网介绍:docker-drag 是一个用于与 Docker Hub 交互的工具,并且不需 Docker 客户端本身支持。它主要是通过与 Docker Hub 的 HTTPS A...

easylife206的专栏 2148

gh_mirrors/gol/golang完全指南:Docker官方Go镜像零基础入门教程

Docker官方Go镜像(gol/golang)是由Docker社区维护的Docker官方镜像,专为Go语言开发和运行环境提供标准化支持。通过使用Docker官方Go镜像,开发者可以快速搭建一致的Go开发环境,避免因系统差异导致的兼容性问题,同时简化项目的部署流程。 ## 为什么选择Docker官方Go镜像? Docker官方Go镜像具有以下核心优势: - **官方维护**:由Docker社

gitblog_00420的博客 771

docker部署golang web服务

功能 实现通过docker部署golang web服务功能 部署环境 mac10.14.3 docker2.0.0.3 golang1.12.5 实现步骤 1. 新建go web工程 在/Users/admin/go_mod新建go工程,目录名为hellodocker,新建文件main.go package main import ( "fmt" "net/http" ) f...

Golang客栈 2899

AI如何优化Docker镜像拉取速度?

通过开发一个智能工具,可以自动完成以下优化流程:首先检测用户当前的网络环境,然后测试多个公共镜像源的延迟情况,最后根据测试结果推荐最优的镜像源配置。这主要源于几个原因:默认的Docker Hub镜像源在国外、网络环境复杂多变、不同地区的访问速度差异大。在开发过程中,Docker镜像的拉取速度直接影响着我们的工作效率。未来还可以考虑增加更多智能化功能:比如根据时间段自动切换镜像源(应对网络高峰期)、学习用户的使用习惯做预加载、集成到CI/CD流水线中自动优化构建环境等。

ObsidianRaven13的博客 536
上一篇: 手把手教你用 Docker 部署 Red Hat UBI8 镜像
下一篇: Docker 部署 openEuler 教程及常见问题解决
java_logo
博客等级 码龄18年 325粉丝 240原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值