


-
提高主機硬體的使用率
-
虛擬機器移動性較強
-
資源的隔離性,某臺虛擬機器的宕機不影響其他虛擬機器的使用
-
易保護,易恢復

-
-
bare-metal hypervisors 特點
-
需要硬體支援
-
虛擬機器monitor作為主作業系統
-
執行效率高
-
-
-
典型系統
-
VMware5.5+
-
Xen3.0+
-
KVM
-
-
hosted hypervisors 特點
-
-
虛擬機器監視器作為應用程式執行在主作業系統環境內
-
效率較低
-
-
典型系統
-
Virtual Box
-
early VMware5.5
-
early Xen3.0
-


-
Docker映象:Docker映象是用於建立Docker容器的模板
-
Docker容器(Container):容器是獨立執行的一個或一組應用
-
Docker客戶端(Client):Docker客戶端透過命令列或者其他工具使用Docker API與Docker的守護行程通訊。
-
Docker主機(Host):一個物理或者虛擬的機器用於執行Docker守護行程和容器
-
Docker倉庫(Registry):Docker倉庫用來儲存映象,可以理解為程式碼控制中的程式碼倉庫。Docker Hub提供了龐大的映象集合供使用。
-
Docker Machine:Docker Machine是一個簡化Docker安裝的命令列工具,透過一個簡單的命令列即可在相應的平臺上安裝Docker,比如VirtualBox、 Digital Ocean、Microsoft Azure
yum install -y epel-release ##安裝倉庫yum install docker-io ##安裝Dockerchkconfig docker on ## 加入開機自動啟動service docker start ## 啟動Docker
docker run hello-world

from flask import Flaskfrom redis import Redis, RedisErrorimport osimport socket# Connect to Redisredis = Redis(host="redis", db=0, socket_connect_timeout=2, socket_timeout=2)## 連線redisapp = Flask(__name__)@app.route("/")def hello():try:visits = redis.incr("counter") ##獲取計數器當前值並將其+1except RedisError:visits = "cannot connect to Redis, counter disabled"html = "
Hello {name}!
“ \
"Hostname: {hostname}
" \"Visits: {visits}"return html.format(name=os.getenv("NAME", "world"), hostname=socket.gethostname(), visits=visits) ##網頁渲染if __name__ == "__main__":app.run(host='0.0.0.0', port=80) ## 服務的設定為80埠
RedisFlask
# 將官方 Python 執行時用作父映象FROM python:2.7-slim# 將工作目錄設定為 /appWORKDIR /app# 將當前目錄內容複製到位於 /app 中的容器中ADD . /app# 安裝 requirements.txt 中指定的任何所需軟體包RUN pip install -r requirements.txt# 使埠 80 可供此容器外的環境使用EXPOSE 80# 定義環境變數ENV NAME World# 在容器啟動時執行 app.pyCMD ["python", "app.py"]

docker build -t bryantchangflasktest .


docker run -p 4001:80 bryantchangflasktest ##將4001埠對映到80埠

docker build -t bryantchangxy/bryantchangflasktest .docker push bryantchangxy/bryantchangflasktest:latest
docker build -t friendlyname .# 使用此目錄的 Dockerfile 建立映象docker run -p 4001:80 friendlyname # 執行埠 4001 到 80 的“友好名稱”對映docker run -d -p 4001:80 friendlyname # 內容相同,但在分離樣式下docker ps # 檢視所有正在執行的容器的串列docker stop # 平穩地停止指定的容器docker ps -a # 檢視所有容器的串列,甚至包含未執行的容器docker kill # 強制關閉指定的容器docker rm # 從此機器中刪除指定的容器docker rm $(docker ps -a -q) # 從此機器中刪除所有容器docker images -a # 顯示此機器上的所有映象docker rmi # 從此機器中刪除指定的映象docker rmi $(docker images -q) # 從此機器中刪除所有映象docker login # 使用您的 Docker 憑證登入此 CLI 會話docker tag username/repository:tag # 標記 以上傳到映象庫docker push username/repository:tag # 將已標記的映象上傳到映象庫docker run username/repository:tagdocker stack ls # 列出此 Docker 主機上所有正在執行的應用docker stack deploy -c # 執行指定的 Compose 檔案docker stack services # 列出與應用關聯的服務docker stack ps # 列出與應用關聯的正在執行的容器docker stack rm # 清除應用
web:build: .command: python app.pyports:- "4001:80"volumes:- .:/applinks:- redisredis:image: microbox/redis
docker-compose up -d

知識星球