Gin(十三):交叉编译和Docker部署

本文首发于 我的微信公众号 代码猎奇站 和 我的博客 ISLANDmysql

陆陆续续已经更新到了第十三期,基本的知识点都已经讲解的差很少,那么最后一步就是对项目进行部署。这里咱们将项目部署到 Linux 的服务器 Docker 上。本期知识点包括交叉编译Docker部署linux

👻交叉编译

什么是交叉编译呢?交叉编辑简单的说就是一个平台生成另外一个平台的可执行程序。咱们大部分开发环境是 windows 或者 macOS ,固然也有使用 linux 用户(其实在 windows 上更加推荐使用 WSL 进行开发),而咱们的上线服务器通常都是 linux,因此咱们要进行项目的交叉编译。Go 中对交叉编译相对简单,咱们只须要进行简单的设置便可完成交叉编译。git

打开咱们的项目根目录,打开终端,设置 GOOS 和 GOARCH。github

在 windows 下编译为 linux 程序。web

SET CGO_ENABLED=0
SET GOOS=linux
SET GOARCH=amd64
go build -o out/linux/gin_hello .
复制代码

这里的 go build -o out/linux/gin_hello 是指将编译后的文件输出到 out/linux 下,编译后的二进制叫作 gin_hello 。sql

我将命令写到了 .bat 方便处理,不用每次都执行贴一下这几行命令。docker

在项目根目录下新创建 build.bat ,而后执行该文件。固然,不少工程或者项目使用 Makefile 进行的编译shell

SET CGO_ENABLED=0
SET GOOS=linux
SET GOARCH=amd64
go build -o out/linux/gin_hello .
exit
复制代码

执行完该文件就会在 out/linux 下出现 gin_hello数据库

这里咱们便完成了交叉编译,编译后的程序是 linux 下的可执行文件。vim

🐳安装 Dokcer

这里使用的操做系统为 centos 7 ,安装前要更新一下软件源 sudo yum update ,以后对 Docker 软件源进行添加。

sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo
复制代码

再次更新一下软件源 sudo yum update ,最后就能够安装咱们的 docker 了

sudo yum install docker-ce
复制代码

添加到开机启动

sudo systemctl enable docker
复制代码

启动Docker

sudo systemctl start docker
复制代码

此时,咱们的 Docker 已经完成安装。可是咱们还须要为咱们的 Docker 设置远程链接,让咱们本地开发能够链接到服务器。

🚫警告 下面的方法仅仅是为了教程演示 请勿在生成环境中使用该方法,该方法存在缺陷,使 Docker 端口暴漏在公网环境中,任何人均可以在Docker进行部署。若是须要生产环境中打开远程端口,须要配置权限认证方式,这里不过多作介绍

在 Centos 7 中,进行对下面的文件进行编辑

vim /usr/lib/systemd/system/docker.service
复制代码

找到 ExecStart 开头的进行以下添加和修改。

ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock -H fd:// --containerd=/run/containerd/containerd.sock
复制代码

此时,重启服务器或者从新启动 Docker 就完成了 Docker 的远程链接。

🐬安装数据库

首先咱们要在 dockers 上进行 数据库 MySQL 的安装。首先在执行咱们的搜索命令,看看能不能找到MySQL 相关的信息 docker search mysql

确承认以查找到 MySQL 后,就能够完成 MySQL 进行的拉取 ,经过命令 docker pull mysql 拉取 MySQL 镜像。此时并无指定 MySQL 的版本,会给咱们拉取最新的 MySQL 版本。

拉取完毕,经过 docker iamges 查看当前全部的镜像,这里咱们只有一个 MySQL 。

我已经对 MySQL 镜像进行了获取,那么接下来就是经过镜像建立容器。

docker run -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=1234 -d mysql
复制代码

此时咱们的 MySQL 容器就建立成功,而且启动完成,并且咱们制定了 MySQL 的密码为 1234,端口为 3306。

docker exec -it mysql /bin/bash
复制代码

咱们为 MySQL 指定一个终端,来进行数据库的建立。

输入 mysql -u root -p 回车后输入密码 1234,进入数据库。输入 create database ginhello 和咱们本地数据库名称一致。

这样,咱们在服务器上的操做就完成了。

🔗Goland 链接 Docker,并部署项目

首先咱们要对咱们的代码进行简单的修改,以前咱们一直是 DEBUG 模式在运行项目,而如今咱们要正式上线了,须要修改咱们的启动模式,在 main.go 中进行添加。

gin.SetMode(gin.ReleaseMode)
复制代码

此时就能够执行咱们的交叉编译时候写的脚本 build.bat,会生成新的 linux 可执行文件。

新建 Dockerfile,编写 Dockerfile

FROM alpine

WORKDIR /web/gin 
COPY ./out/linux/. . 
CMD ./gin_hello 复制代码

简单的说一下这些含义,拉取一个 alpine 的镜像,这基本是最小的 linux , 指定咱们的 WORKDIR, 将咱们生成的 linux 可执行程序复制到 WORKDIR 下,运行项目。

固然这些还不够,当咱们编写完成该文件的时候,在第一行会出现运行按钮。

单击运行按钮,选择 Edit 'Dockerfile'

会出现下面的界面。点击 ① 处的省略号,出现旁边的界面,进行 Docker 的配置,在 ② 处填写咱们的 IP 端口为 2375 设置完成后,等待,看看 ③ 处是否有 Connection successful 。否者连接失败,查看上述步骤是否出错。完成后点击 OK。

完成 Docker 的配置,接着完成端口映射。

Host port 表示宿主主机端口,就是咱们的服务器端口,而 Container port 表示咱们的 容器的端口。由于 gin 项目运行在容器内,且启动端口为 8080,咱们经过端口映射,访问宿主主机 80 端口,而映射到 8080 端口。

完成上述设置,就能够点击启动咱们的 Dockerfile。

咱们能够在 Goland 的 Service 中找到当前进度。

等待完成,打开服务器公网IP。

能够看到咱们以前写的代码。

此时咱们就完成了部署。

✍总结

经过本章节的 交叉编译,Docker 安装,Docker 镜像安装和启动容器,部署 Gin 项目,完成了一个项目经过 Docker上线部署的过程。

👨‍💻本章节代码

本章节代码可使用以前任何一个章节代码,可是这里仍是进行了代码的上传,包含本章节使用的 Dockerfile 和 build.bat

Github

推荐阅读

Gin(一):Hello
Gin(二):路由Router
Gin(三):模板tmpl
Gin(四):表单提交校验和模型绑定
Gin(五):链接MySQL
Gin(六):文件的上传
Gin(七):中间件的使用和定义
Gin(八):Cookie的使用
Gin(九):生成restful接口
Gin(十):集成 Swagger
Gin(十一)集成ORM-gorm
Gin(十二)集成JWT

我的微信公众号

相关文章
相关标签/搜索