一.簡介
Docker 是一個開源的應用容器引擎,基於 Go 語言 並遵從 Apache2.0 協議開源。
Docker 可以讓開發者打包他們的應用以及依賴包到一個輕量級、可移植的容器中,然後發佈到任何流行的 Linux 機器上,也可以實現虛擬化。
容器是完全使用沙箱機制,相互之間不會有任何接口(類似 iPhone 的 app),更重要的是容器性能開銷極低。
二.應用場景
1.Web 應用的自動化打包和發佈。
2.自動化測試和持續集成、發佈。
3.在服務型環境中部署和調整數據庫或其他的後臺應用。
4.從頭編譯或者擴展現有的 OpenShift 或 Cloud Foundry 平臺來搭建自己的 PaaS 環境。
三.優點
Docker 是一個用於開發,交付和運行應用程序的開放平臺。Docker 使您能夠將應用程序與基礎架構分開,從而可以快速交付軟件。藉助 Docker,您可以與管理應用程序相同的方式來管理基礎架構。通過利用 Docker 的方法來快速交付,測試和部署代碼,您可以大大減少編寫代碼和在生產環境中運行代碼之間的延遲。
1.快速,一致地交付您的應用程序
2.響應式部署和擴展
3.在同一硬件上運行更多工作負載
四.Docker架構
Docker 包括三個基本概念:
鏡像(Image):Docker 鏡像(Image),就相當於是一個 root 文件系統。Docker 鏡像是用於創建 Docker 容器的模板,比如 Ubuntu 系統。
容器(Container):容器是獨立運行的一個或一組應用,是鏡像運行時的實體。鏡像(Image)和容器(Container)的關係,就像是面向對象程序設計中的類和實例一樣,鏡像是靜態的定義,容器是鏡像運行時的實體。容器可以被創建、啓動、停止、刪除、暫停等。
倉庫(Repository):倉庫可看成一個代碼控制中心,用來保存鏡像。Docker Hub(https://hub.docker.com) 提供了龐大的鏡像集合供使用。一個 Docker Registry 中可以包含多個倉庫(Repository);每個倉庫可以包含多個標籤(Tag);每個標籤對應一個鏡像。通常,一個倉庫會包含同一個軟件不同版本的鏡像,而標籤就常用於對應該軟件的各個版本。我們可以通過 <倉庫名>:<標籤> 的格式來指定具體是這個軟件哪個版本的鏡像。如果不給出標籤,將以 latest 作爲默認標籤。
Docker 使用客戶端-服務器 (C/S) 架構模式,使用遠程API來管理和創建Docker容器。
Docker 容器通過 Docker 鏡像來創建。
容器與鏡像的關係類似於面向對象編程中的對象與類。
五.Docker鏡像使用
1.列出本地主機上的鏡像列表
docker images
各個選項說明:
REPOSITORY:表示鏡像的倉庫源
TAG:鏡像的標籤,同一倉庫源可以有多個 TAG,代表這個倉庫源的不同個版本,如 ubuntu 倉庫源裏,有 15.10、14.04 等多個不同的版本,我們使用 REPOSITORY:TAG 來定義不同的鏡像。
IMAGE ID:鏡像ID
CREATED:鏡像創建時間
SIZE:鏡像大小
2.查找鏡像
docker search XXX
NAME: 鏡像倉庫源的名稱
DESCRIPTION: 鏡像的描述
OFFICIAL: 是否 docker 官方發佈
stars: 類似 Github 裏面的 star,表示點贊、喜歡的意思。
AUTOMATED: 自動構建。
3.從倉庫下載,獲取一個新的鏡像
docker pull XXX
4.刪除鏡像
docker rmi XXX
5.創建鏡像
當我們從 docker 鏡像倉庫中下載的鏡像不能滿足我們的需求時,我們可以通過以下兩種方式對鏡像進行更改。
(1)從已經創建的容器中更新鏡像,並且提交這個鏡像
(2)使用 Dockerfile 指令來創建一個新的鏡像
5.1更新鏡像
(1)使用版本爲20.04的基礎鏡像ubuntu鏡像來創建一個容器
docker run -it ubuntu:20.04 /bin/bash
參數說明:
-i: 交互式操作。
-t: 終端。
ubuntu:20.04: 這是指用 ubuntu 20.04 版本鏡像爲基礎來啓動容器。
/bin/bash:放在鏡像名後的是命令,希望有個交互式 Shell,因此用的是 /bin/bash。
如果不指定一個鏡像的版本標籤,例如只使用 ubuntu,docker 將默認使用 ubuntu:latest 鏡像。
(2)在運行的容器內使用 apt-get update 命令進行更新。
(3)在完成操作之後,輸入 exit 命令來退出這個容器。
(4)docker commit 來提交容器副本。
各個參數說明:
-m: 提交的描述信息
-a: 指定鏡像作者
3a299d3e9ea4:容器 ID
lulu/ubuntu:new: 指定要創建的目標鏡像名
(5)使用新鏡像 lulu/ubuntu:new 來啓動一個容器
5.2構建鏡像
使用命令 docker build , 從零開始來創建一個新的鏡像。爲此,我們需要創建一個 Dockerfile 文件,其中包含一組指令來告訴 Docker 如何構建新鏡像。
每一個指令都會在鏡像上創建一個新的層,每一個指令的前綴都必須是大寫的。
第一條FROM,指定使用哪個鏡像源
RUN 指令告訴docker 在鏡像內執行命令,安裝了什麼。然後,我們使用 Dockerfile 文件,通過 docker build 命令來執行dockerfile文件中的命令構建一個鏡像。
參數說明:
-t :指定要創建的目標鏡像名
. :Dockerfile 文件所在目錄,可以指定Dockerfile 的絕對路徑
使用docker images 查看創建的鏡像已經在列表中存在,鏡像ID爲 19a96a0b9bdd
6.設置鏡像標籤,爲鏡像添加一個新的標籤
docker tag 鏡像ID 鏡像源名(repository name):新的標籤名(tag)
7.導出鏡像,將指定鏡像保存成tar歸檔文件
docker save -o 文件名.tar 鏡像名
8.導入鏡像
docker load --input 文件路徑/文件名.tar