自顧不暇的系統管理員如何面對開發人員的“Challenge”?|航海日誌 Vol.20

DaoCloud發表於2017-07-17

自顧不暇的系統管理員如何面對開發人員的“Challenge”?|航海日誌 Vol.20

➤ 自顧不暇的系統管理員如何面對開發人員的“Challenge”?

自顧不暇的系統管理員如何面對開發人員的“Challenge”?|航海日誌 Vol.20

6 月 27 日,開展了一個關於“系統管理員 Docker ”的網路研討會。這個研討會基於日常生活中的常見場景:系統管理員坐在桌旁忙自己的事情的時候,開發人員走了進來,說:“這是新的應用程式,它被打包在 Docker 映象裡了,請儘快部署。”因此,該會議旨在為系統管理員提供管理容器化應用程式的一些指導。(視訊地址(需翻牆):https://www.youtube.com/watch?v=kT76aLugp48)

➤ 北美 Moby 峰會與開源峰會

自顧不暇的系統管理員如何面對開發人員的“Challenge”?|航海日誌 Vol.20

下一屆 Moby 峰會將於 2017 年 9 月 14 日在洛杉磯舉行,作為北美開源峰會的一部分。繼以前版本的成功之後,我們將保持同樣的會議形式,其中包括早上的短暫的技術講座/演示,下午的一些非正式的交流會議。於此同時,我們正在尋找可以談論他們的 Moby 專案的使用情況的人。

使用 Docker Secrets 保護 Atsea App

自顧不暇的系統管理員如何面對開發人員的“Challenge”?|航海日誌 Vol.20

將應用程式配置資訊作為環境變數傳遞曾經被認為是 12 因素應用程式中的最佳實踐。雖然這種做法可以在日誌中顯示資訊,但是它難以追蹤資訊暴露的方式和時間。與使用環境變數不同的是,Docker 使用 secrets 來管理系統配置和機密資訊。

➤ 使用 Pod 安全策略保護 Kubernetes 群集

自顧不暇的系統管理員如何面對開發人員的“Challenge”?|航海日誌 Vol.20

隨著容器技術的逐漸成型和越來越多的應用程式向著叢集環境轉型,明確和實施叢集安全策略變得越來越重要。叢集安全策略提供了一個框架,來確保 pod 和容器僅僅只能使用適當的許可權和訪問有限的資源集。安全策略還為叢集管理者提供了一種方法,以通過限制特定成員、組或名稱空間的可用功能,來控制資源的創造。

本文將向您介紹 Kubernetes 中的 pod 安全策略。由於 pod 安全策略可能特定於組織的規則和特定應用程式的要求,所以沒有一個適合所有情況的方法 -我們將討論三種常見情況,並引導您針對個人的實際情況來建立 pod 安全策略。

情況1:防止 Pod 以 Root 許可權執行
限制 pod 中的容器以 root 使用者身份執行,從而建立更安全的群集環境是 pod 安全策略最常見的用途之一。

情況2:阻止 Pod 訪問某些卷型別

作為叢集管理者,您可能希望限制容器的可用儲存選擇,以最小化成本或阻止資訊訪問。這可以通過在 pod 安全策略的卷金鑰中指定可用卷型別來實現。

情況3:防止 Pod 訪問主機埠

另一個常見的安全問題是容器可以訪問主機資源,如主機埠或網路介面。 Pod 安全策略允許叢集管理員實施深入的安全規則來限制此類訪問。


將您的第一個映象釋出到 Docker Hub

自顧不暇的系統管理員如何面對開發人員的“Challenge”?|航海日誌 Vol.20

感謝各位關注我們之前關於 Docker 的推文,讓我們潛入探索更多吧。你們已經明白瞭如何執行一個容器並且拉取映象,現在我們要為別人釋出我們的映象。我們需要一些什麼東西呢?

  • Docker檔案

  • 你的應用程式

為什麼我們需要Docker檔案呢?

按以往的傳統,我們有一個應用程式(假設是 Python 應用),那麼我就需要在計算機中安裝一個 Python 的執行環境(或者所有的依賴)。這也產生了一個問題:當你在本地,或者是在伺服器上執行該應用程式時,執行環境必須與我們的相同。當基於 Docker 執行時,你不再需要任何東西(不需要環境)。你可以將可移植的 Python 環境作為映象,不再需要安裝。然後,你的構建可以將應用程式程式碼和基本 Python 映象包含在一起,確保應用程式,其依賴關係和環境都一起執行。這些可移植的映象被稱為 Docker 檔案。

Docker 檔案是容器中的環境檔案,它有助於為你的容器建立一個隔離的環境。比如哪些埠將暴露於外部,哪些檔案你想要“複製”到環境中。之後,你在這個 Docker 檔案中定義的應用程式的構建將在任何地方都正常執行。

讓我們建立一個新目錄並建立一個 Docker 檔案。

FROM python:3.6WORKDIR /appADD . /appRUN pip install -r requirements.txtEXPOSE 80ENV NAME worldCMD [“python”, “app.py”]
複製程式碼

現在你已經建立好了 Docker 檔案。你可以看到它的語法非常簡單易懂。

下一步是建立一個 python 應用。

from flask import Flaskimport osimport socketapp = Flask(__name__)@app.route("/")def hello():html = "<h3>Hello {name}!</h3>" "<b>Hostname:</b> {hostname}<br/>"return html.format(name=os.getenv("NAME", "world"), hostname=socket.gethostname())if __name__ == "__main__":app.run(host=`0.0.0.0`, port=80)
複製程式碼

OK ! 你已經建立完了所有的必要檔案,現在開始構建你的應用吧。

使用ls指令檢視所有檔案:

$ lsapp.py requirements.txt Dockerfile複製程式碼

建立映象:

docker build -t imagebuildinginprocess .
複製程式碼

新建的映象在哪呢?它在本地的映象登錄檔中。

$ docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEimagebuildinginprocess latest 4728a04a9d39 14 minutes ago 694MB複製程式碼

執行它們。

docker run -p 4000:80 imagebuildinginprocess
複製程式碼

我們在這裡所做的是將埠 4000 對映到容器暴露的 80 埠。你應該可以看到 Python 提示我們的應用被部署在埠 http://0.0.0.0:80 。但是事實上,資訊來源於內部的容器。它並不知道我們將 80 埠對映到了4000,使得服務的地址變成了 http://localhost:4000 。在瀏覽器中輸入該地址,我們就會在網頁上看到” Hellow World “和容器的編號。

我們將把我們的映象推向登錄檔,這樣我們就可以在任何地方使用它。Docker CLI 預設使用公共登錄檔。

用你的本地計算機登陸到 Docker 公共登錄檔。(如果你沒有賬號的話,去 cloud.docker.com 上註冊吧)

docker login
複製程式碼

給映象打標籤:命名映象的版本號。這不是必須的步驟,但是推薦你們這麼做。因為這可以很好的幫助我們進行版本管理。(就像 ubuntu:16.04 和 ubuntu:17.04 那樣)

docker tag imagebuildinginprocess rusrushal13/get-started:part1
複製程式碼


釋出映象:將你打過標籤的映象上傳到倉庫中。該操作完成後,你就可以在Docker Hub中看到你的新映象和拉取指令。

docker push rusrushal13/get-started:part1
複製程式碼

OK,大功告成,你已經成功的釋出了第一個映象!趕緊去 Docker Hub 中檢視一下吧。

這個 GitHub 上的倉庫有很大的參考價值,建議各位前去檢視。( https://github.com/jessfraz/dockerfiles)

這一期的『航海日誌』就到這裡,下期再浪~


參考連結

自顧不暇的系統管理員如何面對開發人員的“Challenge”?|航海日誌 Vol.20

相關文章