Docker虛擬化技術
什麼是Docker?
它是Linux裏運行的應用的開源軟件,它跟KVM的區別更像是Docker是運行在Linux系統中的一個軟件,以應用的形式來模擬成虛擬機使用(想象一下再Windows上運行VMware和QQ),既可以是一個應用,也可以是一臺服務,甚至是一個完整的操作系統
Docker與傳統虛擬化比較
啓動速度更快、計算能力損耗幾乎無、性能接近原生超過虛擬機、系統支持量也遠遠超過虛擬機、隔離性資源限制,而虛擬機完全隔離
Docker的核心概念
鏡像:Docker的鏡像是創建容器的基礎,可以理解是一個安裝系統環境的鏡像,也可以理解爲是安裝一個應用程序的鏡像
容器:Docker的容器是從鏡像創建來的運行實例,可以創建、啓動、停止和刪除,所創建的每個容器都是相互隔離、互不可見的,可以保證平臺安全
倉庫:Docker的倉庫是用來存儲鏡像的地方可以把創建的鏡像使用push命令上傳上去,其他容器使用可以直接pull下來
安裝Docker
安裝Docker的兩種方式|:curl獲得安裝腳本安裝和yum倉庫進行安裝
注意:這裏是在CentOS7.2下yum進行安裝,目前Docker只支持64位系統
1.下載安裝docker
yum -y install docker
2.啓動docker服務
systemctl start docker
查看docker版本信息:docker version
Docker的鏡像操作
搜索鏡像:docker search 關鍵字
比如:docker search nginx
下載鏡像:docker pull docker.io/linuxserver/nginx
查看鏡像信息:docker images
REPOSITORY:鏡像屬於的倉庫
TAG:鏡像的標籤信息
IMAGE ID:鏡像的唯一ID號
CREATED:鏡像的創建時間
VIRTUAL SIZE:鏡像的大小
可以通過紅線圈起來的ID號查看該鏡像的詳細信息:docker inspect fb5ca9bbaab4
本地鏡像添加新的標籤:docker tag 名稱 新名稱:新標籤
比如:docker tag docker.io/linuxserver/nginx nginx:nginx
刪除鏡像:docker rmi nginx:nginx
注意:當鏡像擁有多個標籤時,該命令只是刪除該鏡像的一個標籤而已,刪除命令後面跟ID時,確保該鏡像沒有被容器使用,會先刪除所有標籤,再刪除該鏡像本身,如果該鏡像被容器使用,正確做法是先刪除依賴該鏡像的所有容器再刪除該鏡像
鏡像的導出和載入(從一臺機器上導出鏡像,然後複製鏡像文件可以載入到其他機器上使用該鏡像)
導出鏡像:docker save -o 存儲文件名 存儲的鏡像
比如:docker save -o nginx docker.io/linuxserver/nginx
載入鏡像:docker load < nginx 或者 docker --input nginx
上傳鏡像:在公共倉庫成功註冊一個賬號,登錄使用push命令上傳
比如這個賬號爲admin:
docker tag docker.io/linuxserver/nginx admin/nginx:nginx
docker login
docker push admin/nginx:nginx
Docker容器的操作
創建容器:docker create 【選項】鏡像 運行的程序環境
-i:讓容器輸入保持打開
-t:讓Docker分配一個僞終端
比如:docker create -it docker.io/linuxserver/nginx /bin/bash
查看所有容器的運行狀態:docker ps -a
-a:列出系統最近一次啓動的容器
啓動容器(通過上圖紅線的ID號啓動):docker start ba7a5dc88d29
補充:創建並啓動容器:docker run = docker create + docker start
持續在後臺運行容器:docker run -d centos /usr/bin/bash -c "while true;do echo hello;done"
停止容器:docker stop ba7a5dc88d29
進入容器(可以理解爲進入虛擬機的shell環境):docker exec -it ba7a5dc88d29 /bin/bash
導出容器:docker export 容器ID/容器名稱 > 文件名
比如:docker export ba7a5dc88d29 > nginxtar
導入容器:cat 文件名 | docker import - 生成的鏡像名:標籤
比如:cat nginxtar | docker import - nginx:nginx
刪除容器:docker rm ba7a5dc88d29
-f:強制刪除一個正在運行的容器
Docker資源控制
限制CPU使用速率(CPU的百分比以1000位單位)
CPU使用率限定爲20%:docker run --cpu-quota 20000 容器名
也可以修改Cgroup配置文件(通過echo命令導入)
echo 20000 > /sys/fs/cgroup/cpu/docker/容器編號/cpu.cfs_quota_us
多任務按比例分享CPU
比如:有A、B、C三個容器運行,佔用比例分配1:1:2
docker run --cpu-shares 1024 容器A
docker run --cpu-shares 1024 容器B
docker run --cpu-shares 2048 容器C
限制CPU內核使用
限制該容器內的進程只會在編號1、2、3、4的CPU上運行(第一個內核用0開始表示)
docker run --cpuset-cpus 0,1,2,3 容器名
對內存使用的限制:docker run -m 512m 容器名
對blkio的限制:docker run --device-write-bps /dev/sda1:1mb 容器名
Docker鏡像的創建方法
已有鏡像創建
docker commit 【選項】容器ID/名稱 倉庫名稱:標籤
-m:顯示說明信息
-a:顯示作者信息
-p:生成過程中停止容器運行
例:查看到你要創建已有鏡像的id,然後執行命令docker commit -m "new" -a "myname" bf249d1747a7 docker:new
下載模板使用模板創建
下載地址爲:http://openvz.org/Download/template/precreated
wget http://download.openvz.org/template/precreated/debian-7.0-x86-minimal.tar.gz
cat debian-7.0-x86-minimal.tar.gz | docker import - debian:new
Docerfile創建
1.創建工作目錄
mkdir apache
cd apache
2.創建編寫Dockerfile文件
vim Dockerfile
#基於的基礎鏡像
FROM centos
#維護該鏡像的用戶信息
MAINTAINER The CentOS Project<[email protected]>
#編寫鏡像操作指令安裝apache的軟件包
RUN yum -y update
RUN yum -y install httpd
#開啓80端口
EXPOSE 80
#複製網站首頁文件
ADD index.html /var/www/html/index.html
#將執行腳本複製到鏡像中
ADD run.sh /run.sh
RUN chmod 775 /run.sh
#啓動容器時執行腳本
CMD ["/run.sh"]
3.編寫執行腳本
vim run.sh
#!/bin/bash
#清理httpd的緩存
rm-rf /run/httpd*
#啓動apache服務
exec /usr/sbin/apachectl -D FOREGROUND
4.創建apache的測試網頁
vim index.html
<html><h1>this is docker test!!!</h1></html>
5.使用Dockerfile文件生成鏡像
-t:指定鏡像的標籤信息
docker build -t httpd:centos
6.使用新生成的鏡像文件運行容器
docker run -d -p 8888:80 httpd:centos
該命令-p選項實現從本地的8888端口到容器中80端口的映射
7.測試訪問該主機ip的8888端口訪問網頁