docker使用教程之部署第一个go项目

一、go代码

go 复制代码
package main

import (
	"fmt"
	"net/http"
)

func handler(w http.ResponseWriter, r *http.Request) {
	fmt.Fprintf(w, "Hello Docker!")
}

func main() {
	http.HandleFunc("/", handler)
	fmt.Println("Server running on http://127.0.0.1:8080")
	http.ListenAndServe(":8080", nil)
}

二、Dockerfile文件

bash 复制代码
# 使用官方 Go 镜像作为构建环境


FROM golang:1.25.5 AS builder

# 设置代理
#ARG HTTP_PROXY=http://192.168.1.163:7890
#ARG HTTPS_PROXY=http://192.168.1.163:7890
#ENV HTTP_PROXY=${HTTP_PROXY}
#ENV HTTPS_PROXY=${HTTPS_PROXY}


# 设置工作目录
WORKDIR /app

# 复制 go.mod 和 go.sum,先下载依赖
#COPY ../go.mod go.sum ./
COPY go.mod ./
RUN go mod download

# 复制项目代码
COPY . .

# 编译 Go 程序,生成可执行文件 app   *注意:Go 程序 + Alpine = 必须 CGO_ENABLED=0
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o app


# 使用最小镜像运行程序
FROM alpine:3.17
WORKDIR /app

# 复制编译好的可执行文件
COPY --from=builder /app/app .

# 容器启动时执行 app
CMD ["./app"]

# 容器暴露端口
EXPOSE 8080

三、执行命令

创建go项目镜像,镜像名:my_hello_world

bash 复制代码
docker build -t my_hello_world .

查看镜像列表

bash 复制代码
docker images

创建项目镜像的容器,并运行,-d后台运行,-p端口容器:本机

bash 复制代码
docker run -d  -p 8081:8080 a0fabfbbaf94(镜像id) 

查看容器列表

bash 复制代码
docker ps   # 查看在运行的
docker ps   # 查看创建的

四、其他命令

bash 复制代码
docker start 容器id  # 开始容器
docker exec -it 容器id  /bin/sh # 进入容器
docker stop 容器id  # 停止容器
docker rm 容器id  # 删除容器

docker rmi 镜像id  # 删除镜像
相关推荐
圣殿骑士-Khtangc19 分钟前
Go错误处理最佳实践进阶从error到panic的完整指南
golang
运维开发笔记1 小时前
3.6 Go defer 语句学习笔记
golang
云川之下1 小时前
【k8s】Docker inspect 命令
docker·容器·kubernetes
猫吃了源码2 小时前
CentOS7使用Kubeadm安装部署K8s(Kubernetes)最新稳定版本1.26.x
云原生·容器·kubernetes
存在morning2 小时前
【Python 开发实践 一】Python vs Go vs Java 三门语言对比
java·python·golang
倔强的石头1063 小时前
飞牛OS部署Mtab:Docker搭建自托管书签导航并实现远程访问
运维·docker·容器
张忠琳3 小时前
【k3s】AutoK3s v0.9.3 —— Part 7 辅助模块超深度逐行分析
云原生·容器·kubernetes·k3s·autok3s
张忠琳12 小时前
【k3s】AutoK3s v0.9.3 Part 1 入口与 CLI 命令模块 — 超深度逐行分析之三
云原生·容器·kubernetes·k3s·autok3s
圣殿骑士-Khtangc14 小时前
Go字符串高效拼接性能对比与底层原理分析
服务器·前端·golang
apgk118 小时前
基于Canal实现mysql数据同步到消息队列(RabbitMQ/Kafka)详细操作教程
docker·kafka·rabbitmq