從 docker-compose 快速入門 Docker

不得不提容器化技術是未來的一個發展方向,它徹底釋放了計算虛擬化的威力,極大提高了應用的運行效率,降低了雲計算資源供應的成本!使用 Docker,可以讓應用的部署、測試和分發都變得前所未有的高效和輕鬆!

無論是應用開發者、運維人員、還是其他信息技術從業人員,都有必要認識和掌握 Docker,節約有限的時間。

最近通過一小段時間的自學感受到了 Docker 給建站帶來的樂趣,遂本文擬從一個初學者的角度,通過一個實際的例子——Ghost 博客部署來快速 感受 Docker 容器化技術帶來的樂趣。


Ghost 是什麼

從 docker-compose 快速入門 Docker

簡要來說,Ghost 是一個基於 NodeJS 的博客框架,由前 Wordpress 員工開發,十分輕巧並且適合作為博客系統,然而對於傳統部署來說,我們需要在計算機上安裝 Node,配置各種變量,十分麻煩,有興趣的讀者可以自行搜索 “Ghost 安裝教程” 感受一下~


Docker Kicks in

正因為傳統部署的麻煩,我們希望減少整個安裝過程,將其簡單化,以下介紹兩個思路:

  • 思路一,安裝 Docker 後安裝 Ghost,並且直接暴露 80 端口,此時所有請求由 Docker 內的 Express 服務器處理,如果需要 SSL 的話只能使用 Cloudflare 類 CDN 產品,不易配置,但上手簡單(大約 2 分鐘);
  • 思路二,安裝 Docker 後安裝 Ghost,並且暴露一個其他端口(比如默認的 2368),前置宿主機中的 Nginx 進行反向代理,此時 SSL 請求和相關規則可以由 Nginx 處理,可配置性高,上手稍微複雜一些(大約 7 分鐘);
  • 思路三,使用 Docker 化的 Ghost + nginx-proxy + nginx ,可配置性最高,上手較為複雜(大約 30 分鐘),本文不打算介紹這類方法,感興趣的讀者建議參照:@stevenc81/ghost-blog-with-automagic-lets-encrypt-ssl-tls-certificate-renewal-8d43e3773455">Ghost Blog With Automagic Let’s Encrypt SSL/TLS Certificate Renewal 一文;

無論方法一或是方法二,首先使用官方的 “一鍵安裝腳本” 安裝 Docker:

$ url -fsSL get.docker.com -o get-docker.sh

$ sh get-docker.sh

...

$ sudo systemctl start docker

根據慣例,安裝完成後我們隨意測試一下看看是否真的安裝好了:

$ sudo docker run hello-world

如果不出意外能看到如下內容:

從 docker-compose 快速入門 Docker

好,Docker 安裝到此,我們開始專注於我們要搭建的應用——Ghost 博客。


方法一:

這類方法非常簡單,命令如下:

$ docker run -d --name some-ghost -p 80:2368 -v /path/to/ghost/blog:/var/lib/ghost/content ghost:latest

這個命令解讀如下:-d 表示後臺運行,--name 表示這個 Docker 容器的名稱(容器和鏡像類似 C++ 中的對象和類,根據一個鏡像我們創建並啟動了一個帶有配置參數的容器),-p 80:2368 表示將容器內的 2368 端口映射到外部的 80 端口上, -v /path/to/ghost/blog:/var/lib/ghost/content 表示將外部路徑中的 /path/to/ghost/blog 文件夾 “掛載” 到內部的 /var/lib/ghost/content,這麼做的好處就是數據和應用分離,如果需要跑路遷移的話直接將這個 blog 文件夾帶走即可。

此時,我們應該可以通過直接訪問對應 IP 看到一個已經開起來的 Ghost 博客了。

但是這樣的方法用起來很不爽,因為一旦涉及到我們需要重啟或者重新配置容器的話,就需要記這麼長一條指令,而且前文也提到了這種方法可配置空間小,所以以下介紹另一個更加優雅的方法。


方法二:

這裡我們需要用到 docker-compose,通過以下指令即可安裝:

$ pip3 install docker-compose

安裝好後創建一個文件夾(比如 lc-docker)並且在文件夾內創建一個叫 docker-compose.yml 的文件(以下 docker-compose.yml 文件內容來自 Nova 的 GitHub 倉庫),內容和部分解釋如下:

從 docker-compose 快速入門 Docker

由於 compose 文件中定義了 ./data,我們在文件夾內需要創建一個 data 文件夾,用於被掛載並存放 Ghost 數據。

啟動,關閉,和刪除容器(組),需要在包含 docker-compose.yml 目錄中:

從 docker-compose 快速入門 Docker

此時根據文件定義我們已經在 127.0.0.1:9030 上開了一個 Ghost 實例了,現在需要用 Nginx 來反向代理它,Nginx 配置文件類似如下:

從 docker-compose 快速入門 Docker

如果需要 SSL 的話,可以直接安裝並使用 certbot --nginx 來獲取,全自動配置~


分享到:


相關文章: