docker部署gin项目

以如下这个简单的项目为例
在这里插入图片描述
创建Dockerfile文件

#指定构建镜像的基础镜像
FROM golang:1.18-alpine
#开发者
MAINTAINER who
# 为我们的镜像设置必要的环境变量
ENV GO111MODULE=on \
    GOPROXY=https://goproxy.cn,direct \
    CGO_ENABLED=0 \
    GOOS=linux \
    GOARCH=amd64

#设置工作目录,后面的RUN,COPY等都基于在这个目录下工作
WORKDIR /goApp

# 复制项目文件到工作目录
COPY . .

# 编译应用程序成二进制文件app
RUN go build -o app

#容器暴露的端口
EXPOSE 8080

#启动容器时运行的命令
CMD ["./app"]

然后通过以下命令构建镜像

docker build -t goWeb:1.0 . 

由于go语言是编译型的语言,只需要将项目编译成一个二进制文件即可运行,不需要还基于golang的环境
所以可以采用分阶段构建镜像,减小打包后的文件大小

#指定构建镜像的基础镜像
FROM golang:1.18-alpine AS builder
#开发者
MAINTAINER who
# 为我们的镜像设置必要的环境变量
ENV GO111MODULE=on \
    GOPROXY=https://goproxy.cn,direct \
    CGO_ENABLED=0 \
    GOOS=linux \
    GOARCH=amd64

#设置工作目录,后面的RUN,COPY等都基于在这个目录下工作
WORKDIR /goApp

# 复制项目文件到工作目录
COPY . .

# 编译应用程序成二进制文件app
RUN go build -o app


###################
# 接下来创建一个小镜像
###################
FROM scratch

WORKDIR /goApp

# 从第一阶段复制二进制文件到当前阶段
COPY --from=builder /goApp/app .

#容器暴露的端口
EXPOSE 8080

#启动容器时运行的命令
CMD ["./app"]

然后通过以下命令构建镜像

docker build -t goWeb:1.1 . 

结果显示
在这里插入图片描述
在这里插入图片描述

如果我这个项目构建的容器需要关联其他如mysql容器该如何做?

需要将项目中关于mysql的主机(127.0.0.1)名改为容器名字。

构建镜像后,通过–link的方式与需要关联的容器关联起来,比如

docker run --link=mysql1:mysql1 -p 8080:8080 goweb:1.1

在windows上构建的镜像如何发布到服务器上运行?

可以将镜像发布到云仓库,然后在服务器上又将仓库中的镜像拉取下来运行
这个可以通过阿里云的镜像服务完成,具体看阿里云的镜像服务操作

参考文献:
1 https://www.bilibili.com/video/BV1tX4y1F7Xj/?spm_id_from=333.337.search-card.all.click&vd_source=b65afe73c2248cf649cdaa19490e01ed
2 https://www.liwenzhou.com/posts/Go/deploy-in-docker/

猜你喜欢

转载自blog.csdn.net/qxjswl/article/details/131145478