➤ 自顧不暇的系統管理員如何面對開發人員的“Challenge”?
6 月 27 日,開展了一個關於“系統管理員 Docker ”的網路研討會。這個研討會基於日常生活中的常見場景:系統管理員坐在桌旁忙自己的事情的時候,開發人員走了進來,說:“這是新的應用程式,它被打包在 Docker 映象裡了,請儘快部署。”因此,該會議旨在為系統管理員提供管理容器化應用程式的一些指導。(視訊地址(需翻牆):https://www.youtube.com/watch?v=kT76aLugp48)
➤ 北美 Moby 峰會與開源峰會
下一屆 Moby 峰會將於 2017 年 9 月 14 日在洛杉磯舉行,作為北美開源峰會的一部分。繼以前版本的成功之後,我們將保持同樣的會議形式,其中包括早上的短暫的技術講座/演示,下午的一些非正式的交流會議。於此同時,我們正在尋找可以談論他們的 Moby 專案的使用情況的人。
➤ 使用 Docker Secrets 保護 Atsea App
將應用程式配置資訊作為環境變數傳遞曾經被認為是 12 因素應用程式中的最佳實踐。雖然這種做法可以在日誌中顯示資訊,但是它難以追蹤資訊暴露的方式和時間。與使用環境變數不同的是,Docker 使用 secrets 來管理系統配置和機密資訊。
➤ 使用 Pod 安全策略保護 Kubernetes 群集
隨著容器技術的逐漸成型和越來越多的應用程式向著叢集環境轉型,明確和實施叢集安全策略變得越來越重要。叢集安全策略提供了一個框架,來確保 pod 和容器僅僅只能使用適當的許可權和訪問有限的資源集。安全策略還為叢集管理者提供了一種方法,以通過限制特定成員、組或名稱空間的可用功能,來控制資源的創造。
本文將向您介紹 Kubernetes 中的 pod 安全策略。由於 pod 安全策略可能特定於組織的規則和特定應用程式的要求,所以沒有一個適合所有情況的方法 -我們將討論三種常見情況,並引導您針對個人的實際情況來建立 pod 安全策略。
情況1:防止 Pod 以 Root 許可權執行
限制 pod 中的容器以 root 使用者身份執行,從而建立更安全的群集環境是 pod 安全策略最常見的用途之一。
情況2:阻止 Pod 訪問某些卷型別
作為叢集管理者,您可能希望限制容器的可用儲存選擇,以最小化成本或阻止資訊訪問。這可以通過在 pod 安全策略的卷金鑰中指定可用卷型別來實現。
情況3:防止 Pod 訪問主機埠
另一個常見的安全問題是容器可以訪問主機資源,如主機埠或網路介面。 Pod 安全策略允許叢集管理員實施深入的安全規則來限制此類訪問。
➤ 將您的第一個映象釋出到 Docker Hub
感謝各位關注我們之前關於 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)
這一期的『航海日誌』就到這裡,下期再浪~
參考連結
-
-
-
-
https://docs.bitnami.com/kubernetes/how-to/secure-kubernetes-cluster-psp/#assumptions-and-prerequisites
-
https://dev.to/rusrushal13/publish-your-first-image-to-docker-hub