Docker中容器和鏡像的概念
鏡像和容器類比于面向對象程式設計中的類和對象的概念
下面這個例子是從網上下載下傳一個 ubuntu:15.10的鏡像(類), 然後使用該鏡像在本地運作了一個容器(該類生成的執行個體), 這裡的容器就相當于一個精簡的ubuntu系統,我們在這個ubuntu系統裡運作了指令
一個例子
[email protected]:~$ docker run ubuntu:15.10 /bin/echo "Hello world"
Hello world
- docker: Docker 的二進制執行檔案。
- run:與前面的 docker 組合來運作一個容器。
- ubuntu:15.10指定要運作的鏡像,Docker首先從本地主機上查找鏡像是否存在,如果不存在,Docker 就會從鏡像倉庫 Docker Hub 下載下傳公共鏡像。
- /bin/echo “Hello world”: 在啟動的容器裡執行的指令
以上指令完整的意思可以解釋為:Docker 以 ubuntu15.10 鏡像建立一個新容器,然後在容器裡執行 bin/echo “Hello world”,然後輸出結果。
在docker容器中運作一個Web應用
這裡運作python中基于flask的Web應用
docker pull training/webapp # 首先下載下傳鏡像
docker run -d -P training/webapp python app.py # 運作容器
其中
-
-d
表示背景運作
-
P
表示容器的端口直接映射在本主機上
- 使用
檢視正在使用的容器,如下
[[email protected] ~] docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0ddbf3212ac4 training/webapp "python app.py" 18 minutes ago Up 18 minutes 0.0.0.0:32768->5000/tcp heuristic_stallman
我們發現我們的Web應用容器的資訊如下
CONTAINER ID (容器的唯一ID)
0ddbf3212ac4
IMAGE (該容器所屬的鏡像)
training/webapp
COMMAND (該容器執行的指令)
“python app.py”
CREATED (建立時間)
18 minutes ago
STATUS (狀态)
Up 18 minutes
PORTS (使用-P選項獨有的狀态,顯示占用的端口号和使用的網絡協定)
0.0.0.0:32768->5000/tcp
NAMES(該容器的"花名")
heuristic_stallman
既然是一個Web應用,我們在本地浏覽器上輸入IP位址和端口号,發現部署成功

- 在Web應用中 使用 -p 來指定容器端口号到主機端口号的映射
docker run -d -p 8080:8888 training/webapp python app.py
讓容器的8080端口映射到主機的8888端口
- 快捷的檢視WEB應用程式容器端口号 docker port +容器ID / 容器花名
docker port heuristic_stallman
5000/tcp -> 0.0.0.0:5000
- 檢視WEB應用程式容器内的标準輸出 docker logs + 容器ID / 容器花名
[[email protected] ~]docker logs heuristic_stallman
* Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
192.168.13.12 - - [11/Oct/2018 07:43:00] "GET / HTTP/1.1" 200 -
192.168.13.12 - - [11/Oct/2018 07:43:01] "GET /favicon.ico HTTP/1.1" 404 -
- 檢視WEB應用程式容器内部的程序 docker top
- 檢視WEB應用程式容器 docker inspect
-
容器的啟動停止删除 分别對應 docekr run/stop/rm + 容器ID / 容器花名
注意删除前必須停止容器