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

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

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

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

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

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

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

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

雖說博客沒什么流量,但是一有請求,就會發(fā)現(xiàn)網(wǎng)絡(luò),CPU,內(nèi)存,磁盤等 IO 操作。如果 CPU 暴滿,或者內(nèi)存暴滿都會導(dǎo)致程序處理或者響應(yīng)慢。正是因為這樣,有時候使用 Xshell 登陸 ECS 服務(wù)器也會卡著。所以最后選擇使用 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因為它夠小了,5M 多點。這里沒有把 Nginx 也跑在 Docker 上,而是把占內(nèi)存比較大的 Mariadb 和博客程序跑在 Docker 中。

因為目前云主機是在騰訊云的,所以把鏡像也 PUSH 到騰訊的 Docker 倉庫了。

Dockerfile 文件的內(nèi)容:這里添加了一個時區(qū),方便讓容器里的時間跟時區(qū)一致。同時也把執(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)資源加入,我是通過掛載的方式加入的。原因一個里面有系統(tǒng),數(shù)據(jù)庫帳號的配置。放在外網(wǎng)的 Docker 倉庫不太放心,所以就沒有直接打包到鏡像,同時也為了讓鏡像更小。

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

WORKDIR 目錄,所以掛載時要注意

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

啟動容器

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

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

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

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

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

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

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

最后檢查服務(wù)是否成功啟動,可以查看宿主機的端口,或者直接請求訪問服務(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)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • cpu
    cpu
    +關(guān)注

    關(guān)注

    68

    文章

    10702

    瀏覽量

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

    關(guān)注

    7

    文章

    3712

    瀏覽量

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

    關(guān)注

    0

    文章

    452

    瀏覽量

    26576
  • Docker
    +關(guān)注

    關(guān)注

    0

    文章

    446

    瀏覽量

    11738

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

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

收藏 人收藏

    評論

    相關(guān)推薦

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

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

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

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

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

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

    如何使用Golang連接MySQL

    首先我們來看如何使用Golang連接MySQL。
    的頭像 發(fā)表于 01-08 09:42 ?2933次閱讀
    如何使用<b class='flag-5'>Golang</b>連接MySQL

    什么是web服務(wù)器?如何選擇服務(wù)器配置?

    Web服務(wù)器是一種軟件或硬件設(shè)備,用于托管和提供網(wǎng)頁內(nèi)容。它接收客戶端(如瀏覽器)發(fā)送的HTTP請求,并返回相應(yīng)的網(wǎng)頁內(nèi)容或其他資源,以實現(xiàn)更高的性能和可靠性。它是網(wǎng)站和應(yīng)用程序在互聯(lián)網(wǎng)上構(gòu)建和交付
    的頭像 發(fā)表于 01-03 15:25 ?979次閱讀

    Nginx在Windows/docker中的使用

    nginx 是一個高性能的開源反向代理服務(wù)器和 web 服務(wù)器,一般用來搭建靜態(tài)資源服務(wù)器、負(fù)載均衡器、反向代理,本文將分享其在 Windows/d
    的頭像 發(fā)表于 01-03 10:20 ?1364次閱讀
    Nginx在Windows/<b class='flag-5'>docker</b>中的使用

    docker核心組件有哪些

    Docker 是一種開源的容器化平臺,它能夠?qū)崿F(xiàn)將應(yīng)用程序及其依賴項打包到一個可移植的容器中,從而實現(xiàn)快速、可重復(fù)、可擴展的部署和管理。Docker 的核心組件包括 Docker En
    的頭像 發(fā)表于 11-23 09:47 ?1488次閱讀

    如何啟動本機docker服務(wù)

    Docker是一個開源項目,可以幫助開發(fā)者打包應(yīng)用程序及其依賴,并且能夠?qū)⑵渥鳛楠毩⒌娜萜鱽磉\行。本文將詳細(xì)介紹如何在本機上啟動Docker服務(wù)。 第一步:安裝
    的頭像 發(fā)表于 11-23 09:43 ?1500次閱讀

    linux關(guān)閉docker的命令

    在 Linux 系統(tǒng)中,關(guān)閉 Docker 的操作可以通過以下多種方式進行。本文將詳細(xì)講解每一種方式,并提供示例代碼和命令,以幫助讀者更好地理解和實踐。 使用 docker 命令 最常
    的頭像 發(fā)表于 11-23 09:39 ?2378次閱讀

    docker容器與容器之間通信

    Docker是一種輕量級容器化技術(shù),能夠?qū)?yīng)用程序及其依賴項封裝在一個獨立、可移植的容器中。而容器化的應(yīng)用程序通常是以分布式方式設(shè)計的,因此實現(xiàn)容器與容器之間的通信至關(guān)重要。 本文將詳
    的頭像 發(fā)表于 11-23 09:36 ?1243次閱讀

    docker exec命令的使用方法

    Docker是一種開源的容器化平臺,可以讓開發(fā)人員在容器中打包和運行應(yīng)用程序。它提供了一種快速、可靠和一致的方式來構(gòu)建、部署和運行應(yīng)用程序。Dock
    的頭像 發(fā)表于 11-23 09:33 ?1333次閱讀

    docker部署對性能的影響

    Docker 是一個流行的容器化平臺,它提供了一種輕量級的虛擬化技術(shù),使得應(yīng)用程序可以在獨立的容器中運行。然而,部署應(yīng)用程序Docker 容器中可能會對性能產(chǎn)生一些影響。在本文中,
    的頭像 發(fā)表于 11-23 09:31 ?1276次閱讀

    docker部署mysql的壞處

    Docker 是一種虛擬化技術(shù),它允許開發(fā)人員在容器內(nèi)打包應(yīng)用程序及其所有依賴項,從而實現(xiàn)在不同環(huán)境中運行相同的應(yīng)用程序的能力。然而,在使用 Docker 部署 MySQL 時,也存在
    的頭像 發(fā)表于 11-23 09:29 ?1169次閱讀

    docker服務(wù)架構(gòu)實戰(zhàn)

    隨著云計算和容器化技術(shù)的快速發(fā)展,微服務(wù)架構(gòu)在軟件開發(fā)領(lǐng)域中變得越來越流行。微服務(wù)架構(gòu)將一個大型的軟件應(yīng)用拆分成多個小型的、獨立部署的服務(wù),每個服務(wù)負(fù)責(zé)獨立的業(yè)務(wù)功能。其中,
    的頭像 發(fā)表于 11-23 09:26 ?517次閱讀

    如何使用 Docker容器化技術(shù)

    對于開發(fā)人員來說,Docker肯定都不陌生,今天小編帶大家重新學(xué)習(xí)一下Docker。 什么是 Docker 官話: Docker 是一種開源的容器化平臺,它可以幫助開發(fā)者將應(yīng)用
    的頭像 發(fā)表于 09-30 11:24 ?1.6w次閱讀