【導讀】今天的文章中作者總結了高效快速部署個人博客的經驗,介紹了打包方面優化對性能的提升。
自從上次博客從 PHP 切換到 GO 語言后,博客上線已經一段時間了,最大的變化就是部署簡單,高效,省去了以前配置 PHP 的部署問題。另外一個就是系統的資源也有明顯降低了。
首先,本博客使用的云主機是 1 核 1G 內存,之前就是一個 Nginx+Mysql+一個 Golang 程序就把內存耗剩 20M 左右。自己還添加了一個虛擬交換內存 Swap 1G 的空間,避免內存用完,卡一點都比服務宕掉好。
雖說博客沒什么流量,但是一有請求,就會發現網絡,CPU,內存,磁盤等 IO 操作。如果 CPU 暴滿,或者內存暴滿都會導致程序處理或者響應慢。正是因為這樣,有時候使用 Xshell 登陸 ECS 服務器也會卡著。所以最后選擇使用 Docker 方式來跑 Golang 程序。
系統環境: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 多點。這里沒有把 Nginx 也跑在 Docker 上,而是把占內存比較大的 Mariadb 和博客程序跑在 Docker 中。
因為目前云主機是在騰訊云的,所以把鏡像也 PUSH 到騰訊的 Docker 倉庫了。
Dockerfile 文件的內容:這里添加了一個時區,方便讓容器里的時間跟時區一致。同時也把執行程序 blog58 復制的方式添加到鏡像中。
FROM alpine
MAINTAINER swper 《[email protected]》
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
注意
這里并沒有把 Go 里的靜態資源加入,我是通過掛載的方式加入的。原因一個里面有系統,數據庫帳號的配置。放在外網的 Docker 倉庫不太放心,所以就沒有直接打包到鏡像,同時也為了讓鏡像更小。
沒打包靜態資源就多了一步,需要把靜態的文件,配置文件,模版文件,樣式,jS 等上傳到服務器
WORKDIR 目錄,所以掛載時要注意
關于騰訊云的鏡像,是需要一個認證的,通過帳號申請即可。
啟動容器
1、先把數據庫啟動起來
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
啟動后需要操作一步把之前的數據庫重新導入容器之中。數據庫不存在,需要先創建,這里不詳細說了。
啟動容器時就要把靜態資源掛載:
docker run -d --name app --restart=always -p 8000:8000 -v /data/blog58/conf:/blog58/conf --link mariadb:mariadb blog
這里把沒有打包進鏡像的配置文件以掛載的方式掛載到容器的相應目錄。/blog58/conf這個目錄就是跟程序配置中的一致,不然無法讀取到配置文件,這樣掛載是有方便的地方,可以通過它修改,如果直接打包到配置文件中就要重新打包鏡像了。
--link 通過它來連接 mariadb 容器,不然兩個容器之間不能連接就不能獲取到數據庫內容了
最后檢查服務是否成功啟動,可以查看宿主機的端口,或者直接請求訪問服務。
[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
+關注
關注
68文章
11033瀏覽量
215978 -
數據庫
+關注
關注
7文章
3900瀏覽量
65769 -
PHP
+關注
關注
0文章
454瀏覽量
27271 -
Docker
+關注
關注
0文章
510瀏覽量
12695
原文標題:Docker 方式跑 Golang 程序 web 服務
文章出處:【微信號:gh_3980db2283cd,微信公眾號:開關電源芯片】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
【技術案例】Android in Docker

AWTK-WEB 快速入門(6) - JS WebSocket 應用程序

AWTK-WEB 快速入門(5) - C 語言 WebSocket 應用程序

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

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

云服務器 Flexus X 實例,Docker 集成搭建 DVWA 靶場

云服務器 Flexus X 實例,Docker 集成搭建 YesPlayMusic 網易云音樂播放器

云服務器 Flexus X 實例,Docker 集成搭建 Grafana 開源數據可視化平臺

云服務器 Flexus X 實例,Docker 集成搭建 NGINX

docker-compose配置文件內容詳解以及常用命令介紹

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

Docker運行環境安裝
【米爾NXP i.MX 93開發板試用評測】4、使用golang搭建Modbus 服務器
ARM平臺實現Docker容器技術
華納云:java web和java有什么區別java web和java有什么區別

評論