10.08 RSS、智能家居、個人博客、維基百科……Docker 入門指南

如果你購買過 VPS 雲主機,那麼或多或少,你都可能聽說過 Docker。如果你從未聽說過 Docker,那麼本文可能能夠為你開啟新世界。

利用 Docker,你能夠非常輕鬆地部署各類服務,無論是個人云盤(Nextcloud:打造屬於自己的網盤服務 Docker 版 (附帶視頻)、個人的 RSS 服務(利用 Docker 搭建 Tiny Tiny RSS 服務)、HomeKit 橋接(利用 Docker 搭建 HomeKit 智能家居),亦或者搭建一個個人博客(使用 Docker 部署 Ghost 教程),甚至是做一個自己的維基百科、自己的社交軟件,都能夠輕鬆地實現。

是的,Docker 就好像是 服務器端的「應用商店」,你能夠通過 Docker,輕鬆的部署各種屬於個人、團隊的服務。而現如今,無論是利用各個平臺的雲主機,還是樹莓派、群暉、威聯通等這類物理的服務器主機,甚至是自己廢舊的老電腦,都能夠很容易的使用上 Docker。

RSS、智能家居、個人博客、維基百科……Docker 入門指南

在正式開啟前,本文默認讀者瞭解基本的命令行操作,以及瞭解基本的 Linux 相關知識,如果您還不瞭解這些,可以通過 B 站 這個 UP 主的 視頻 有所瞭解。

那麼開啟 Docker 之旅吧!

Docker 可以理解為寄存在主機上的特殊的虛擬機。它利用特殊的虛擬化技術,比一般的虛擬化技術能夠更加高效合理的利用資源。一臺主機上可以創建眾多的容器,這些容器通過特定的方式與主機共享硬件資源,並且訪問特定的文件,使用特定的端口。通過 Docker ,一臺主機能夠運行多種不同的服務。

RSS、智能家居、個人博客、維基百科……Docker 入門指南

第一步:安裝或者啟用 Docker

一般來說,Docker 會運行在 Linux 服務器上,無論是哪種發行版本,你都可以非常容易的在搜索引擎中找到其安裝方法。這裡我以 Ubuntu 為例:

$ sudo apt update # 先更行一下軟件包緩存
$ sudo apt install docker-ce # ce 代表社區版

接著啟動 Docker 服務:

$ sudo systemctl enable docker
$ sudo systemctl start docker

這樣,你就可以嘗試一下運行 docker 命令了:

$ sudo docker run hello-world

默認情況下,docker 命令需要使用 root 用戶或者在 docker 組下的用戶才能使用(docker 命令會使用 Unix socket 與 Docker 引擎通訊)。也就是說,如果不設置,默認情況下,所有的 docker 命令都需要加 sudo。一般情況下,你可以創建一個名為 docker 的用戶組,再將當前用戶加入到 docker 組中,使得操作更為安全。

$ sudo groupadd docker #創建 Docker 組。
$ sudo usermod -aG docker $USER #添加當前用戶到 docker 用戶組中,也可將 $USER 替換為你想加入到 docker 組中的用戶。

第二步:拉取你的第一個 Image

其實你可以這麼理解 Docker,你可以在一個名為 Docker Hub 的網站中,查找 Docker 鏡像(image)。

RSS、智能家居、個人博客、維基百科……Docker 入門指南

這個過程就好像是在 App Store 中搜索自己需要下載的應用一樣。查找完想要下載的鏡像後,在終端中輸入:

$ docker pull [鏡像名稱] 

可以拉取鏡像的到本地。是的,你就下載了這個應用,只不過是在服務端。當然,一般來說這個過程會比較緩慢,你可以 替換國內源 加速這一過程。

第三步:啟動你的服務

與一般應用下載打開不同,Docker 的鏡像可以重複的被打開成不同的容器。你可以簡單的理解為這是「應用雙開」,或者說是「應用多開」。我們使用 docker run 命令來啟動容器。

這個啟動的過程可以是一次性的啟動,即直接使用 docker run + 一些列參數的方式啟動服務,也可以通過 docker compose 來編排你的項目。由於 compose 會相對專業,本文就不做過多的介紹了,這裡只以 docker run 為例作為講解,以下是常見的參數:

  • -d:正常情況下,啟動一個服務區,我們都會讓其在後臺運行,所以使用參數 -d 來告訴 Docker,在後臺默默奉獻即可;
  • --name=:前面已經提到了,你可以對一個 Docker 鏡像進行多開操作,所以通過 dockr run -d --name=[你的名字] 的方式,可以指定開啟的這個容器的名稱,這樣在多開的情況下,能夠更為方便的進行管理;
  • -p: 指定端口的映射。

這裡簡單講解一下端口的含義:以用戶輸入在瀏覽器中輸入 www.sspai.com 為例,首先瀏覽器會通過 DNS 服務器把這個 Url 翻譯為 IP 地址,再通過 IP 地址,找到少數派的服務器,最後通過端口號確定服務,例如如果你輸入的是:https:\\\\www.sspai.com,那麼對應的端口就是 443。端口號就相當於服務器的櫃檯,同個服務區會有多個櫃檯提供服務。諸如 http 服務,默認是 80 端口, https (上面的例子)默認是 443 端口,類似的 FTP 服務是 21 等等。 並且一個端口只能支持一個服務,就是說一個櫃檯只支持辦理一項服務。

回到 -p 這個參數,-p 8080:80 就是指將 docker 中開啟的端口,映射到主機的 8080 端口中。也就是說通過主機的 IP 地址的 8080 端口,可以訪問到 docker 容器的 80 端口服務。 服務器的 8080 櫃檯接收到的服務,會發送到容器的 80 櫃檯中。是的,容器也相當於是一個服務器,在 Docker 內部,他們之間也是有 IP 地址的說法的,所以容器也是需要開「櫃檯」來管理服務的。

理解這一步非常重要,和一般的使用應用不同,服務器上的應用就是一直在運行,然後讓你去訪問的,所以 -p 參數設置不對,可就找不到櫃檯辦理正確的服務器了。例如運行:

$ docker run -d --name=nextcloud_demo -p 8080:80 nextcloud

那麼你可以通過 http://localhost:8080 訪問到你的 nextcloud 服務。這裡的 loaclhost 指的是在 Docker 服務器上訪問。如果你想通過自己的電腦,訪問 Docker 服務器上的服務,把 loaclhost 替換為服務器的 IP 地址即可。

  • -v:建立主機於 docker 容器內的文件關聯。通過 - v 能夠 主機的文件映射到 docker 容器中,例如:
$ docker run -d\\
-v nextcloud:/var/www/html\\
nextcloud

就是將本地本地文件夾 nextcloud 映射到容器中的 /var/www/html 目錄。

這 4 個參數就是 docker 最基礎也是最常用的參數了。瞭解了這四個參數,再參照 Docker Hub 下每一個鏡像的使用說明,你就可以盡情的擁抱和享受開源社區的各種服務了。

推薦一些好用的 Docker 鏡像

除了開篇提到的 NextCloud、Tiny Tiny RSS、Ghost 等服務外,還有一些鏡像值得嘗試:

  • MediaWiki: 和維基百科一樣的屬於個人或者團隊的維基服務。
  • Wekan:屬於個人或者團隊的開源看板應用。參考 Trello 等服務。
  • WordPress:為人所知的、被廣泛使用的、收購了 tumblr 的博客服務,可以用來搭建個人博客,甚至商用網站。
  • gitlab、gitea 等 Git 服務:如果有團隊代碼管理需求,可以使用 Docker 快速部署一個私用的 Git 服務。

部署一時爽,運維「火葬廠」

Docker 讓服務的安裝變得異常容易,但是選擇一項服務後,後面的運維才是真正折騰人的地方。

首先是管理容器中,最常使用到:

$ docker ps #查看運行中的容器。
$ docker ps -a #查看所有容器,包括停止的。
$ docker images #查看安裝的鏡像

然後是停止、啟動已有的容器:

$ docker stop  # 正常停止容器
$ docker start # 啟動已有容器
$ docker kill # 強制停止容器

一般容器運行後,會有一個 ID,用以區分容器,這個 ID 一般都是亂序的,所以之前的 --name 參數,能夠使你更加方便對容器進行管理。

除此之外,還有就是進入 Docker 容器中,修改一些配置文件:

$ sudo docker exec -it  /bin/bash

就是說你可以通過這個命令,進入到 容器的 bash 中,對容器內進行一些修改。

尾巴

最後 Docker 還有許多其他的命令和方法可供學習。本文只是作為入門,希望為各位讀者提供幫助,更加輕鬆,便捷的使用上這項服務。

作為當今最受歡迎的容器化解決方案,docker 在業界發光發亮的同時,也為一般用戶,「一鍵」啟用某些服務提供了契機。利用開源社區,你可以比以往任何時候都更為容易的實現許多互聯網服務的「自給自足」。


分享到:


相關文章: