1. 程式人生 > 其它 >Docker概述及Docker映象

Docker概述及Docker映象

目錄

今日內容概述

1.Docker介紹
2.Docker安裝
3.Docker映象命令

今日內容詳細

1.Docker介紹

什麼是容器?

容器就是在隔離的環境中執行的一個程序,如果程序停止,容器就會退出。隔離的環境擁有自己的檔案系統,ip地址,主機名等。
容器直接執行在作業系統核心空間之上的使用者空間,因此容器虛擬化也稱為“作業系統級虛擬化”,容器技術可以讓多個獨立的使用者空間執行在同一臺宿主機上。

什麼是Docker?

Docker是一個開源專案,誕生於2013年初,最初是dotCloud公司內部的一個業餘專案。它基於Google公司推出的Go語言實現。專案後來加入了Linux基金會,遵從了Apache2.0協議,專案程式碼在GitHub上進行維護。Docker自開源後受到廣泛的關注和討論,以至於dotCloud公司後來都改名為DockerInc。Redhat已經在其RHEL6.5中集中支援Docker;Google也在其PaaS產品中廣泛應用。Docker專案的目標是實現輕量級的作業系統虛擬化解決方案。Docker的基礎是Linux容器(LXC)等技術。在LXC的基礎上Docker進行了進一步的封裝,讓使用者不需要去關心容器的管理,使得操作更為簡便。使用者操作Docker的容器就像操作一個快速輕量級的虛擬機器一樣簡單。Docker可以讓開發者打包他們的應用以及依賴包到一個輕量級、可移植的容器中,然後釋出到任何流行的Linux機器上,也可以實現虛擬化。容器是完全使用沙箱機制,相互之間不會有任何介面(類似iPhone的app),更重要的是容器效能開銷極低。

為什麼要使用docker?

1.)Docker容器虛擬化的好處

在雲時代,開發者建立的應用必須要能很方便地在網路上傳播,也就是說應用必須脫離底層物理硬體的限制;同時必須滿足“任何時間任何地點”可獲取可使用的特點。因此,開發者們需要一種新型的建立分散式應用程式的方式,快速分發部署,而這正是Docker所能夠提供的最大優勢。
Docker提供了一種更為聰明的方式,通過容器來打包應用、解耦應用和執行平臺。這意味著遷移的時候,只需要在新的伺服器上啟動需要的容器就可以了,無論新舊伺服器是否是同一類別的平臺。這無疑幫助我們節約了大量的寶貴時間,並降低部署過程出現問題的風險。

2.)Docker在開發和運維中的優勢

    對於開發和運維人員來說,最夢寐以求的效果可能就是一次建立和配置,之後可以在任意地方、任意時間讓應用正常執行,而Docker恰恰可以實現這一中級目標。具體來說,在開發和運維過程中,Docker具有以下幾個方面的優勢:
 
1、更快的交付和部署:
    使用Docker,開發人員可以使用映象來快速構建一套標準的開發環境;開發完之後,測試和運維人員可以直接使用完全相同的環境來部署程式碼。只要是開發測試過的程式碼,就可以確保在生產環境無縫執行。Docker可以快速建立和刪除容器,實現快速迭代,節約開發、測試及部署的時間。
 
2、更高效的利用資源:
    執行Docker容器不需要額外的虛擬化管理程式的支援,Docker是核心級的虛擬化,可以實現更高的效能,同時對資源的額外需求很低,與傳統的虛擬機器方式相比,Docker的效能要提高1~2個數量級。
 
3、更輕鬆的遷移和擴充套件:
    Docker容器幾乎可以在任意的平臺上執行,包括物理機、虛擬機器、公有云、私有云、個人電腦等等,同時支援主流的作業系統發行版本。這種相容效能讓使用者可以在不同的平臺之間輕鬆的遷移應用。
 
4、更輕鬆的管理和更新:
    使用Dockerfile,只需要小小的配置修改,就可以替代以往大量的更新工作。所有的修改都以增量的方式被分發和更新,從而實現自動化並且高效的容器管理。
 
5、解決異構環境

Docker容器與傳統虛擬化的區別

Docker以及其他容器技術,都屬於作業系統虛擬化範疇,作業系統虛擬化最大的特點就是不需要額外的supervisor支援。Docker虛擬化方式之所以有眾多優勢,跟作業系統虛擬化技術自身的設計和實現分不開。
傳統方式是在硬體層面實現虛擬化,需要有額外的虛擬機器管理應用和虛擬機器作業系統層。Docker容器時在作業系統層面實現虛擬化,直接複用本地主機的作業系統,因此更加輕量級。
特性 Docker VM
啟動速度 秒級 分鐘級
硬碟使用 一般為MB 一般為GB
效能 接近原生 原生
系統支援量 單機可支援上千個容器 一般為幾十個
隔離性 程序級隔離 完全隔離

Docker的優勢

