Go入门笔记:Docker部署Go应用

1,824 阅读1分钟

1 基本RPC

1.1 server.go

这里使用net/rpc官包,只提供一个求和服务,监听8888端口

package main
import (
    "log"
    "net"
    "net/rpc"
)
type Math struct {}
type MathRequest struct{
    A int
    B int
}
func (p *Math) Sum(request MathRequest, response *int) error {
    *response = request.A + request.B
    return nil
}
func main(){
    rpc.RegisterName("Sum", new(Math))

    listener, err := net.Listen("tcp", "0.0.0.0:8888")
    if(err != nil){
        log.Fatal("ListenTCP error:", err)
    }

    for {
        socket, err := listener.Accept()
        if(err != nil){
            log.Fatal("Accept error:", err)
        }
        go rpc.ServeConn(socket)
    }
}

1.2 client.go

package main
import (
	"net/rpc"
	"log"
	"fmt"
)
type MathRequest struct{
	A int
	B int
}
func main(){
	client, err := rpc.Dial("tcp", "192.168.27.128:8888")
	if(err != nil){
		log.Fatal("Dial failed", err)
	}
	var sum int
	err = client.Call("Sum.Sum", MathRequest{1, 5} ,&sum)
	if(err != nil){
		log.Fatal("Call failed", err)
	}
	fmt.Println("sum:", sum)//sum: 6
}

2 Docker部署服务端

2.1 编写Dockerfile

WORKDIR $GOPATH/mydata/server
COPY . $GOPATH/mydata/server
RUN go build server.go
EXPOSE 8888
ENTRYPOINT ./server

2.2 docker build

docker build -t docker-go-rpc-server:0.1 .
Sending build context to Docker daemon  3.584kB
Step 1/6 : FROM golang:latest
 ---> 3abbb425095a
Step 2/6 : WORKDIR $GOPATH/mydata/server
 ---> Using cache
 ---> b7c327a56810
Step 3/6 : COPY . $GOPATH/mydata/server
 ---> fa9218a83c0b
Step 4/6 : RUN go build server.go
 ---> Running in d27a7d174c07
Removing intermediate container d27a7d174c07
 ---> 949e84a5fec2
Step 5/6 : EXPOSE 8888
 ---> Running in 0cd1b35f0fa7
Removing intermediate container 0cd1b35f0fa7
 ---> 7535aba18289
Step 6/6 : ENTRYPOINT ["./server"]
 ---> Running in 863fada04827
Removing intermediate container 863fada04827
 ---> a868c6c4bd67
Successfully built a868c6c4bd67
Successfully tagged docker-go-rpc-server:0.1

2.3 docker run

docker run -d -p 8888:8888 --name migo docker-go-rpc-server:0.1

docker ps -a

CONTAINER ID   IMAGE                      COMMAND                  CREATED         STATUS         PORTS                                       NAMES
6d8ba7ff331e   docker-go-rpc-server:0.1   "./server"               8 seconds ago   Up 7 seconds   0.0.0.0:8888->8888/tcp, :::8888->8888/tcp   migo