您好,登錄后才能下訂單哦!
Docker是在Linux容器里面運行的開源工具,是一種輕量級的虛擬機。其設計宗旨:Build,Ship and Run Any App,Anywhere,即通過對應組件的封裝、發布、部署、運行等生命周期的管理,達到組件級別的“一次封裝,到處運行”的目的。這里的組件,既可以是一個應用,也可以是一套服務,甚至是一個完整的操作系統。
Docker的三大核心概念:鏡像、容器、倉庫,安裝Docker以及圍繞鏡像和容器的具體操作。
1、Docker容器很快,啟動和停止可以在秒級實現,比傳統虛擬機要快很多。
2、Docker核心解決的問題是利用容器來時實現類似VM的功能,從而以更加節省的硬件資源提供給用戶更多的計算資源,所以Docker容器除了運行其中的應用之外,基本不消耗額外的系統資源,從而在保證性能的同時,減小了系統開銷,使得在一臺主機上同時運行數千個Docker容器成為可能。
3、Docker操作方便,還可以通過Dockerfile配置文件支持靈活的自動化創建和部署。
Docke之所以擁有眾多優勢,跟操作系統虛擬化自身的特點是分不開的。傳統虛擬機需要擁有額外的虛擬機管理程序。
1、鏡像(Image)
Docker的鏡像是創建容器的基礎,類似虛擬機的快照,可以理解為是一個面向Docker容器引擎的只讀模板,比如:一個鏡像可以是一個完整的CentOS操作系統環境,成為一個CentOS鏡像;可以是一個安裝了MySQL的應用程序,稱之為一個MySQL鏡像等等。
Docker提供了簡單的機制來創建和更新現有的鏡像,用戶也可以從網上下載已經做好的應用鏡像來直接使用。
2、容器(container)
Docker的容器是從鏡像創建的運行實列,它可以被啟動、停止和刪除。所創建的每一個容器都是相互隔離、互補可見的,可以保證平臺的安全性。還可以把容器看作是一個簡易版的Linux環境,Docker利用容器來運行和隔離應用。
3、倉庫(Repository)
Docker倉庫是用來集中保存鏡像的地方,當創建了自己的鏡像之后,可以使用push命令將它上傳到公共倉庫(Pulic)或者私有倉庫(Private),這樣一來當下次要在另一臺機器上使用這個鏡像的時候,只需要從倉庫上pull下來就可以了。
倉庫注冊服務器(Registry)是存放倉庫的地方,其中包含了多個倉庫,每個倉庫幾種存放某一類鏡像,并且使用不同的標簽來區分它們。目前最大的公共倉庫是DockerHUb,其中存放了數量龐大的鏡像供用戶下載使用。
4、Docker的安裝vi /etc/yum.repos.d/CentOS-Base.repo //配置yum源
在末行添加以下內容:
[docker-repo]
name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/main/centos/7/
enabled=1
gpgcheck=1
gpgkey=https://yum.dockerproject.org/gpg
yum install -y docker-engine //安裝Docker引擎
systemctl enable docker //開機自啟
systemctl start docker //啟動docker
Docker運行容器前需要本地存在對應的鏡像,如果不存在本地鏡像Docker就會嘗試從默認鏡像倉庫https://hub.docker.com 下載,這是由Docker官方維護的一個公共倉庫,可以滿足用戶的絕大部分需求。用戶也可以通過配置來使用自定義的鏡像倉庫。
1、搜索鏡像(默認從Docker Hub查詢)
獲取鏡像的三種方式:
1)下載鏡像(默認從Docker Hub下載)
2)把容器轉換為鏡像
3)制作鏡像(通過dockerfile生成鏡像)docker search httpd //查找所有httpd相關的鏡像
2、下載鏡像(默認從Docker Hub下載)docker pull httpd //拉取apache鏡像
3、查看鏡像docker images //查看本地鏡像列表
各個選項說明:
REPOSITORY:表示鏡像的倉庫源
TAG:表示鏡像的標簽
IMAGE ID:表示鏡像的ID
CREATED:表示鏡像創建時間
SIZE:表示鏡像大小
docker tag httpd apache:test //給鏡像添加新的標簽
4、刪除鏡像
docker rmi 倉庫名:標簽
docker rmi -f 鏡像ID //永久刪除鏡像
docker rmi -f $(docker images | grep "none" | awk "{print \$3}") //刪除沒有使用的鏡像
5、導出和導入鏡像
docker save -o 導出文件名 導出的鏡像
docker save -o httpd01 httpd //導出鏡像
docker load <導出的文件
注意:導入之前要將原先的httpd鏡像刪除,否則不執行導入操作
6、上傳鏡像
docker push 鏡像名稱 //上傳鏡像到共有倉庫
容器時Docker的另一個核心概念。簡單說,容器時鏡像的一個運行實例,是獨立運行的一個或一組應用以及他們所需的運行環境,包括文件系統、系統類庫、shell環境等。鏡像是只讀模板,而容器會給這個只讀模板一個額外的可寫層。
1、容器的創建和啟動docker create -it httpd /bin/bash //創容器,默認時沒有運行的
-i:讓容器的輸入保持打開
-t:讓Docker分配一個偽終端
docker ps //查看正在運行的容器
docker ps -a //查看所有容器
docker start 容器ID //啟動容器
docker stop 容器ID //停止容器
創建并啟動容器用docker run命令,等與先執行docker create命令,在執行docker start命令。
docker run來創建容器時過程如下:
1)首先檢查本地是否存在指定的鏡像,當鏡像不存在時,會從公共倉庫下載
2)再利用鏡像創建并啟動一個容器
3)接著分配一個文件系統給容器,在只讀的鏡像層外面掛載一層可讀寫層
4)從宿主主機配置的網橋結構中橋接一個虛擬接口到容器中
5)分配一個地址池中的IP地址給容器
6)執行用戶指定的應用程序
7)指定完畢后容器被終止運行
docker run 鏡像名 /bin/bash -c ls //創建并啟動容器指定一條shell命令
-c:指定的命令docker ps -a //查看centos狀態,發現執行完shell命令之后停止了
docker run -d centos /bin/bash -c "while true;do echo hello;done" //創建并啟動容器,在后臺持續運行
-d:讓容器以守護形態在后臺運行,但是注意的是后臺必須要有正運行的程序,否則容器會停止。
2、容器的進入docker exec -it 容器ID/名稱 /bin/bash //進入容器
exit或ctrl+d退出偽終端
3、容器導出和導入docker export 容器ID/名稱 > 文件名 //容器的導出
cat 文件名 | docker import - 生成的鏡像名:標簽 //將容器文件導入成鏡像
4、容器的刪除
docker ps -a
docker rm 容器ID //刪除容器,無法刪除正在運行的容器
docker rm -f d4e863a654aa //強制刪除運行中的容器,不建議。
docker container prune //刪除所有停止的容器
docker rm $(docker ps -qf status=exited) //刪除指定狀態的容器
docker login //登錄共有倉庫,通過注冊賬號登錄
1、限制CPU的使用速率
在Docker中可以通過--cpu-quota選項來限制CPU的使用使用率,CPU的百分比是以1000為單位的。docker run --cpu-quota 20000 鏡像名 //CPU的使用率限定為20%
2、多任務按比例分享CPU
當由多個容器任務運行時,很難計算CPU的使用率,為了使容器合理使用CPU資源,可以通過--cpu-shares選項設置CPU按比例共享CPU資源,這種方式還可以實現CPU使用率的動態調整。
以下實現三個容器A、B、C,占用CPU資源的比列為1:1:2
docker run --cpu-shares 1024 鏡像名 //對應容器A
docker run --cpu-shares 1024 鏡像名 //對應容器B
docker run --cpu-shares 2048 鏡像名 //對應容器C
3、限制CPU內核使用
在Docker中可以使用--cpuset-cpus選項來使某些程序獨享CPU內核,以便提高其處理速度,對應的Cgroup配置文件為/sys/fs/cgroup/cpuset/docker/容器編號/cpuset.cpus。選項后直接跟參數0、1、2......表示第1個內核、第2個內核、第3個內核,與/proc/cpuinfo中的CPU編號(processer)相同。
如果服務器有16個核心,那么CPU編號為0~15,使容器綁定第1~4個內核使用。docker run --cpuset-cpus 0,1,2,3 鏡像名
4、對內存使用的限制
在Docker中可以通過docker run -m命令來限制容器的內存使用量,相應的Cgroup配置文件為/sys/fs/cgroup/memory/memory.limit_in_bytes。但是需要注意:一旦容器Cgroup使用的內存超過了限制的容量,Linux內核將會嘗試收回這些內存,如果仍舊沒法控制內存使用在限制范圍之內,進程就會殺死。docker run -m 512m 鏡像名 //限制容器的內存為512M
5、對blkio的限制
如果時在一臺服務器上進行容器的混合部署,那么會出現同時有幾個程序寫磁盤數據的情況,這時可以通過--device-write-iops選項來限制寫入的iops,相應的還有--device-read-bps選項可以限制讀取的iops。但是這種方法只能針對blkio限制的設備(device),而不是分區。相應Cgroup寫配置文件/sys/fs/cgroup/blkio/docker/容器ID/blkio.throttle.write_iops_device。docker run --device-write-bps /dev/sda1:1mb 鏡像名 //限制/dev/sdb1的寫入iops為1MB
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。