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

我的微信公衆號

相關文章
相關標籤/搜索