构建HTTPS服务镜像

1、创建目录

root@localhost \~# mkdir demo5

root@localhost \~# cd demo5

2、编写main.go

root@localhost demo5# vim main.go

文件内容如下:

package main

import (

"log"

"net/http"

)

func main() {

http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {

w.Write(\[\]byte("Hello, HTTPS!\n"))

})

log.Println("Server running on https://localhost:443")

err := http.ListenAndServeTLS(":443", "/etc/ssl/certs/server.crt",

"/etc/ssl/private/server.key", nil)

if err != nil {

log.Fatal("ListenAndServeTLS: ", err)

}

}

3、编写go.mod

root@localhost demo5# vim go.mod

文件内容如下:

复制代码
module github.com/yourusername/go-https-server
​
go 1.21
​
require (
        golang.org/x/crypto v0.14.0 // indirect
        golang.org/x/net v0.17.0 // indirect
        golang.org/x/sys v0.13.0 // indirect
)

4、编写go.sum

复制代码
[root@localhost demo5]# vim go.sum

文件内容如下:

复制代码
golang.org/x/crypto v0.14.0 h1:wBqGXzWJW6m1XrIKlAH0Hs1JJ7+9KBwnIO8v66Q9cHc=
golang.org/x/crypto v0.14.0/go.mod
h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4=
golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM=
golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE=
golang.org/x/sys v0.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE=
golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=

5、编写Dockerfile

复制代码
[root@localhost demo5]# vim Dockerfile

文件内容如下::

复制代码
FROM golang:1.21-alpine AS builder
​
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories
ENV GOPROXY=https://goproxy.cn,direct
​
RUN apk add --no-cache git make openssl
​
WORKDIR /app
​
COPY go.mod go.sum .
RUN go mod download
​
COPY . .
​
RUN CGO_ENABLED=0 GOOS=linux go build -ldflags="-w -s" -o app
​
RUN openssl req -x509 -newkey rsa:4096 -sha256 -days 3650 -nodes \
    -keyout server.key -out server.crt -subj "/CN=localhost" \
    -addext "subjectAltName=DNS:localhost,IP:127.0.0.1"
​
​
FROM alpine:3.23
​
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories
​
RUN apk add --no-cache ca-certificates tzdata
​
RUN addgroup -S appgroup && adduser -S appuser -G appgroup
​
COPY --from=builder /app/app /usr/local/bin/app
COPY --from=builder /app/server.crt /etc/ssl/certs/
COPY --from=builder /app/server.key /etc/ssl/private/
​
RUN chown appuser:appgroup /usr/local/bin/app && \
    chmod 755 /usr/local/bin/app && \
    chmod 644 /etc/ssl/certs/server.crt && \
    chmod 644 /etc/ssl/private/server.key
​
WORKDIR /home/appuser
USER appuser
​
EXPOSE 443
​
HEALTHCHECK --interval=30s --timeout=3s \
   CMD wget --no-check-certificate -qO- https://localhost/healthz || exit 1
​
ENTRYPOINT ["app", "--cert", "/etc/ssl/certs/server.crt", "--key", "/etc/ssl/private/server.key"]

6、编写.dockerignore

复制代码
[root@localhost demo5]# vim .dockerignore

文件内容如下:

复制代码
Dockerfile

7、目录结构

复制代码
[root@localhost demo5]# ls -a
.  ..  Dockerfile  .dockerignore  go.mod  go.sum  main.go

8、构建镜像

复制代码
[root@localhost demo5]# docker build -t https-server:1.0 .

9、查看镜像

复制代码
[root@localhost demo5]# docker images  

10、运行容器

复制代码
[root@localhost demo5]# docker run --rm --name hs -d -p 443:443 https-server:1.0

[root@localhost demo5]# docker ps

11、访问测试

复制代码
[root@localhost demo5]# curl -k https://localhost
Hello, HTTPS!
相关推荐
张龙68716 小时前
Docker 镜像瘦身实战:从 1.2GB 到 128MB,我踩过的 7 个坑和一套可复制的方法论
运维·后端·docker
zero_703216 小时前
HCIP 课程文字版思维导图笔记
服务器·网络·php
外滩运维专家17 小时前
Nginx 上的通配符证书 90 天到期,续签这事我是这么搞的
运维
科技新资讯17 小时前
国内AI影视制作服务商哪家口碑好
运维·人工智能·devops
jufeng130718 小时前
【系列:MiniKV 原理剖析 · 第 6 篇】
linux·软件工程·个人开发·makefile
IT摆渡者19 小时前
ubuntu系统网络问题
linux·运维·ubuntu
jufeng130719 小时前
【系列:MiniKV 原理剖析 · 第 5 篇】
linux·网络·c++·软件工程
kdxiaojie19 小时前
Linux 驱动研究 —— SDIO (1)
linux·运维·笔记·学习·sdio
ZzzZZzzzZZZzzzz…19 小时前
K8S实战:NFS+StorageClass+PV/PVC+Deployment
运维·云原生·容器·kubernetes·storageclass·linux运维·持久卷