使用 Docker 部署 Go 项目,并把 Docker 镜像发布到镜像仓库

  • Post author:
  • Post category:其他


大家都知道

Go

编译后是可执行的二进制文件,一般我们的项目会部署在

Linux

中,

Docker

也是现在常用的部署方案,伸缩扩容、迁移都更方便。该篇文章教大家使用

Docker

来部署

go

项目,最后把

Docker

镜像发布啊镜像仓库(这里使用阿里云镜像仓库),公司内部一般发布到公司私有镜像仓库,方便其他服务器拉取镜像部署等。



一、安装 Docker


linux

服务器使用

curl

下载快速安装的

shell

脚本

curl -fsSL get.docker.com -o get-docker.sh

下载完成后,可以

ls

命令查看一下。已经存在的话,使用

sh

命令执行这个脚本

sh get-docker.sh

注意如果不是

root

用户,需要使用

sudo su

获取超级管理员权限。

安装完成后启动一下

Docker Server

systemctl start docker

使用

docker version

命令能看到

Client



Server

就启动成功了。



二、使用 Docker 部署 Go 项目

这里我使用一个自己开发的

Gin

项目,首先在项目跟目录下创建一个

Dockerfile

文件

image.png

写入以下内容:

# 指定基础的go编译镜像
FROM golang:alpine as build

# 指定go的环境变量
ENV GOPROXY=https://goproxy.cn \
    GO111MODULE=on \
    CGO_ENABLED=0 \
    GOOS=linux \
    GOARCH=amd64

# 指定工作空间目录,会自动cd到这个目录
WORKDIR /build

# 把项目的依赖配置文件拷贝到容器中,并下载依赖
COPY go.mod .
COPY go.sum .
RUN go mod download

# 把项目的其他所有文件拷贝到容器中
COPY . .

# 编译成可执行二进制文件
RUN go build -o app .

# 指定新的运行环境,最终的运行会基于这个坏境,使得最终的镜像非常小
FROM scratch as deploy

# 把编译环境中打包好的可执行文件和配置文件拷贝到当前镜像
COPY --from=build /build/app /
COPY --from=build /build/conf ./conf

CMD ["/app"]

在项目根目录使用以下命令来构建镜像

docker build -t gotodo .

构建好后使用

docker images

来查看我们打包好的镜像

image.png

最终运行容器:

docker run -itd -p 7000:7000 gotodo



三、上传镜像到镜像仓库

把我们构建好的镜像上传到镜像仓库,方便我们跨服务器部署或伸缩容等,这里我使用阿里云个人免费镜像仓库演示,公司内部一般搭建私有的镜像仓库(与阿里云镜像仓库同理)。

首先去阿里云申请并创建下个人免费镜像仓库,具体申请方法可百度等,很简单。

创建时代码源选择

本地仓库

创建好后如下:

image.png

我们参考

3.将镜像推送到Registry

  1. 首先用

    docker login

    在本地登录
  2. 再使用

    docker tag

    对我们刚才的镜像重新打一个

    tag

image.png

  1. 使用

    docker push

    把重新打好

    tag

    的镜像上传到仓库

image.png

上传完成后可以在阿里云上看到版本等

image.png

最后其他服务器想拉取这个镜像也很简单,直接

docker pull registry.cn-hangzhou.aliyuncs.com/junkaione/gotodo:v1.0.0

运行容器

docker run -itd -p 7000:7000 registry.cn-hangzhou.aliyuncs.com/junkaione/gotodo:v1.0.0

到此,使用 Docker 来部署我们的 Go 项目,及把打包后的镜像上传到镜像仓库的文章就结束了,如果大家有什么疑问,可以评论区留言哈,拜托大家

点赞收藏

一下, 🙏 🙏



版权声明:本文为junkaione原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。