首页 > 其他分享 >Docker一键部署Golang项目

Docker一键部署Golang项目

时间:2022-12-27 13:11:46浏览次数:30  
标签:一键 代码 goproject Golang usr go Docker local 我们

Docker部署go项目
首先我们把我们写的go项目通过Xftp传到服务器上面,或者通过git从Coding里面拉取一份 ,未来方便起见我是把我的所有的go项目都放在了/usr/local/goproject目录下面。

阿里云服务器安装git
首先在服务器上面安装git ,阿里云服务器安装git很简单

yum install git #安装git
git version #查看Git的版本
通过Dockerfile文件打包镜像
git安装完成,代码放在服务器上面之后,我们就可以通过代码中的Dockerfile文件构建一个镜像

首先把目录切换到Dockerfile所在的目录下面,直接执行下面的命令

docker build -f Dockerfile -t 镜像名 .
值得一提的是,Dockerfile文件官方推荐的名字是Dockerfile,如果是Dockerfile的话,我们可以省略-f参数 ,另外,后面的 . 是一定不能少的

 

当看到下方的Successfully 就代表成功构建了一个镜像,有了镜像,我们就可以通过镜像启动容器了,接下来我们详细看一下我们的Dockerfile文件

FROM golang:alpine
# 为我们的镜像设置必要的环境变量
ENV GO111MODULE=on \
CGO_ENABLED=0 \
GOOS=linux \
GOARCH=amd64\
GOPROXY=https://goproxy.cn
# 设置/usr/local/goproject,进入容器就会直接进入到这个目录下,而不是进入到默认根目录下面
WORKDIR /usr/local/goproject
# 复制项目中的 go.mod 和 go.sum文件并下载依赖信息
COPY go.mod .
COPY go.sum .
RUN go mod tidy

# 将代码复制到容器中
COPY . .

通过镜像运行容器
docker run -it -v /usr/local/goproject:/usr/local/goproject -v /etc/localtime:/etc/localtime -p 8080:8080 --cap-add SYS_TIME --name ding_1.0 ding_1.0 /bin/sh
其中 -v 是挂载,挂载就是把服务器宿主机和容器中的保持一致,我们容器里面有一个项目的代码,服务器宿主机上面也有一份代码,应该保持一致,这样的话,我们改变其中一个地方的代码,另外一个地方的代码也会随之改变。

第一个/usr/local/goproject 是我们服务器宿主机放golang代码的地方,后面第二个/usr/local/goproject 是我们容器中放代码的地方,为了方便起见,我把目录都起得一样。后面的/etc/localtime也是一样,这个是为了让我们的容器的时间和服务器宿主机的时间保持一致。

-p是端口映射,我们的阿里云服务器一定要开放8080端口

-cap-add SYS_TIME 是赋予了容器可以修改时间的权限

这样,我们就启动了一个容器,现在的话,我们直接进入到容器内部

docker exec -it ding1.0 sh #注意我们此处不能使用bash,因为我们使用的基础镜像是golang:alpine


可以看到,我们进入容器的默认位置就在/usr/local/goproject中,这是因为我们设置镜像的时候,我们的workdir就是/usr/local/goproject

我们进入到项目的目录下面,可以看到这就是我们的代码

 

我们可以看到main.go 文件,我们可以直接编译main.go

go build -o ding main.go# -o 参数可以让我们制定编译成具体的名字,而不是编译成main
当编译完成之后,我们就可以看到我们的目录下面有一个绿色的ding文件,这个文件就是可以直接运行的二进制文件

现在我们来运行这个文件

nohup /usr/local/goproject/ding_server/ding> start.log 2>&1 &
# nohup表示不挂断地运行命令,也就是你即便关掉终端,依然不会终止
# > start.log 将结果输出到start.log中
后面的 2>&1 & 我也不懂,把其他人的解读复制过来
# 2>&1,2是标准错误,1是标准输出,就是把错误结果打印出来,&1是就是对标准输出的引用
# 最后的&是是把该命令以后台的job的形式运行,可以通过jobs -l命令来查看当前的所有job
好了,至此我们的项目就已经部署好了,我们在本地的golang里面写好代码后,推送到Coding上面,经过管理员合并代码之后,我们就可以拉去新的代码了。

还记得吗?我们项目的代码再服务器的/usr/local/goproject下面,我们进到这个目录下面

然后进入项目目录ding-server下面,该目录下面是有一个隐藏的 .git文件,我们可以直接在此处拉取代码

git pull origin develop

标签:一键,代码,goproject,Golang,usr,go,Docker,local,我们
From: https://www.cnblogs.com/python9090/p/17007855.html

相关文章

  • docker技术原理
    一、docker技术原理简介    集装箱这是现实生活中大家都熟知的,它的主要作用就是存放货物,彼此独立开来,相互隔离。docker也是运用了集装箱思想,可以把我们工作中常用......
  • go-zero一键生成 Go, iOS, Android, Kotlin, Dart, TypeScript, JavaScript 代码,并可
    go-zero是一个集成了各种工程实践的web和rpc框架。通过弹性设计保障了大并发服务端的稳定性,并经受了充分的实战检验(好未来-晓黑板)。go-zero包含极简的API定义......
  • Dockerfile构建镜像(八)
    一、构建镜像现在让我们再回到之前定制的nginx镜像的Dockerfile来。现在我们明白了这个Dockerfile的内容,那么让我们来构建这个镜像吧。在Dockerfile文件所在目录......
  • 清理docker占用硬盘空间
    1、sudo df-lh 查看磁盘空间占用  查看overlay文件sudolsoverlay2    查看容器占用大小docker ps-s  查看长容器id sudodockerps--no-trunc......
  • Dockerfile相关(推送镜像?私有仓库?)(九)
    上面我们讲到了Dockerfile的基本写法以及构建镜像的时候一些注意事项,那么镜像构建完成后,如何把我们的镜像给到别人使用呢?第一种方法就是利用Docker官方提供的公共的D......
  • Docker数据共享与持久化(六)
    接下来介绍如何在Docker内部以及容器之间管理数据,在容器中管理数据主要有两种方式:数据卷(DataVolumes)挂载主机目录(Bindmounts)一、数据卷数据卷是一个可供一......
  • Docker基本操作(端口?网络模式?)(五)
    一、端口暴露Docker容器更多情况下是用来运行Web应用的,所以要如何访问到容器中的Web服务呢?比如我们现在运行一个nginx容器服务:$dockerrun--namewebserver-d......
  • Linux环境下docker安装nginx及其配置
    安装一、获取镜像在线安装直接执行命令:dockerpullnginx:1.22.1需要指定版本,可以进入官网https://hub.docker.com/,搜索nginx查看仓库中的版本离线安装本地pull下......
  • Docker基本操作(镜像操作?容器操作?)(四)
    Docker的基本原理我们已经了解了,也已经安装上了,接下来我们就一起来学习下Docker的常用操作,实际上主要就是DockerCLI的一些常用命令使用。一、镜像操作之前我们提......
  • Docker安装(安装Docker-CE)(三)
    现版本安装Docker已经非常简单了,有很多种方式,而自17年开始,Docker分为Docker-CE(社区版)、Docker-EE(企业版),另外Docker-IO是较早的版本,通常用的都是Docker-CE版;目前CentOS内......