【導(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
-
cpu
+關(guān)注
關(guān)注
68文章
10901瀏覽量
212765 -
數(shù)據(jù)庫
+關(guān)注
關(guān)注
7文章
3845瀏覽量
64618 -
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)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論