0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

使用Docker方式跑Golang程序web服務(wù)教程

開關(guān)電源芯片 ? 來源:封塵網(wǎng) ? 作者:久未惹塵埃 ? 2021-08-27 10:08 ? 次閱讀

【導(dǎo)讀】今天的文章中作者總結(jié)了高效快速部署個(gè)人博客的經(jīng)驗(yàn),介紹了打包方面優(yōu)化對(duì)性能的提升。

自從上次博客從 PHP 切換到 GO 語言后,博客上線已經(jīng)一段時(shí)間了,最大的變化就是部署簡(jiǎn)單,高效,省去了以前配置 PHP 的部署問題。另外一個(gè)就是系統(tǒng)的資源也有明顯降低了。

首先,本博客使用的云主機(jī)是 1 核 1G 內(nèi)存,之前就是一個(gè) Nginx+Mysql+一個(gè) Golang 程序就把內(nèi)存耗剩 20M 左右。自己還添加了一個(gè)虛擬交換內(nèi)存 Swap 1G 的空間,避免內(nèi)存用完,卡一點(diǎn)都比服務(wù)宕掉好。

雖說博客沒什么流量,但是一有請(qǐng)求,就會(huì)發(fā)現(xiàn)網(wǎng)絡(luò),CPU,內(nèi)存,磁盤等 IO 操作。如果 CPU 暴滿,或者內(nèi)存暴滿都會(huì)導(dǎo)致程序處理或者響應(yīng)慢。正是因?yàn)檫@樣,有時(shí)候使用 Xshell 登陸 ECS 服務(wù)器也會(huì)卡著。所以最后選擇使用 Docker 方式來跑 Golang 程序。

系統(tǒng)環(huán)境:CentOS Linux release 7.3.1611 (Core) Docker-ce: 19.03.1

使用以下的鏡像:

[root@VM_0_5_centos ~]# docker images

REPOSITORY TAG IMAGE ID CREATED SIZE

ccr.ccs.tencentyun.com/swper/58jb v1 2fc4f9bb90c8 13 days ago 35.8MB

blog latest fd226a862210 13 days ago 5.58MB

alpine latest 961769676411 2 weeks ago 5.58MB

mariadb latest 99c1098d5884 3 weeks ago 355MB

基礎(chǔ)鏡像使用了alpine因?yàn)樗鼔蛐×耍?M 多點(diǎn)。這里沒有把 Nginx 也跑在 Docker 上,而是把占內(nèi)存比較大的 Mariadb 和博客程序跑在 Docker 中。

因?yàn)槟壳霸浦鳈C(jī)是在騰訊云的,所以把鏡像也 PUSH 到騰訊的 Docker 倉庫了。

Dockerfile 文件的內(nèi)容:這里添加了一個(gè)時(shí)區(qū),方便讓容器里的時(shí)間跟時(shí)區(qū)一致。同時(shí)也把執(zhí)行程序 blog58 復(fù)制的方式添加到鏡像中。

FROM alpine

MAINTAINER swper 《hz328@qq.com》

ADD static/Shanghai /etc/localtime

COPY 。 /blog58

EXPOSE 8000

WORKDIR /blog58

CMD [“sh”,“-c”,“/blog58/app”]

打包鏡像

查看當(dāng)前的目錄結(jié)構(gòu):

[root@VM_0_5_centos test]# tree -L 2

。

|-- blog58

| |-- app

| |-- docs

| |-- static

| `-- templates

|-- Dockerfile

`-- Shanghai

打包并傳入到騰訊鏡像倉庫

docker build 。 -t ccr.ccs.tencentyun.com/swper/58jb:v1

docker push

注意

這里并沒有把 Go 里的靜態(tài)資源加入,我是通過掛載的方式加入的。原因一個(gè)里面有系統(tǒng),數(shù)據(jù)庫帳號(hào)的配置。放在外網(wǎng)的 Docker 倉庫不太放心,所以就沒有直接打包到鏡像,同時(shí)也為了讓鏡像更小。

沒打包靜態(tài)資源就多了一步,需要把靜態(tài)的文件,配置文件,模版文件,樣式,jS 等上傳到服務(wù)器

