使用 Docker 初始化、甲骨文云基础设施容器注册表和甲骨文 Kubernetes 引擎:在 15 分钟内从空文件夹到生产环境

发布日期:2026-06-24 10:01:10   浏览量 :4
发布日期:2026-06-24 10:01:10  
4

我给自己计时。从一个空目录和一个 Go 应用程序的想法开始,我需要多快才能在 OKE 上获得一个正在运行的部署?答案是 14 分钟。docker init 完成的工作比我预期的要多。

docker init 的作用

如果你还没有使用过它,docker init 是内置于 Docker 命令行界面中的一个交互式脚手架工具。你在项目目录中运行它,它会为你的语言生成一个优化过的 Dockerfile、.dockerignore 和 docker-compose.yml。

mkdir oci-api && cd oci-api
go mod init github.com/pmady/oci-api

# 编写一个简单的 API
cat > main.go << 'EOF'
package main

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

func main() {
    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
        fmt.Fprintf(w, "running on %s", os.Getenv("OCI_REGION"))
    })
    http.HandleFunc("/health", func(w http.ResponseWriter, r *http.Request) {
        w.WriteHeader(200)
    })
    log.Fatal(http.ListenAndServe(":8080", nil))
}
EOF

现在是神奇的部分:

$ docker init

欢迎使用 Docker Init 命令行界面!

? 你的项目使用什么应用程序平台? Go
? 你想使用哪个版本的 Go? 1.22
? 你的主包的相对目录是什么? .
? 你的服务器监听哪个端口? 8080

它生成了三个文件:

Dockerfile — 多阶段构建,无发行版基础镜像,非根用户。实际上是不错的默认设置。我见过团队手写的 Dockerfile 比这更糟糕。

compose.yaml — 带有端口映射和环境变量的基本设置。

.dockerignore — 排除 .git、二进制文件和 vendor 目录。很合理。

生成的 Dockerfile 看起来像这样(稍微简化):

FROM golang:1.22 AS build
WORKDIR /src
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN CGO_ENABLED=0 go build -o /bin/server .

FROM gcr.io/distroless/static-debian12:nonroot
COPY --from=build /bin/server /bin/
EXPOSE 8080
USER nonroot:nonroot
ENTRYPOINT ["/bin/server"]

多阶段、静态二进制、无发行版、非根用户。我自己也会写几乎相同的东西。我唯一做的改变是添加 -ldflags="-s -w" 以剥离调试符号并缩小二进制文件。

第 0-5 分钟:本地构建和测试

docker compose up --build

# 在另一个终端中
curl localhost:8080
# 运行于

免责声明:本文内容来自互联网,该文观点不代表本站观点。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请到页面底部单击反馈,一经查实,本站将立刻删除。

关于我们
热门推荐
合作伙伴
免责声明:本站部分资讯来源于网络,如有侵权请及时联系客服,我们将尽快处理
Copyright © 2025-2027 ToB产业网址导航 公安备案 浙公网安备33010602013138号 浙ICP备16025413号-9
支持 反馈 关注 数据