作為一種輕量級的虛擬化方式,Docker在執行應用上跟傳統的虛擬機器的方式相比,具有的優勢有:
1.Docker容器啟動更快,啟動與停止可以實現秒級,相比傳統的虛擬機器方式(分鐘級)可要快很多。

2.Docker容器對系統資源需求很少,單臺機器可以同時執行上千個Docker容器。

3.Docker通過類似git設計理念的操作來方便使用者獲取、分發和更新應用映象,儲存複用,增量更新

4.Docker通過Dockerfile支援靈活的自動化建立和部署機制,可以提高工作效率,並標準化流程。

Docker的核心概念

Docker中有三個核心概念:映象、容器和倉庫。因此,準確把握這三大概念對掌握Docker技術尤為重要。

1.)映象(Image)

Docker映象(Image),就相當於是一個root檔案系統。比如官方映象ubuntu:16.04就包含了完整的一套Ubuntu16.04最小系統的root檔案系統。
# 用來啟動Docker的模板,映象一般存放在映象倉庫中

2.)容器(Container)

映象(Image)和容器(Container)的關係,就像是面向物件程式設計中的類和例項一樣,映象是靜態的定義,容器是映象執行時的實體。容器可以被建立、啟動、停止、刪除、暫停等
# 容器中沒有重啟這個概念

3)倉庫(Repository)

倉庫就很好理解了,就是儲存映象的倉庫,當我們構建好映象後,需要存放在倉庫中,當我們需要啟動一個映象時,可以從倉庫中下載下來。
映象倉庫地址:https://hub.docker.com/search?type=image

# 映象倉庫分類:
官方倉庫:hub.docker.com
阿里雲私有倉庫:https://cr.console.aliyun.com/cn-hangzhou/instance/repositories
自建倉庫:Harbor

2.Docker安裝

Docker分為企業版與社群辦,我們學習使用安裝社群版

企業版 : Docker
社群版 : Docker-ce

https://mirrors.aliyun.com/docker-ce/linux/centos/7/x86_64/stable/Packages/

1.如果之前安裝過docker,解除安裝
yum remove docker docker-common docker-selinux docker-engine -y
# 我們要考慮到的之後與kubernetes的相容性問題,不會報莫名其妙的錯誤,我們選擇安裝docker-ce-19.03.9

2.安裝依賴包
yum install -y yum-utils device-mapper-persistent-data lvm2

3.安裝yum源
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo

4.配置阿里雲映象加速
登入自己的阿里雲賬號,找到容器映象服務 ACR,點選管理控制檯,在“映象工具處”找到映象加速器,複製加速器地址	# 每個人的不一樣
mkdir -p /etc/docker
cat >> /etc/docker/daemon.json <<EOF
{
"registry-mirrors": ["https://gfctbouf.mirror.aliyuncs.com"]
}
EOF

systemctl daemon-reload

5.安裝Docker
yum install docker-ce-19.03.9 -y

6.啟動並設定開機自啟
systemctl enable --now docker

7.檢查Docker是否啟動成功
docker info
docker version

3.Docker映象命令

Docker映象常用命令

1、docker search [映象名稱]                   # 搜尋映象, 優先選官方,stars數量多
 
2、docker pull [映象名稱]                     # 拉取映象(下載映象),注意版本
 
3、docker push [映象標籤]                     # 推送映象(上傳映象)
 
4、docker load < [包名稱]                      # 將包匯入映象
   例子: docker load  -i  docker_nginx.tar.gz
 
5、docker save [映象名稱|映象ID] > [包名稱]    # 將包匯出映象匯出映象
   例子:docker save centos:7 -o docker_centos7.tar.gz
 
6、docker image  ls                          # 檢視映象列表
 
7、docker rmi [映象名稱或者映象ID]            # 刪除映象
 
8、docker tag [映象ID]  映象標籤              # 給映象打標籤

Docker映象命令使用及進階

搜尋映象search

搜尋映象search
docker serrch [映象命令]
# 引數
-f 篩選
# 搜尋星標大於等於600的MySQL映象
docker search mysql -f stars=600

# 搜尋官方映象
docker search -f is-official=true mysql

拉取映象pull

docker pull [映象名稱]

# 案例:
docker pull redis
Using default tag: latest
latest: Pulling from library/redis
 
# 映象層:
a076a628af6f: Pull complete 
f40dd07fe7be: Pull complete 
ce21c8a3dbee: Pull complete 
ee99c35818f8: Pull complete 
56b9a72e68ff: Pull complete 
3f703e7f380f: Pull complete 
 
# 映象ID號,全球唯一
Digest: sha256:0f97c1c9daf5b69b93390ccbe8d3e2971617ec4801fd0882c72bf7cad3a13494
 
# 映象下載狀態
Status: Downloaded newer image for redis:latest
 
# 映象的全稱(映象的tag)
docker.io/library/redis:latest

檢視當前映象列表images