WORKDIR 目錄,所以掛載時(shí)要注意

關(guān)于騰訊云的鏡像,是需要一個(gè)認(rèn)證的,通過帳號(hào)申請(qǐng)即可。

啟動(dòng)容器

1、先把數(shù)據(jù)庫啟動(dòng)起來

docker run -d --name mariadb -p 3306:3306 -v /data/mysql/:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=數(shù)據(jù)庫密碼 --privileged=true --restart unless-stopped mariadb:latest

啟動(dòng)后需要操作一步把之前的數(shù)據(jù)庫重新導(dǎo)入容器之中。數(shù)據(jù)庫不存在,需要先創(chuàng)建,這里不詳細(xì)說了。

啟動(dòng)容器時(shí)就要把靜態(tài)資源掛載:

docker run -d --name app --restart=always -p 8000:8000 -v /data/blog58/conf:/blog58/conf --link mariadb:mariadb blog

這里把沒有打包進(jìn)鏡像的配置文件以掛載的方式掛載到容器的相應(yīng)目錄。/blog58/conf這個(gè)目錄就是跟程序配置中的一致,不然無法讀取到配置文件,這樣掛載是有方便的地方,可以通過它修改,如果直接打包到配置文件中就要重新打包鏡像了。

--link 通過它來連接 mariadb 容器,不然兩個(gè)容器之間不能連接就不能獲取到數(shù)據(jù)庫內(nèi)容了

最后檢查服務(wù)是否成功啟動(dòng),可以查看宿主機(jī)的端口,或者直接請(qǐng)求訪問服務(wù)。

[root@VM_0_5_centos ]# ss -lnt

State Recv-Q Send-Q Local Address:Port Peer Address:Port

LISTEN 0 128 *:80 *:*

LISTEN 0 128 *:443 *:*

LISTEN 0 128 :::8000 :::*

LISTEN 0 128 :::3306 :::*

最后查看一下使用容器后的系統(tǒng)資源使用情況。

[root@VM_0_5_centos]# free -m

total used free shared buff/cache available

Mem: 985 200 216 0 568 666

Swap: 1023 310 713

明顯看到的效果,內(nèi)存是有比較大的資源空閑,而 CPU 的利用率相應(yīng)的降低了。

轉(zhuǎn)自:久未惹塵埃

58jb.com/html/goweb-run-on-docker.html

編輯:jq

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • cpu
    cpu
    +關(guān)注

    關(guān)注

    68

    文章

    10901

    瀏覽量

    212765
  • 數(shù)據(jù)庫
    +關(guān)注

    關(guān)注

    7

    文章

    3845

    瀏覽量

    64618
  • PHP
    PHP
    +關(guān)注

    關(guān)注

    0

    文章

    454

    瀏覽量

    26752
  • Docker
    +關(guān)注

    關(guān)注

    0

    文章

    492

    瀏覽量

    11927

原文標(biāo)題:Docker 方式跑 Golang 程序 web 服務(wù)

