1. 安装Docker on Ubuntu
在Ubuntu上使用Docker容器化Golang应用的第一步是安装Docker。打开终端,执行以下命令:
sudo apt update
sudo apt install docker.io -y
sudo systemctl start docker
sudo systemctl enable docker
安装完成后,通过docker --version验证安装是否成功(应输出Docker版本信息)。
2. 创建Golang项目
创建一个新目录作为项目根目录,并进入该目录:
mkdir my-golang-app && cd my-golang-app
创建一个简单的main.go文件(以HTTP服务器为例):
package main
import (
"fmt"
"net/http"
)
func handler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello, World!")
}
func main() {
http.HandleFunc("/", handler)
http.ListenAndServe(":8080", nil)
}
保存文件后,可通过go run main.go在本地运行测试(应输出`Hello, World!”)。
3. 编写Dockerfile
在项目根目录下创建Dockerfile(无文件扩展名),内容如下(推荐使用多阶段构建优化镜像大小):
# 构建阶段:使用官方Golang镜像(带版本号,如1.23-alpine轻量版)
FROM golang:1.23-alpine AS builder
WORKDIR /app
# 复制go.mod和go.sum文件(提前下载依赖,利用Docker缓存)
COPY go.mod go.sum ./
RUN go mod download
# 复制项目源代码
COPY . .
# 编译应用(输出二进制文件到/app目录)
RUN go build -o my-golang-app .
# 最终阶段:使用scratch(无操作系统)或alpine(极小镜像)作为基础镜像
FROM alpine:latest
WORKDIR /root/
# 从构建阶段复制编译好的二进制文件
COPY --from=builder /app/my-golang-app .
# 暴露应用端口(若需外部访问)
EXPOSE 8080
# 定义容器启动命令
CMD ["./my-golang-app"]
说明:
golang镜像编译代码,第二阶段使用alpine镜像运行,大幅减小最终镜像体积(从几百MB降至几MB)。go.mod和go.sum提前复制:利用Docker缓存机制,避免每次修改代码都重新下载依赖。4. 构建Docker镜像
在项目根目录下执行以下命令,构建Docker镜像(-t指定镜像名称,.表示Dockerfile在当前目录):
docker build -t my-golang-app .
构建过程中,终端会显示每一阶段的执行日志(如下载依赖、编译代码)。构建成功后,通过docker images查看镜像列表(应包含my-golang-app)。
5. 运行Docker容器
使用以下命令运行容器(-p将容器的8080端口映射到主机的8080端口,--name指定容器名称):
docker run -d -p 8080:8080 --name my-golang-container my-golang-app
参数说明:
-d:后台运行容器(守护进程模式)。-p 8080:8080:将主机的8080端口映射到容器的8080端口(外部通过localhost:8080访问应用)。--name:为容器指定易记的名称(便于后续管理)。6. 验证部署
打开浏览器或使用curl命令访问http://localhost:8080,应看到输出Hello, World!”。若使用curl`,终端会显示:
$ curl http://localhost:8080
Hello, World!
至此,Golang应用已成功通过Docker在Ubuntu上运行。
7. 常用Docker命令
docker psdocker stop my-golang-containerdocker start my-golang-containerdocker rm my-golang-containerdocker rmi my-golang-appdocker logs my-golang-container(用于调试)。