如何在Docker容器中运行一个Go应用程序?

在Docker容器中运行一个Go应用程序,可以通过以下步骤进行:

  1. 编写Go应用程序:
go
package main

import (
    "fmt"
    "net/http"
)

func hello(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintln(w, "Hello World!")
}

func main() {
    http.HandleFunc("/", hello)
    http.ListenAndServe(":8000", nil)
}
  1. 构建Dockerfile:
Dockerfile
FROM golang:1.15-alpine as builder
WORKDIR /app
COPY . .
RUN go build -o main .

FROM alpine:3.12  
WORKDIR /app
COPY --from=builder /app/main .
ENTRYPOINT ["./main"]  

此Dockerfile采用多阶段构建。第一阶段基于golang:1.15-alpine构建应用程序,第二阶段基于alpine:3.12仅复制构建好的二进制文件,指定其为入口点。

  1. 构建镜像:
docker build -t go-app . 
  1. 运行容器:
docker run -p 8000:8000 -d go-app

此命令在后台运行容器,并映射8000端口。

  1. 访问应用:
    打开http://localhost:8000可以访问Go应用。
  2. 在Docker Compose中定义应用:
yaml
version: '3' 
services:
  go-app:
    build: . 
    image: go-app  
    ports:  
      - "8000:8000"
docker-compose up  

可以一键启动应用。