當下運行容器的 3 個步驟
無論你是將其作為工作的一部分、未來的工作機會或者僅僅是出於對新技術的興趣,容器對很多人,即使是經驗豐富的系統管理員,可能是非常難以應付的。那麼如何真正開始使用容器呢?從容器到 Kubernetes 的成長路徑是什麼?另外,為什麼有不止一條路徑?如你所料,最好的起點就是現在。
1、了解容器
略一回憶,容器的開端可以追溯到早期 BSD 及其特殊的 chroot 監獄,但讓我們直接跳到發展中期講起。
之前,Linux 內核引入了 「 控制組 」,允許你能夠使用 「 命名空間 」 來「標記」進程。當你將進程分組到一個命名空間時,這些進程的行為就像在命名空間之外的東西不存在一樣,這就像你把這些進程放入某種容器中。當然,這種容器是虛擬的,它位於計算機內部,它和你操作系統的其餘進程使用相同的內核、內存和 CPU,但你用容器包含了這些進程。
分發的預製容器僅包含運行它所包含的應用程序必須的內容。使用容器引擎,如 Podman、Docker 或 CRI-O,你可以運行一個容器化應用程序,而無需進行傳統意義上的安裝。容器引擎通常是跨平台的,因此即使容器運行在 Linux 上,你也可以在其他 Linux、MacOS 或 Windows 上啟動容器。
更重要的是,當需求量很大時,你可以運行同一應用程序的多個容器。
現在你知道了什麼是容器,下一步是運行一個容器。
2、運行一個容器
在運行容器之前,你應該有一個想要運行它的理由。你可以編一個,這有助於你對讓容器創建過程感興趣,這樣你就會受到鼓舞,真正去使用你所運行的容器。畢竟,運行容器但不使用它提供的應用程序,只能證明你沒有注意到任何故障,但使用容器證明它可以工作。
我推薦從 WordPress 開始,它是一個很流行的 Web 應用程序,容易使用,所以一旦容器運行起來,你就可以測試使用它。雖然你可以輕鬆地配置一個 WordPress 容器,但還是有很多配置選項可以引導你發現更多運行容器的方式(例如運行資料庫容器)以及容器如何通信。
我使用 Podman,它是一個友好、方便且無守護進程的容器引擎。如果你沒有安裝 Podman,可以改用 Docker 命令。它們都是很棒的開源容器引擎,而且它們的語法是相同的(只需輸入 docker
而不是 podman
)。因為 Podman 沒有守護進程,所以它需要更多的配置,但為了這種運行免 root、無守護進程的容器的能力是值得的。
如果你使用 Docker,可以跳到下面的 運行 WordPress 容器 小節,否則,打開終端安裝並配置 Podman:
$ sudo dnf install podman
容器會產生許多進程,通常只有 root 用戶有權創建數千個進程 ID。創建一個名為 /etc/subuid
的文件,定義一個適當的起始 UID 和大量合法的 PID,這樣就可以為你添加一些額外的進程 ID:
seth:200000:165536
在名為 /etc/subgid
的文件中對你的組執行相同的操作。在這個例子中,我的主要組是 staff
(對你來說可能是 users
,或者和你的用戶名一樣,這取決於你的系統)。
staff:200000:165536
最後,確認你的用戶可以管理很多命名空間:
$ sysctl --all --pattern user_namespaces
user.max_user_namespaces = 28633
如果你的用戶無權管理超過 28,000 個命名空間,創建 /etc/sysctl.d/userns.conf
文件來增加數量並輸入:
user.max_user_namespaces=28633
運行 WordPress 容器
現在,無論你使用的是 Podman 還是 Docker,你都可以從在線容器倉庫中下載 WordPress 容器並運行它。你可以使用以下 Podman 命令完成所有這些操作:
$ podman run --name mypress
-p 8080:80 -d wordpress
給 Podman 一會時間來找到容器、從互聯網下載它,然後啟動。
在收到終端返回提示符後,啟動 Web 瀏覽器,打開 localhost:8080
。WordPress 正在運行,等待你進行設置。
![WordPress 容器](/data/attachment/album/202205/12/121432u8wfzo1qltggjgoo.jpg "WordPress running in a container")
不過,你很快就會遇到障礙,因為 WordPress 使用資料庫來存儲數據,因此你需要為其提供一個資料庫。
在繼續之前,停止並刪除 WordPress 容器:
$ podman stop mypress
$ podman rm mypress
3、在吊艙中運行容器
正如名字所暗示的那樣,容器在設計上是獨立的。在容器中運行的應用程序不應該與在容器外的應用程序或基礎設施進行交互。因此,當一個容器需要另一個容器才能運行時,一種解決方案是將這兩個容器放在一個更大的容器中,稱為 「 吊艙 」。吊艙確保其容器可以共享重要的命名空間以便相互通信。
創建一個新的吊艙,為它提供一個名稱,以及希望能夠訪問的埠:
$ podman pod create
--name wp_pod
--publish 8080:80
確認吊艙存在:
$ podman pod list
POD ID NAME STATUS INFRA ID # OF CONTAINERS
100e138a29bd wp_pod Created 22ace92df3ef 1
將容器添加到吊艙
現在你已經為相互依賴的容器創建了一個吊艙,你可以通過指定一個運行的吊艙來啟動每個容器。
首先,啟動一個資料庫容器。你可以創建自己的憑據,只要在 WordPress 連接到資料庫時使用相同的憑據。
$ podman run --detach
--pod wp_pod
--restart=always
-e MYSQL_ROOT_PASSWORD="badpassword0"
-e MYSQL_DATABASE="wp_db"
-e MYSQL_USER="tux"
-e MYSQL_PASSWORD="badpassword1"
--name=wp_db mariadb
接下來,在同一個吊艙中啟動 WordPress 容器:
$ podman run --detach
--restart=always --pod=wp_pod
-e WORDPRESS_DB_NAME="wp_db"
-e WORDPRESS_DB_USER="tux"
-e WORDPRESS_DB_PASSWORD="badpassword1"
-e WORDPRESS_DB_HOST="127.0.0.1"
--name mypress wordpress
現在啟動你最喜歡的網路瀏覽器並打開 localhost:8080
。
這一次,設置會正常進行。WordPress 會連接到資料庫,因為你在啟動容器時傳遞了這些環境變數。
![WordPress 啟動](/data/attachment/album/202205/12/121432qzimdegicdid77eg.jpg "WordPress setup")
創建用戶賬戶後,你可以登錄查看 WordPress 儀錶板。
![WordPress dashboard running in a container](/data/attachment/album/202205/12/121432aoznhx7grkahae1w.jpg "WordPress dashboard running in a container")
下一步
你已經創建了兩個容器,並在一個吊艙中運行了它們。你現在已經了解了如何在自己的伺服器上運行容器及服務。如果你想遷移到雲,容器非常適合你。使用像 Kubernetes 和 OpenShift 這樣的工具,你可以自動化啟動 集群上的容器和吊艙。如果你正在考慮採取下一步行動,閱讀 Kevin Casey 的 3 個開始使用 Kubernetes 的方法,並嘗試他提到的 Minikube 教程。
via: https://opensource.com/article/22/2/start-running-containers
作者:Seth Kenlon 選題:lujun9972 譯者:MjSeven 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive