构建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!
相关推荐
未济13 小时前
linux 配置环境变量
linux
傲世仙尊13 小时前
目录即文件-Ext文件系统收尾篇
linux·c语言
虎头金猫13 小时前
4K 视频总卡在公网带宽?用 N1 + OpenList 把网盘播放链路重新理顺
运维·服务器·网络·python·容器·beautifulsoup·pandas
_艾伦 耶格尔.15 小时前
进程间通信
linux
AI职业加油站15 小时前
AI智能体应用工程师证书:政策红利下的职业新风口
大数据·运维·人工智能·学习·职场发展
Liuqy-0515 小时前
Linux IO编程——静态库、动态库
linux
此冬歌咏16 小时前
K8s 节点故障实战:优雅驱逐 31 秒,硬故障 331 秒,以及那个永远 Pending 的 Pod
运维·k8s
彧azz16 小时前
Linux 环境下 Redis 学习总结:数据类型、持久化、锁、事务、主从与缓存问题
linux·redis·笔记·学习·面试
-梅16 小时前
linux(8) 软硬链接
linux·运维·服务器
Wang's Blog17 小时前
Java 项目实战: 外卖平台-文件下载与ServletOutputStream回写浏览器
服务器·项目开发