docker images 或者 docker image ls

# 引數
-q: 只顯示映象ID

獲取映象詳細資訊

# 格式
docker inspect [映象名稱或映象ID]

# 引數
-f: 格式化輸出

# 案例:
docker inspect -f '{{.id}}' 621ceef7494a

登入映象倉庫login

docker login
# 預設情況下,docker login登入的是官方倉庫,如果登入其他映象倉庫則需要指定映象倉庫的URL連線

# 引數
--username|-u : 指定使用者名稱
--password|-p : 指定密碼

docker login --username=jerrylty98 registry.cn-hangzhou.aliyuncs.com

# 登入阿里雲Docker Registry
docker login --username=jerryl**** registry.cn-hangzhou.aliyuncs.com
# 登入名為阿里雲賬號全名,密碼為開通服務時設定的密碼

映象標籤tag

# 映象標籤的構成
docker.io/library/redis:latest
docker.io  : 映象倉庫的URL
library    :映象倉庫名稱空間
redis      : 映象名稱
latest     : 映象版本號

# 打標籤
docker tag [映象ID] URL:映象標籤	# 自定義

docker tag ad4c705f24d3  registry.cn-hangzhou.aliyuncs.com/jerrytest98/test:thelast

映象上傳push

# 格式
docker push [映象標籤] 
# 注意,要想上傳映象,首先得登入映象倉庫,其次設定對應映象倉庫的tag

docker push registry.cn-hangzhou.aliyuncs.com/jerrytest98/test:thelast
The push refers to repository [registry.cn-hangzhou.aliyuncs.com/jerrytest98/test]
fac15b2caa0c: Pushed 
f8bf5746ac5a: Pushed 
d11eedadbd34: Pushed 
797e583d8c50: Pushed 
bf9ce92e8516: Pushed 
d000633a5681: Pushed 
thelast: digest: sha256:6fe11397c34b973f3c957f0da22b09b7f11a4802e1db47aef54c29e2813cc125 size: 1570

映象刪除rmi

# 格式
    docker rmi [映象名稱或者映象ID]
# 例項
    [root@docker01 ~]# docker rmi redis
    Untagged: redis:latest
    Untagged: redis@sha256:0f97c1c9daf5b69b93390ccbe8d3e2971617ec4801fd0882c72bf7cad3a13494
# 引數
    -f  : 強制刪除
 
# 例項
    [root@docker01 ~]# docker rmi -f 621ceef7494a

清空映象image prune

docker image prune命令用於刪除未使用的映象,如果指定了-a,還將刪除所有未被容器引用的映象
# 格式
    docker image prune
 
 # 引數
 -a : 刪除所有映象
 
# 例項
[root@docker01 ~]# docker image prune 
WARNING! This will remove all dangling images.
Are you sure you want to continue? [y/N] y
Total reclaimed space: 0B
 
docker rmi -f $( docker images -q )
 
oot@docker01 ~]# docker image prune -a
WARNING! This will remove all images without at least one container associated to them.
Are you sure you want to continue? [y/N] y
Deleted Images:
untagged: nginx:latest
untagged: nginx@sha256:10b8cc432d56da8b61b070f4c7d2543a9ed17c2b23010b43af434fd40e2ca4aa
deleted: sha256:f6d0b4767a6c466c178bf718f99bea0d3742b26679081e52dbf8e0c7c4c42d74
deleted: sha256:4dfe71c4470c5920135f00af483556b09911b72547113512d36dc29bfc5f7445
deleted: sha256:3c90a0917c79b758d74b7040f62d17a7680cd14077f734330b1994a2985283b8
deleted: sha256:a1c538085c6f891424160d8db120ea093d4dda393e94cd4713e3fff3c82299b5
deleted: sha256:a3ee2510dcf02c980d7aff635909612006fd1662084d6225e52e769b984abeb5
untagged: redis:latest
untagged: redis@sha256:0f97c1c9daf5b69b93390ccbe8d3e2971617ec4801fd0882c72bf7cad3a13494
deleted: sha256:621ceef7494adfcbe0e523593639f6625795cc0dc91a750629367a8c7b3ccebb
deleted: sha256:de66cfbf4712b8ba9ef292e08ef7487be26d9d21b350548e400ae351405d820e
deleted: sha256:79b2381e35429e8fc04d31b3445f069c22d288bf5c4cba7b7c10004ff78ae201
deleted: sha256:1d047d19be363b00139990d4d7f392dabdb0809dbc9d0fbe67c1f15b8caed27a
deleted: sha256:8c41f4e708c37059df28ae1cabc200a6db2fee45bd3a2cadcf70f2765bb68730
deleted: sha256:b51317bef36fe1900be48402c8a41fcd9cdb6b8950c10209f764473cb8323371
deleted: sha256:cb42413394c4059335228c137fe884ff3ab8946a014014309676c25e3ac86864
 
Total reclaimed space: 168MB