- docker
docker run -d --name readmore -p 8080:8080 snowdreams1006/readmore-server
- docker-compose
mkdir readmore-server && cd readmore-server
curl -sL https://raw.githubusercontent.com/snowdreams1006/readmore-server/master/docker-compose.yaml > docker-compose.yaml
docker-compose up -d
- 根据平台下载可执行文件,见下载页面 page
- 赋予二进制命令可执行权限 :
chmod +x readmore-server
- 启动服务器 :
./Bark_linux_amd64 -l 0.0.0.0 -p 8080
- 测试服务器 :
curl localhost:8080/ping
Ping成功后,在APP端填入你的服务器IP或域名
项目至少要求 golang 1.12
编译并且要求 go module
支持.
- Golang 1.13
- GoLand 2018.3.4 or other Go IDE
- Docker(Optional)
- 在当前目录新建
main.go
文件且文件内容如下:
package main
import (
"fmt"
"net/http"
)
func main() {
http.HandleFunc("/", func(writer http.ResponseWriter, request *http.Request) {
fmt.Fprint(writer, "Welcome to readmore.snowdreams1006.cn! \n")
})
http.ListenAndServe(":8080",nil)
}
- 在当前目录下打开终端,输入
go run main.go
命令启动本地服务
go run main.go
除了直接启动服务之外,还可以输入 go build -o readmore-server main.go
在当前目录下生成可执行文件,后续运行 ./readmore-server
命令即可启动本地服务.
- 在任意目录下打开终端,输入
curl localhost:8080
命令测试本地服务
curl localhost:8080
或者打开浏览器直接访问 localhost
网址也会得到 Welcome to readmore.snowdreams1006.cn!
的响应.
- 如需停止本地服务,在上一步启动项目的终端同时按住
Ctrl + C
即可停止.
- 在当前目录下新建
Dockerfile
文件且文件内容如下:
FROM golang:1.13.1-alpine3.10
RUN mkdir -p /go/src/github.com/snowdreams1006/readmore-server
COPY . /go/src/github.com/snowdreams1006/readmore-server
WORKDIR /go/src/github.com/snowdreams1006/readmore-server
RUN go build -o readmore-server main.go
CMD /go/src/github.com/snowdreams1006/readmore-server/readmore-server
- 在当前目录下打开终端,输入
docker build -t snowdreams1006/readmore-server:v0.0.1 .
命令构建本地镜像
docker build -t YOURUSERNAME/readmore-server:v0.0.1 .
请确保本地已安装
docker
环境,如果输入docker
命令提示-bash: docker: command not found
则表示未安装docker
环境,请参考docker-for-mac完成安装.
- 在任意目录下打开终端,输入
docker run --rm -d --name readmore-server -p 80:80 snowdreams1006/readmore-server:v0.0.1
命令测试本地镜像
docker run --rm -d --name readmore-server -p 80:80 YOURUSERNAME/readmore-server:v0.0.1
- 在任意目录下打开终端,输入
curl localhost:8080
命令测试本地服务
curl localhost:8080
或者打开浏览器直接访问 localhost:8080
网址也会得到 Welcome to readmore.snowdreams1006.cn!
响应.
- 如需停止本地服务,在上一步启动项目的终端输入
docker stop readmore-server
命令即可停止容器.
docker stop readmore-server
- 登录 dockerhub
docker login
- 推送镜像
docker push snowdreams1006/readmore-server:v0.0.1
docker push YOURUSERNAME/readmore-server:v0.0.1
- 搜索镜像
docker search readmore-server
或者打开 dockerhub
网站直接搜索 readmore-server
验证是否发布成功,体验地址
实际发现运行 docker pull snowdreams1006/readmore-server:v0.0.1
命令下载镜像的文件大小将近 400Mb
,毕竟只是一个简单的 Web
服务不能这么大,因此需要优化一下.
- 增加精简版
alpine
镜像
FROM golang:1.13.1-alpine3.10 AS builder
RUN mkdir -p /go/src/github.com/snowdreams1006/readmore-server
COPY . /go/src/github.com/snowdreams1006/readmore-server
WORKDIR /go/src/github.com/snowdreams1006/readmore-server
RUN go build -o readmore-server main.go
FROM alpine:3.10
COPY --from=builder /go/src/github.com/snowdreams1006/readmore-server/readmore-server /usr/local/bin/readmore-server
CMD readmore-server
- 再次构建
docker build -t YOURUSERNAME/readmore-server:v0.0.2 .
- 再次推送
docker push YOURUSERNAME/readmore-server:v0.0.2
- 再次体验
docker run --rm -d --name readmore-server -p 8080:8080 YOURUSERNAME/readmore-server:v0.0.2
docker run --rm -d --name readmore-server -p 8080:8080 snowdreams1006/readmore-server:v0.0.2
瞬间从之前的近 400Mb
精简到现在的 10Mb
左右,不可谓不成功!
main.go
文件增加日志输出
package main
import (
"fmt"
"log"
"net/http"
"time"
)
func main() {
go func() {
for {
time.Sleep(time.Second)
log.Println("Checking if started ...")
resp, err := http.Get("http://localhost:8080")
if err != nil {
log.Println("Failed: ", err)
continue
}
resp.Body.Close()
if resp.StatusCode != http.StatusOK {
log.Println("Not OK:", resp.StatusCode)
continue
}
break
}
log.Println("Server is up and running , http://localhost:8080")
}()
log.Println("Starting server ...")
http.HandleFunc("/", func(writer http.ResponseWriter, request *http.Request) {
fmt.Fprint(writer, "Welcome to readmore.snowdreams1006.cn! \n")
})
if err := http.ListenAndServe(":8080", nil); err != nil {
log.Fatal("readmore-server started failed: ", err)
}
}
Dockerfile
文件增加作者信息
FROM golang:1.13.1-alpine3.10 AS builder
COPY . /go/src/github.com/snowdreams1006/readmore-server
WORKDIR /go/src/github.com/snowdreams1006/readmore-server
RUN go install
FROM alpine:3.10
LABEL maintainer="snowdreams1006 <snowdreams1006@163.com>"
COPY --from=builder /go/bin/readmore-server /usr/local/bin/readmore-server
EXPOSE 8080
CMD readmore-server
- 配置自动构建
- docker-compose
version: '3.7'
services:
bark-server:
image: snowdreams1006/readmore-server
container_name: readmore-server
restart: always
ports:
- "8080:8080"
- Makefile
BUILD_VERSION := $(shell cat version)
all:
gox -osarch="darwin/amd64 linux/386 linux/amd64" \
-output="dist/{{.Dir}}_{{.OS}}_{{.Arch}}" \
-ldflags "-w -s"
docker:
docker build -t snowdreams1006/readmore-server:${BUILD_VERSION} .
clean:
rm -rf dist
install:
go install
.PHONY : all release docker clean install
- go mod
go mod init
BUILD_VERSION := $(shell cat version)
all:
gox -osarch="darwin/amd64 linux/386 linux/amd64" \
-output="dist/{{.Dir}}_{{.OS}}_{{.Arch}}" \
-ldflags "-w -s"
docker:
docker build -t snowdreams1006/readmore-server:${BUILD_VERSION} .
clean:
rm -rf dist
install:
go install
.PHONY : all release docker clean install
.EXPORT_ALL_VARIABLES:
GO111MODULE = on
GOPROXY = https://goproxy.io
GOSUMDB = sum.golang.google.cn
FROM golang:1.13.1-alpine3.10 AS builder
ENV GO111MODULE on
ENV GOPROXY https://goproxy.io
ENV GOSUMDB sum.golang.google.cn
COPY . /go/src/github.com/snowdreams1006/readmore-server
WORKDIR /go/src/github.com/snowdreams1006/readmore-server
RUN go install
FROM alpine:3.10
LABEL maintainer="snowdreams1006 <snowdreams1006@163.com>"
RUN apk upgrade \
&& apk add ca-certificates
COPY --from=builder /go/bin/readmore-server /usr/local/bin/readmore-server
EXPOSE 8080
CMD ["readmore-server"]
删除未命名的进行
docker rmi $(docker images | grep '<none>' | awk '{print $3}')
docker rmi $(docker images -f "dangling=true" -q)