-
提高主機硬體的使用率
-
虛擬機器移動性較強
-
資源的隔離性,某臺虛擬機器的宕機不影響其他虛擬機器的使用
-
易保護,易恢復
-
-
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 ##安裝Docker
chkconfig docker on ## 加入開機自動啟動
service docker start ## 啟動Docker
docker run hello-world
from flask import Flask
from redis import Redis, RedisError
import os
import socket
# Connect to Redis
redis = Redis(host="redis", db=0, socket_connect_timeout=2, socket_timeout=2)## 連線redis
app = Flask(__name__)
@app.route("/")
def hello():
try:
visits = redis.incr("counter") ##獲取計數器當前值並將其+1
except 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埠
Redis
Flask
# 將官方 Python 執行時用作父映象
FROM python:2.7-slim
# 將工作目錄設定為 /app
WORKDIR /app
# 將當前目錄內容複製到位於 /app 中的容器中
ADD . /app
# 安裝 requirements.txt 中指定的任何所需軟體包
RUN pip install -r requirements.txt
# 使埠 80 可供此容器外的環境使用
EXPOSE 80
# 定義環境變數
ENV NAME World
# 在容器啟動時執行 app.py
CMD ["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:tag
docker stack ls # 列出此 Docker 主機上所有正在執行的應用
docker stack deploy -c # 執行指定的 Compose 檔案
docker stack services # 列出與應用關聯的服務
docker stack ps # 列出與應用關聯的正在執行的容器
docker stack rm # 清除應用
web:
build: .
command: python app.py
ports:
- "4001:80"
volumes:
- .:/app
links:
- redis
redis:
image: microbox/redis
docker-compose up -d