【導讀】今天的文章中作者總結了高效快速部署個(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
-
cpu
+關(guān)注
關(guān)注
68文章
10525瀏覽量
207448 -
數據庫
+關(guān)注
關(guān)注
7文章
3628瀏覽量
63689 -
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)注!文章轉載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
使用Docker部署Go Web應用程序步驟
![使用<b class='flag-5'>Docker</b>部署Go <b class='flag-5'>Web</b>應用<b class='flag-5'>程序</b>步驟](https://file1.elecfans.com/web2/M00/D1/67/wKgZomYjG8yAboHUAAAU3ZokeRA952.png)
ARM平臺實(shí)現Docker容器技術(shù)
![ARM平臺實(shí)現<b class='flag-5'>Docker</b>容器技術(shù)](https://file1.elecfans.com/web2/M00/C3/DE/wKgaomXpMM2ANlt5AARGmREsrH4588.png)
【米爾-全志T113-i開(kāi)發(fā)板試用】4、使用Gin框架搭建簡(jiǎn)易的web server和提供設備信息獲取接口
Nginx在Windows/docker中的使用
![Nginx在Windows/<b class='flag-5'>docker</b>中的使用](https://file1.elecfans.com/web2/M00/BB/5E/wKgaomWUxNqAIe8fAAAUBR3freY812.png)
docker核心組件有哪些
如何啟動(dòng)本機docker服務(wù)
linux關(guān)閉docker的命令
docker容器與容器之間通信
docker exec命令的使用方法
docker部署對性能的影響
docker部署mysql的壞處
docker微服務(wù)架構實(shí)戰
docker基礎知識和使用bmnnsdk時(shí)的docker常用命令
基于Docker提供內置的DNS服務(wù)器
![基于<b class='flag-5'>Docker</b>提供內置的DNS<b class='flag-5'>服務(wù)</b>器](https://file1.elecfans.com/web2/M00/8F/BA/wKgaomTR3ViAKxPbAAAsOtERimY386.png)
評論