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

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

3天內不再提示

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

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

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

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

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

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

系統環(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

基礎鏡像使用了alpine因為它夠小了,5M 多點(diǎn)。這里沒(méi)有把 Nginx 也跑在 Docker 上,而是把占內存比較大的 Mariadb 和博客程序跑在 Docker 中。

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

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

FROM alpine

MAINTAINER swper 《hz328@qq.com》

ADD static/Shanghai /etc/localtime

COPY 。 /blog58

EXPOSE 8000

WORKDIR /blog58

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

打包鏡像

查看當前的目錄結構:

[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

注意

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

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

WORKDIR 目錄,所以?huà)燧d時(shí)要注意

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

啟動(dòng)容器

1、先把數據庫啟動(dòng)起來(lái)

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

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

啟動(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

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

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

最后檢查服務(wù)是否成功啟動(dòng),可以查看宿主機的端口,或者直接請求訪(fǎng)問(wèn)服務(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 :::*

最后查看一下使用容器后的系統資源使用情況。

[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

明顯看到的效果,內存是有比較大的資源空閑,而 CPU 的利用率相應的降低了。

轉自:久未惹塵埃

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

編輯:jq

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

    關(guān)注

    68

    文章

    10525

    瀏覽量

    207448
  • 數據庫
    +關(guān)注

    關(guān)注

    7

    文章

    3628

    瀏覽量

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

    關(guān)注

    0

    文章

    452

    瀏覽量

    26500
  • Docker
    +關(guān)注

    關(guān)注

    0

    文章

    442

    瀏覽量

    11662

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

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

收藏 人收藏

    評論

    相關(guān)推薦

    使用Docker部署Go Web應用程序步驟

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

    ARM平臺實(shí)現Docker容器技術(shù)

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

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

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

    Nginx在Windows/docker中的使用

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

    docker核心組件有哪些

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

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

    Docker是一個(gè)開(kāi)源項目,可以幫助開(kāi)發(fā)者打包應用程序及其依賴(lài),并且能夠將其作為獨立的容器來(lái)運行。本文將詳細介紹如何在本機上啟動(dòng)Docker服務(wù)。 第一步:安裝
    的頭像 發(fā)表于 11-23 09:43 ?792次閱讀

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

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

    docker容器與容器之間通信

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

    docker exec命令的使用方法

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

    docker部署對性能的影響

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

    docker部署mysql的壞處

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

    docker服務(wù)架構實(shí)戰

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

    docker基礎知識和使用bmnnsdk時(shí)的docker常用命令

    的物理機上運行一樣。有了 Docker,就不用擔心環(huán)境問(wèn)題。 1.2 image文件與容器container Docker 把應用程序及其依賴(lài),打包在 image 文件里面。只有通過(guò)這個(gè)文件,才能
    發(fā)表于 09-18 07:59

    基于Docker提供內置的DNS服務(wù)

    由一個(gè)Service負載,但是Service的IP地址有可能需要變動(dòng),那么就可以讓Pod通過(guò)域名的方式去訪(fǎng)問(wèn)Service,Pod無(wú)需理會(huì )IP地址的變化。 Docker DNS Docker link
    的頭像 發(fā)表于 08-08 14:14 ?996次閱讀
    基于<b class='flag-5'>Docker</b>提供內置的DNS<b class='flag-5'>服務(wù)</b>器

    Docker入門(mén)指南

    本指南介紹了如何使用Docker簡(jiǎn)化嵌入式設備和服務(wù)器上的多體系結構應用程序部署。 快速擴展軟件環(huán)境可能是一項既困難又耗時(shí)的任務(wù)。在本指南中,我們將向您展示Docker如何抽象操作系統
    發(fā)表于 08-02 06:09
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看