什麼是docker?
基於宿主機,對程式進行封裝隔離,屬於作業系統層面的虛擬化技術。因為隔離的程式獨立與宿主以及其他隔離的程式,稱為容器。
docker在容器的基礎上,進一步封裝,從檔案系統、網路埠到程式隔離。
為什麼用docker?
- 相比於普通虛擬機器,啟動速度更快
- 保證一致的執行環境
- 持續部署(建立自定義映象,一次性建立配置)
- 更輕鬆的遷徙(基於宿主機隔離出環境)
- 易於擴充套件(分層儲存)
Docker安裝
centos 7安裝
yum install docker
systemctl start docker
docker run hello-world(檢驗是否安裝成功)
映象image
映象相當於Linux的root檔案系統,包括了容器執行時所需的資源。不同於普通iso映象的是,docker的映象是分層儲存的,上一層是下一層的基礎。
命令
拉取映象---docker pull <域名/ip>:<埠> <使用者名稱/映象名>:<標籤>
映象列表---docker image ls
刪除映象---docker image rm <映象名/ID/>
自定義映象
映象的定製其實是定製每一層的檔案、配置。dockerfile是一個文字,其內包含了一條條指令,每一個指令構建一層,指令描述的是該層如何構建。
以下是構建jdk環境的命令
docker build -t <name/tag> .
容器container
容器即是程式,與宿主機隔離,並且擁有自己的名稱空間、網路配置(必須暴露埠給宿主機)等。容器與映象的關係可以理解為例項與類的關係。每一個容器啟動時,以映象層為基礎,在其上建立一個容器的儲存層。儲存層與容器生命週期一樣,容器銷燬時,儲存層也消失。
命令
建立容器並啟動---docker run --name <重新命名> -d -p <外部埠>:<內部埠> 映象
- 檢查是否存在指定映象,不存在就從公有倉庫下載
- 利用映象啟動容器
- 分配檔案系統,在映象層上建立一個儲存層
- 從宿主機配置的網橋介面中橋接一個虛擬介面到容器中
- 從地址池配置一個IP地址給容器
- 執行使用者指定的應用程式
啟動容器---docker start container
關閉容器---docker stop container
進入容器---docker exec container
容器列表---docker ps (檢視所有容器包括未啟動-a)
刪除容器---docker container rm <容器名>
倉庫
docker官方提供映象docker-registry,用於構建私有的倉庫。
docker run -d -p 5000:5000 --restart always --name registry registry複製程式碼
啟動好倉庫容器後,使用tag標記映象,並將映象push到倉庫
docker tag 【imgae】:【tag】【host】:【port】/【repository】:【tag】
docker push 【imgae】:【tag】
上傳私有倉庫後,查詢倉庫中已有映象
curl http://【host】:【port】/v2/catalog
網路管理
- 容器與宿主機隔離,網路也是相互隔離,容器擁有自己的ip。docker inspect 【container】獲取容器具體資訊
- 暴露內部埠對映宿主機
- 每個容器啟動時,預設的IP會有所變化,通常根據宿主機ip加上對映埠來使用