Docker虛擬化技術學習與應用

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 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 run -it -d -v /date1 -v /date2 -p 8888:80 --name my-nginx docker.io/linuxserver/nginx

掛載主機目錄作爲數據卷

比如:使用httpd:centos鏡像創建一個名爲web的容器,將宿主機的/var/www/html目錄掛載到/date1目錄上

docker run -d -v /var/www/html:/date1 --name web httpd:centos

三、Docker網絡通信

端口映射

-P:實現隨機映射,Docker會把容器自身的80端口隨機映射在宿主機的隨機端口上

-p:實現指定把容器的哪個端口映射在宿主機的哪個端口上

docker run -d -P httpd:centos

docker run -d -p 8888:80 httpd:centos

容器網絡互連

--link name:alias

nme:要連接的容器名稱,alias是這個連接的別名

創建源容器:docker run -d -P --name web1 httpd:centos

創建接收容器:docker run -d -P --name web2 --link web1:web1 httpd:centos

測試:(只能接收容器ping通源容器的網絡)

四、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端口訪問網頁

補充:構建私有倉庫

1.在需要構建私有倉庫的服務器上下載registry鏡像

docker pull registry

2.在/etc/docker/目錄下創建json文件

vim /etc/docker/daemon.json

{"insecure-registries":["192.168.0.101:5000"]}

systemctl restart docker

3.使用下載好的registry鏡像啓動一個容器(默認倉庫存放於容器內的/tmp/registry目錄下)

docker run -d -p 5000:5000 -v /date/registry:/tmp/registry registry

4.就可以上傳鏡像

docker tag nginx 192.168.0.101:5000/nginx(修改標籤)

docker push 192.168.0.101:5000/nginx

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章