1. 程式人生 > 其它 >docker介紹、安裝及映象管理

docker介紹、安裝及映象管理

虛擬化簡介

虛擬化英語:Virtualization)是一種資源管理技術,是將計算機的各種實體資源,如伺服器網路記憶體及儲存等,予以抽象、轉換後呈現出來,打破實體結構間的不可切割的障礙,使使用者可以比原本的組態更好的方式來應用這些資源。這些資源的新虛擬部分是不受現有資源的架設方式,地域或物理組態所限制。一般所指的虛擬化資源包括計算能力和資料儲存。

docker介紹

Docker 是PaaS提供商 dotCloud 開源的一個基於LXC的高階容器引擎,原始碼託管在Github上, 基於go語言並遵從Apache2.0協議開源。 Docker自2013年以來非常火熱,無論是從 github 上的程式碼活躍度,還是
Redhat
在RHEL6.5中整合對Docker的支援, 就連 Google 的 Compute Engine 也支援 docker 在其之上執行。

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