构建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! ```

相关推荐
8125035332 小时前
第2篇:为什么要有分层?从工程实践到架构设计
linux·网络·网络协议·计算机网络
hhzz2 小时前
云服务器ECS的高可用部署方案----弹性公网IP和负载均衡的操作
服务器·tcp/ip·负载均衡·ecs·云服务器
饮长安千年月2 小时前
一带一路暨金砖国家技能发展与技术创新大赛网络安全防护与治理-Linux应急响应手册
linux·运维·web安全·ctf·应急响应
济6172 小时前
ARM Linux 驱动开发篇--- 设备树下的 LED 驱动实验-- Ubuntu20.04
linux·嵌入式·嵌入式linux驱动开发
济6172 小时前
ARM Linux 驱动开发篇---Linux 设备树之查找节点的 OF 函数-- Ubuntu20.04
linux·嵌入式·嵌入式linux驱动开发
奇特認2 小时前
LVS(Linux virual server)四层负载均衡实验
linux·运维·lvs
cyber_两只龙宝2 小时前
Keepalived+LVS--实现IPVS的高可用+高性能的双主双业务架构详细配置流程及解析
linux·运维·集群·lvs·高性能·keepalived·高可用
吕司2 小时前
Linux——System V 共享内存
linux·运维·服务器
芥子沫3 小时前
Windows 命令行和 Linux 差在哪里?
linux·命令行