docker介紹、安裝及映象管理
虛擬化簡介
虛擬化(英語:Virtualization)是一種資源管理技術,是將計算機的各種實體資源,如伺服器、網路、記憶體及儲存等,予以抽象、轉換後呈現出來,打破實體結構間的不可切割的障礙,使使用者可以比原本的組態更好的方式來應用這些資源。這些資源的新虛擬部分是不受現有資源的架設方式,地域或物理組態所限制。一般所指的虛擬化資源包括計算能力和資料儲存。docker介紹
Docker 是PaaS提供商 dotCloud 開源的一個基於LXC的高階容器引擎,原始碼託管在Github上, 基於go語言並遵從Apache2.0協議開源。 Docker自2013年以來非常火熱,無論是從 github 上的程式碼活躍度,還是docker架構
傳統虛擬化分層抽象和docker虛擬化分層抽象的
docker虛擬化實施有以下3個概念
- docker映象:映象是一個靜態模板,與常見的iso映象類似,是一個樣板,不能直接修改,可以通過封裝生成
- docker容器:基於docker映象執行啟動的應用或系統,稱之為一個docker容器或docker虛擬機器
- docker倉庫:docker倉庫是存放docker映象的地方,常見分為公開倉庫和私有倉庫兩種形式
docker體系結構
docker 安裝
1、在centos7.6 1810版本安裝docker,我們需要開啟centos-extra的倉庫,預設是開啟的
2、安裝yum-utils工具(提供yum-config-manager
實用程式)
[root@localhost yum.repos.d]# yum install yum-utils -y
3、新增docker的軟體倉庫
[root@localhost yum.repos.d]# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
4、安裝docker引擎
[root@localhost yum.repos.d]# yum install docker-ce docker-ce-cli containerd.io -y
如果這一步安裝報錯,報錯原因就是docker-ce裡面的runc和podman(紅帽容器實現)底層的軟體包在支援上衝突了,可以使用 --allowerasing引數,替換掉衝突的軟體包。
[root@localhost yum.repos.d]# yum install docker-ce docker-ce-cli containerd.io --allowerasing -y
5.啟動docker
[root@localhost yum.repos.d]# systemctl start docker
docker映象的概念
docker-ce安裝完成就相當於裝好了docker-cli和docker-ce程序,啟動docker-ce程序就算啟動了docker,但是我們此時沒有直接使用的docker倉庫,映象就是一個裝好了特定應用的東西,映象是靜態的,容器是動態的,映象執行起來就是容器。這個概念類似於程式和程序,程式是靜態的,程序是動態的;映象只會佔用磁碟空間,容器會佔用磁碟空間的同時還會消耗cpu和記憶體資源。
映象一般存放在映象倉庫中,然後通過docker-cli提供的命令從映象倉庫中拉取映象,然後將映象儲存到本地,以便後續使用。映象倉庫中的映象都是經過壓縮的,壓縮的目的在於減小映象的大小,以便在傳輸過程中(映象拉取)減小頻寬的壓力。docker的客戶端在拉取映象後會對其進行解壓。預設情況docker需要配置映象倉庫。一般生產環境下會配置私有的映象倉庫,保證映象傳輸的安全和速度。
配置dockerhub映象加速器
利用阿里雲進行配置映象加速
docker映象管理
docker映象
docker映象含有啟動容器所需要的檔案系統和內容,因此,其用於建立並啟動docker容器
docker映象採用分層構建機制,最底層為bootfs,其之為rootfs
- bootfs:用於系統引導的檔案系統,包括bootloader和kernel,容器啟動完成後會被解除安裝以節省記憶體資源
- rootfs:位於rootfs上,表現為docker容器的根檔案系統
傳統模式中,系統啟動時,核心掛載rootfs時會首先將其掛載為“只讀”模式,完整性自檢完成後將其重新掛載為只讀模式
docker中,rootfs由核心掛在為“只讀”模式,而後通過“聯合掛載”技術額外掛載一個“可寫”層
Docker Image Layer
位於下層的映象稱為父映象(parent image),最底層的稱之為基礎映象(Base Image)
最上層為“讀寫”層,其下層為“只讀”層
想要聯合掛載需要特定的檔案系統Aufs
Aufs
advance multi-layered unification filesystem:高階多層統一檔案系統
- 用於為linux檔案系統實現“聯合掛載”
- aufs是之前的UnionFS的重新實現,2006年由Junjiro Okajima開發
- Docker最初使用aufs作為容器檔案系統層,它目前仍作為儲存後端之一來支援
- aufs的競爭產品是overlayfs,後者後者自從3.18版本開始被合併到了linux核心
- docker的分層映象,除了aufs,docker還支援btrfs,devicemapper和vfs等
在Ubuntu系統下,預設檔案系統為aufs,而在CentOS7上,用的是devicemapper
Docker Registry
啟動容器時,docker daemon會試圖從本地獲取相關映象,本地映象不存在時,將從Registry中下載該映象儲存至本地中
映象拉取 docker pull 映象名稱
docker pull 預設是從dockerhub上拉取映象的,如果指定了映象倉庫,則從倉庫拉取,前提是沒有配置映象倉庫的配置檔案
[root@node1 ~]# docker pull centos #拉取centos 映象,預設是latest版本的,也可以指定版本[TAG]拉取
檢視映象 docker images
[root@localhost docker]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE hello-world latest feb5d9fea6a5 3 weeks ago 13.3kB centos latest 5d0da3dc9764 4 weeks ago 231MB
刪除映象 docker image rm [REPOSITORY]:[TAG]
不建議通過IMAGE ID 刪除映象,有可能會有不同的REPOSITORY和TAG具有相同的IMAGE ID,可能會出現誤刪除,如果不指定TAG,會預設刪除latest。
不能刪除正在執行的docker映象,必須要將容器停止才能刪除
[root@bogon ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest feb5d9fea6a5 3 weeks ago 13.3kB
centos latest 5d0da3dc9764 4 weeks ago 231MB
[root@bogon ~]# docker image rm hello-world
Untagged: hello-world:latest
Untagged: hello-world@sha256:37a0b92b08d4919615c3ee023f7ddb068d12b8387475d64c622ac30f45c29c51
Deleted: sha256:feb5d9fea6a5e9606aa995e879d862b825965ba48de054caab5ef356dc6b3412
Deleted: sha256:e07ee1baac5fae6a26f30cabfe54a36d3402f96afda318fe0a96cec4ca393359
[root@bogon ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest 5d0da3dc9764 4 weeks ago 231MB #hello-world 這個映象已經刪除了
docker映象的匯出
docker save
-o 表示輸出為指定檔案
[root@bogon ~]# docker save centos:latest -o centos_latest_image.tar #將centos latest這個版本的映象匯出成為centos_latest_image.tar [root@bogon ~]# ls anaconda-ks.cfg centos_latest_image.tar check.sh hosts [root@bogon ~]# scp centos_latest_image.tar [email protected]:~/centos_latest_image.tar centos_latest_image.tar #通過scp命令將centos_latest_image.tar這個包傳到另一臺主機上
100% 228MB 73.5MB/s 00:03 [root@bogon ~]#
映象匯出適合在沒有外網環境下進行安裝docker映象操作與docker load 相結合使用
docker映象的匯入
docker load
-i 表示匯入指定的檔案
[root@node1 ~]# ls
anaconda-ks.cfg centos_latest_image.tar
[root@node1 ~]# docker load -i centos_latest_image.tar #將映象檔案匯入到docker image
74ddd0ec08fa: Loading layer [==================================================>] 238.6MB/238.6MB
Loaded image: centos:latest
[root@node1 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest 5d0da3dc9764 4 weeks ago 231MB
[root@node1 ~]#
使用docker hub建立自己的倉庫
docker hub 映象倉庫結構分為倉庫本身,倉庫裡面小倉庫,還有tag,docker hub倉庫名稱為docker.io,例如當我們想要從docker hub上拉取Ubuntu映象時,我們就從docker.io的大倉庫中找到Ubuntu這個小倉庫,找到小倉庫後,我們需要從Ubuntu這個小倉庫中拉取哪個tag的ubuntu 的映象。
docker pull docker.io/library/ubuntu:latest
首先登陸docker hub網頁https://registry.hub.docker.com/repository/create?namespace=lizhifengqwe
點選 Repositories建立倉庫
製作image映象(兩種方案)
第一種:使用hub倉庫中已有的環境,安裝自己使用的軟體環境後完成image建立。
第二種:通過Dockerfile,完成映象image的建立。
修改映象名稱標籤 (以centos:latest為例)
[root@node1 ~]# docker tag centos:latest lizhifengqwe/lizhifeng_public:centos-latest [root@node1 ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE centos latest 5d0da3dc9764 4 weeks ago 231MB lizhifengqwe/lizhifeng_public centos-latest 5d0da3dc9764 4 weeks ago 231MB
登陸docker hub
[root@node1 ~]# docker login Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one. Username: lizhifengqwe Password: WARNING! Your password will be stored unencrypted in /root/.docker/config.json. Configure a credential helper to remove this warning. See https://docs.docker.com/engine/reference/commandline/login/#credentials-store Login Succeeded
上傳映象到docker hub 倉庫
[root@node1 ~]# docker push lizhifengqwe/lizhifeng:centos-latest The push refers to repository [docker.io/lizhifengqwe/lizhifeng] 74ddd0ec08fa: Pushing [==> ] 13.13MB/231.3MB