文章出處:【微信號(hào):gh_3980db2283cd,微信公眾號(hào):開關(guān)電源芯片】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    華為 FlexusX 與 Docker+Nginx 的高效整合之路

    前言 華為 FlexusX 攜手 Docker+Nginx,高效整合,云端性能再升級(jí)!FlexusX 服務(wù)器,依托華為強(qiáng)大的技術(shù)實(shí)力,為 Docker 容器與 Nginx 服務(wù)器提供了
    的頭像 發(fā)表于 01-23 17:55 ?72次閱讀
    華為 FlexusX 與 <b class='flag-5'>Docker</b>+Nginx 的高效整合之路

    AWTK-WEB 快速入門(4) - JS Http 應(yīng)用程序

    導(dǎo)讀XMLHttpRequest改變了Web應(yīng)用程序服務(wù)器交換數(shù)據(jù)的方式,fetch是其繼任者。本文介紹一下如何使用JS語言開發(fā)AWTK-WEB
    的頭像 發(fā)表于 01-22 11:31 ?113次閱讀
    AWTK-<b class='flag-5'>WEB</b> 快速入門(4) - JS Http 應(yīng)用<b class='flag-5'>程序</b>

    服務(wù)器 Flexus X 實(shí)例,Docker 集成搭建 DVWA 靶場(chǎng)

    DVWA 靶場(chǎng)是一個(gè)專為安全專業(yè)人員、開發(fā)人員和學(xué)生設(shè)計(jì)的網(wǎng)絡(luò)安全學(xué)習(xí)和實(shí)踐平臺(tái),模擬了一個(gè)典型的 Web 應(yīng)用程序,并故意包含多種常見的 Web 安全漏洞,如 SQL 注入、跨站腳本攻擊(XSS
    的頭像 發(fā)表于 01-13 18:17 ?153次閱讀
    云<b class='flag-5'>服務(wù)</b>器 Flexus X 實(shí)例,<b class='flag-5'>Docker</b> 集成搭建 DVWA 靶場(chǎng)

    服務(wù)器 Flexus X 實(shí)例,Docker 集成搭建 YesPlayMusic 網(wǎng)易云音樂播放器

    YesPlayMusic 是一款基于 Electron 的開源網(wǎng)易云音樂桌面播放器,以簡(jiǎn)潔的界面和豐富的功能受到了許多用戶的喜愛,特別是對(duì)于希望在桌面上享受網(wǎng)易云音樂服務(wù)的用戶 Docker 安裝并
    的頭像 發(fā)表于 01-13 18:17 ?176次閱讀
    云<b class='flag-5'>服務(wù)</b>器 Flexus X 實(shí)例,<b class='flag-5'>Docker</b> 集成搭建 YesPlayMusic 網(wǎng)易云音樂播放器

    服務(wù)器 Flexus X 實(shí)例,Docker 集成搭建 Grafana 開源數(shù)據(jù)可視化平臺(tái)

    的用戶界面,用戶可以輕松創(chuàng)建和自定義動(dòng)態(tài)儀表板,以實(shí)時(shí)展示關(guān)鍵指標(biāo)和數(shù)據(jù)趨勢(shì) 華為云端口放行 ??服務(wù)器放行對(duì)應(yīng)端口 9955 Docker 安裝并配置鏡像加速 1、購買華為云 Flexus X 實(shí)例
    的頭像 發(fā)表于 01-13 15:50 ?108次閱讀
    云<b class='flag-5'>服務(wù)</b>器 Flexus X 實(shí)例,<b class='flag-5'>Docker</b> 集成搭建 Grafana 開源數(shù)據(jù)可視化平臺(tái)

    服務(wù)器 Flexus X 實(shí)例,Docker 集成搭建 NGINX

    Docker 集成搭建 NGINX 1、購買華為云 Flexus X 實(shí)例 Flexus云服務(wù)器X實(shí)例-華為云 (huaweicloud.com) ? 2、docker 安裝 yum?install
    的頭像 發(fā)表于 01-13 11:09 ?207次閱讀
    云<b class='flag-5'>服務(wù)</b>器 Flexus X 實(shí)例,<b class='flag-5'>Docker</b> 集成搭建 NGINX

    docker-compose配置文件內(nèi)容詳解以及常用命令介紹

    需要的所有服務(wù)(例如:Web服務(wù)器、數(shù)據(jù)庫、緩存等)并輕松管理它們。 Docker Compose 使用的三個(gè)步驟: 使用 Dockerfile 定義應(yīng)用
    的頭像 發(fā)表于 12-02 09:29 ?1056次閱讀
    <b class='flag-5'>docker</b>-compose配置文件內(nèi)容詳解以及常用命令介紹

    AWTK-WEB 快速入門(1) - C 語言應(yīng)用程序

    導(dǎo)讀AWTK可以使用相同的技術(shù)棧開發(fā)各種平臺(tái)的應(yīng)用程序。有時(shí)我們需要使用Web界面與設(shè)備進(jìn)行交互,本文介紹一下如何使用C語言開發(fā)AWTK-WEB應(yīng)用程序。用AWTKDesigner新建
    的頭像 發(fā)表于 11-27 11:46 ?278次閱讀
    AWTK-<b class='flag-5'>WEB</b> 快速入門(1) - C 語言應(yīng)用<b class='flag-5'>程序</b>

    Docker運(yùn)行環(huán)境安裝

    作者:京東科技 林中 Docker是一個(gè)開放的平臺(tái),用于開發(fā)、發(fā)布和運(yùn)行應(yīng)用程序。Docker分離了應(yīng)用程序和運(yùn)行應(yīng)用的基礎(chǔ)設(shè)施,從而實(shí)現(xiàn)了軟件的快速交付。利用
    的頭像 發(fā)表于 10-29 11:28 ?260次閱讀

    【米爾NXP i.MX 93開發(fā)板試用評(píng)測(cè)】4、使用golang搭建Modbus 服務(wù)

    負(fù)責(zé)處理來自客戶端(通常稱為Modbus客戶端或從站)的請(qǐng)求,并根據(jù)請(qǐng)求提供相應(yīng)的數(shù)據(jù)或執(zhí)行操作。 快速開發(fā)modbus服務(wù)器 可以使用golang快速部署一個(gè)modbus服務(wù)器。我們先在開發(fā)板上安裝
    發(fā)表于 09-21 22:51

    ARM平臺(tái)實(shí)現(xiàn)Docker容器技術(shù)

    及依賴包到一個(gè)可移植的鏡像中,然后發(fā)布到任何流行的Linux或Windows機(jī)器上,亦可實(shí)現(xiàn)虛擬化。容器是完全使用沙箱機(jī)制,相互之間不會(huì)有任何接口。使用Docker,可像管理應(yīng)用程序一樣管理基礎(chǔ)結(jié)構(gòu)
    發(fā)表于 07-17 11:05

    華納云:java web和java有什么區(qū)別java web和java有什么區(qū)別

    Java Web和Java是兩個(gè)不同的概念,它們?cè)诠δ堋⒂猛竞蛯?shí)現(xiàn)方式上存在一些區(qū)別,下面將詳細(xì)介紹它們之間的區(qū)別。 1. 功能和用途: – Java是一種編程語言,它提供了一種用于開發(fā)各種應(yīng)用程序
    的頭像 發(fā)表于 07-16 13:35 ?881次閱讀
    華納云:java <b class='flag-5'>web</b>和java有什么區(qū)別java <b class='flag-5'>web</b>和java有什么區(qū)別

    使用Docker部署Go Web應(yīng)用程序步驟

    大多數(shù)情況下Go應(yīng)用程序被編譯成單個(gè)二進(jìn)制文件,web應(yīng)用程序則會(huì)包括模版和配置文件。而當(dāng)一個(gè)項(xiàng)目中有很多文件的時(shí)候,由于很多文件沒有同步就會(huì)導(dǎo)致錯(cuò)誤的發(fā)生并且產(chǎn)生很多的問題。
    發(fā)表于 04-20 09:33 ?543次閱讀
    使用<b class='flag-5'>Docker</b>部署Go <b class='flag-5'>Web</b>應(yīng)用<b class='flag-5'>程序</b>步驟

    ARM平臺(tái)實(shí)現(xiàn)Docker容器技術(shù)

    ,亦可實(shí)現(xiàn)虛擬化。容器是完全使用沙箱機(jī)制,相互之間不會(huì)有任何接口。使用Docker,可像管理應(yīng)用程序一樣管理基礎(chǔ)結(jié)構(gòu)。通過利用Docker的快速發(fā)布、測(cè)試和部署代碼的方法,可顯著減少產(chǎn)品開發(fā)時(shí)間。 ?
    的頭像 發(fā)表于 03-07 13:48 ?839次閱讀
    ARM平臺(tái)實(shí)現(xiàn)<b class='flag-5'>Docker</b>容器技術(shù)

    【米爾-全志T113-i開發(fā)板試用】4、使用Gin框架搭建簡(jiǎn)易的web server和提供設(shè)備信息獲取接口

    上一個(gè)章節(jié),我們搞定了golang獲取系統(tǒng)信息,在這一課,我們需要搭建一個(gè)簡(jiǎn)易的web服務(wù)器,將設(shè)備信息通過gin的json接口提供給網(wǎng)頁。 1、編寫定期獲取信息功能的代碼 Gin的web
    發(fā)表于 02-22 16:23