构建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!
相关推荐
三十..10 分钟前
MySQL 从入门到高可用架构实战精要
运维·数据库·mysql
跨境数据猎手1 小时前
大数据在电商行业的应用
大数据·运维·爬虫
linyanRPA2 小时前
影刀RPA店群自动化实战:多店铺活动自动报名与促销管理架构设计
运维·自动化·办公自动化·rpa·python脚本·爬虫自动化·店群自动化
mounter6252 小时前
现代 Linux 内存管理的演进与变革:从传统 LRU 到多代架构 MGLRU
linux·服务器·kernel
会Tk矩阵群控的小木2 小时前
安卓群控系统对于游戏工作室实战教程
android·运维·游戏·adb·开源软件·个人开发
赵渝强老师2 小时前
【赵渝强老师】Kubernetes(K8s)中的金丝雀升级
linux·docker·云原生·容器·kubernetes
佛山个人技术开发3 小时前
GitCode SSH连接配置教程
运维·ssh·gitcode
Qt程序员3 小时前
Linux RCU 原理与应用
linux·c++·内核·linux内核·rcu
The Sheep 20233 小时前
Vue复习
linux·服务器·数据库
兄台の请冷静3 小时前
Linux 安装es
linux·elasticsearch·jenkins