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

相关推荐
lwx9148523 小时前
Linux-特殊权限SUID,SGID,SBIT
linux·运维·服务器
皮卡狮4 小时前
Linux权限的概念
linux
炘爚4 小时前
深入解析printf缓冲区与fork进程复制机制
linux·运维·算法
workflower5 小时前
注塑机行业目前自动化现状分析
运维·人工智能·语言模型·自动化·集成测试·软件工程·软件需求
小义_5 小时前
随笔 3(Linux)
linux·运维·服务器·云原生·红帽
#六脉神剑5 小时前
MySQL参数调优:十个关键参数助力数据库性能数倍提升
运维·mysql
cccccc语言我来了6 小时前
Linux(10)进程概念
linux·运维·服务器
伐尘6 小时前
【linux】查看空间(内存、磁盘、文件目录、分区)的几个命令
linux·运维·网络
Deitymoon6 小时前
linux——PV操作
linux
倔强的胖蚂蚁6 小时前
x2openEuler 辅助机完整部署教程
运维·云原生