虛擬化技術
虛擬化技術是對軟件基礎設施、操作系統、軟件等IT資源進行有效的管理,使用戶不再受物理資源的限制,提高計算機資源的利用率。虛擬化技術是雲計算的基礎,例如阿里雲的雲主機、騰訊雲等都應用了虛擬化技術。
虛擬化技術整體上包括兩個方面:硬件虛擬化和軟件虛擬化,具體分爲:網絡虛擬化、存儲虛擬化、桌面虛擬化、服務器虛擬化等,我們平常說的最多的是服務器虛擬化。
服務器虛擬化就是在同一個物理服務器上運行多個虛擬機,讓服務器的cpu、內存、磁盤、I/O等硬件設施爲每個虛擬機服務,在每個虛擬機中運行不同的軟件,虛擬機之間是隔離狀態。
服務器虛擬化主要有兩種技術:
1、Hypervisor也叫VMM(virtual machine monitor)即虛擬機監視器
Hypervisor是一種將操作系統與硬件抽象分離的方法,實現在宿主機(host machine)上能同時運行多個客戶機(guest machine),每個客戶機就是一個虛擬機,這些虛擬機高效地分享宿主機的硬件資源。
在服務器(宿主機)上安裝操作系統,並安裝hypervisor虛擬機管理軟件,如VMware、VirtualBox等,由hypervisor管理多個虛擬機,每個虛擬機上需要安裝客戶操作系統、依賴庫、應用軟件。
容器化技術
容器技術中docker引擎取代了hypervisor,docker引擎是運行在住宿操作系統上的一個進程,該進程管理了多個docker容器,每個docker容器集成了應用軟件、依賴庫,容器之間相互隔離。
技術對比:
- 資源佔用:虛擬機由於是獨立的操作系統,佔用資源比docker多。
- 啓動速度:虛擬機包括操作系統,啓動虛擬機相當於啓動一個操作系統,容器則不一樣,容器中只包括操作系統的內核,啓動一個容器實例相當於啓動一個進程,容器的啓動速度比虛擬機快。
- 體積:容器包括操作系統內核、軟件及依賴庫,虛擬機不僅包括軟件和依賴庫還將完整的操作系統打包進去,虛擬機的體積比容器大的多。
docker簡介
Docker 是一個開源的應用容器引擎,基於 Go 語言 並遵從Apache2.0協議開源。Docker 可以讓開發者打包他們的應用以及依賴包到一個輕量級、可移植的容器中,然後發佈到任何流行的 Linux 機器上,也可以實現虛擬化。容器是完全使用沙箱機制,相互之間不會有任何接口(類似 iPhone 的 app),更重要的是容器性能開銷極低。
- 1、Docker daemon(Docker守護進程): Docker守護進程是部署在操作系統上,負責支撐Docker Container的運行以及本地Image的管理。
- 2、Docker client: 用戶不直接操作Docker daemon,用戶通過Docker client訪問Docker,Docker client提供pull、run等操作命令。
- 3、Docker Image: Docker 鏡像就是一個只讀的模板。 例如:一個鏡像可以包含一個完整的 ubuntu 操作系統環境,裏面僅安裝了 Tomcat或用戶需要的其它應用程序。 鏡像可以用來創建 Docker 容器。 Docker 提供了一個很簡單的機制來創建鏡像或者更新現有的鏡像,用戶甚至可以直接從其他人那裏下載一個已經做好的鏡像來直接使用。
- 4、Docker Container: Docker 利用容器來運行應用。容器是從鏡像創建的運行實例。它可以被啓動、開始、停止、刪除。每個容器都是相互隔離的、保證安全的平臺。打個比方,鏡像相當於類,容器相當於對象。
- 5、Docker Registry: Docker 倉庫分爲公開倉庫(Public)和私有倉庫(Private)兩種形式 最大的公開倉庫是Docker Hub,存放了數量龐大的鏡像供用戶下載。 用戶也可以在本地網絡內創建一個私有倉庫。 當用戶創建了自己的鏡像之後就可以使用 push 命令將它上傳到公有或者私有倉庫,這樣下次在另外一臺機器上使用這個鏡像時候,只需要從倉庫上 pull 下來就可以了。
docker安裝
Docker可以運行MAC、Windows、Centos、DEBIAN、UBUNTU等操作系統上,提供社區版和企業版,基於Centos安裝Docker。Centos6對docker支持的不好,使用docker建議升級到centos7。
1、在Centos7上安裝Docker,直接通過yum安裝即可:
yum install -y docker
完成後查看docker版本:docker info 或docker -v
啓動docker:systemctl start docker
常用命令使用
1.鏡像倉庫
1)docker pull : 從鏡像倉庫中拉取或者更新指定鏡像
docker pull [OPTIONS] NAME[:TAG|@DIGEST]
OPTIONS說明:
- -a :拉取所有 tagged 鏡像
- --disable-content-trust :忽略鏡像的校驗,默認開啓
從Docker Hub下載hello-world最新版鏡像。
2)docker push : 將本地的鏡像上傳到鏡像倉庫,要先登陸到鏡像倉庫
語法
docker push [OPTIONS] NAME[:TAG]
上傳本地鏡像test:v1到鏡像倉庫中,docker push test:v1
3)docker search : 從Docker Hub查找鏡像語法
docker search [OPTIONS] TERM
OPTIONS說明:
- --automated :只列出 automated build類型的鏡像;
- --no-trunc :顯示完整的鏡像描述;
- -s :列出收藏數不小於指定值的鏡像。
從Docker Hub查找所有鏡像名包含java,並且收藏數大於10的鏡像
2.本地鏡像管理
1)docker images : 列出本地鏡像
docker images [OPTIONS] [REPOSITORY[:TAG]]
OPTIONS說明:
- -a :列出本地所有的鏡像(含中間映像層,默認情況下,過濾掉中間映像層)
- --digests :顯示鏡像的摘要信息
- -f :顯示滿足條件的鏡像
- --format :指定返回值的模板文件
- --no-trunc :顯示完整的鏡像信息
- -q :只顯示鏡像ID
查看本地鏡像列表
2)docker rmi : 刪除本地一個或多少鏡像。
docker rmi [OPTIONS] IMAGE [IMAGE...]
OPTIONS說明:
- -f :強制刪除
- --no-prune :不移除該鏡像的過程鏡像,默認移除
強制刪除本地鏡像
刪除所有鏡像:
docker rmi `docker images -q`
按條件刪除鏡像
docker rmi `docker images -q | awk '/^<none>/ { print $3 }'` //沒有打標籤
docker rmi --force `docker images | grep test | awk '{print $3}'` //鏡像名包含關鍵字,其中test爲關鍵字
3)docker tag : 標記本地鏡像,將其歸入某一倉庫。
docker tag [OPTIONS] IMAGE[:TAG] [REGISTRYHOST/][USERNAME/]NAME[:TAG]
將鏡像hello-world:latest標記爲hello-world:v1 鏡像
docker tag hello-world:latest hello-world:v1
4)docker build : 使用Dockerfile創建鏡像
docker build [OPTIONS] PATH | URL | -
OPTIONS說明:
- --build-arg=[] :設置鏡像創建時的變量
- -f :指定要使用的Dockerfile路徑
- -q :安靜模式,成功後只輸出鏡像ID
使用當前目錄的Dockerfile創建鏡像,Dockerfile內容爲:
[root@2 dockerjdk8]# cat Dockerfile
FROM java:8
ADD docker-0.0.1-SNAPSHOT.jar /docker-test.jar
EXPOSE 9000
ENTRYPOINT ["java","-jar","/docker-test.jar"]
docker build -t test-docker .
3.容器生命週期管理
1)docker run :創建一個新的容器並運行一個命令
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
OPTIONS說明:
- -d: 後臺運行容器,並返回容器ID
- -i: 以交互模式運行容器,通常與 -t 同時使用
- -t: 爲容器重新分配一個僞輸入終端,通常與 -i 同時使用
- --name="nginx-lb": 爲容器指定一個名稱
- -e username="ritchie": 設置環境變量
- --env-file=[]: 從指定文件讀入環境變量
- --expose=[]: 開放一個端口或一組端口
使用鏡像nginx:latest以後臺模式啓動一個容器,將容器的80端口映射到主機的80端口,主機的目錄/data映射到容器的/data。
docker run -d -p 80:80 -v /data:/data nginx:latest
使用鏡像nginx:latest以交互模式啓動一個容器,在容器內執行/bin/bash命令。
docker run -it nginx:latest /bin/bash
使用docker鏡像nginx:latest以後臺模式啓動一個容器,並將容器命名爲mynginx。
docker run --name mynginx -d nginx:latest
使用鏡像nginx:latest以後臺模式啓動一個容器,並將容器的80端口映射到主機隨機端口。
docker run -p -d nginx:latest
2)docker start :啓動一個或多少已經被停止的容器
docker stop :停止一個運行中的容器
docker restart :重啓容器
3)docker rm :刪除一個或多少容器
docker rm [OPTIONS] CONTAINER [CONTAINER...]
OPTIONS說明:
- -f :通過SIGKILL信號強制刪除一個運行中的容器
- -l :移除容器間的網絡連接,而非容器本身
- -v :-v 刪除與容器關聯的卷
強制刪除所有容器
docker rm -f `docker ps -a -q`
4)docker create :創建一個新的容器但不啓動它
docker create [OPTIONS] IMAGE [COMMAND] [ARG...]
使用docker鏡像nginx:latest創建一個容器,並將容器命名爲nginx-test
5)docker exec :在運行的容器中執行命令
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
OPTIONS說明:
- -d :分離模式: 在後臺運行
- -i :即使沒有附加也保持STDIN 打開
- -t :分配一個僞終端
在容器elastic_pasteur中開啓一個交互模式的終端
[root@2 ~]# docker exec -it elastic_pasteur /bin/bash
root@7fee9a910b13:/#
4.容器操作
1)docker ps : 列出容器
docker ps [OPTIONS]
OPTIONS說明:
- -a :顯示所有的容器,包括未運行的
- -f :根據條件過濾顯示的內容
- --format :指定返回值的模板文件
- -l :顯示最近創建的容器
- -n :列出最近創建的n個容器
- --no-trunc :不截斷輸出
- -q :靜默模式,只顯示容器編號
- -s :顯示總的文件大小
列出所有創建的容器ID
2)docker inspect : 獲取容器/鏡像的元數據。
docker inspect [OPTIONS] CONTAINER|IMAGE [CONTAINER|IMAGE...]
OPTIONS說明:
- -f :指定返回值的模板文件
- -s :顯示總的文件大小
- --type :爲指定類型返回JSON
獲取正在運行的容器elastic_pasteur的IP
docker inspect -f '{{.NetworkSettings.IPAddress}}' elastic_pasteur
3)docker top :查看容器中運行的進程信息,支持 ps 命令參數
docker top [OPTIONS] CONTAINER [ps OPTIONS]
容器運行時不一定有/bin/bash終端來交互執行top命令,而且容器還不一定有top命令,可以使用docker top來實現查看container中正在運行的進程。
查看容器mymysql的進程信息
docker top elastic_pasteur
查看所有運行容器的進程信息
for i in `docker ps |grep Up|awk '{print $1}'`;do echo \ &&docker top $i; done
4)docker logs : 獲取容器的日誌
docker logs [OPTIONS] CONTAINER
OPTIONS說明:
- -f : 跟蹤日誌輸出
- --since :顯示某個開始時間的所有日誌
- -t : 顯示時間戳
- --tail :僅列出最新N條容器日誌
跟蹤查看容器elastic_pasteur的日誌輸出
docker logs -f elastic_pasteur
查看容器nexus從2019年10月16日後的最新10條日誌
docker安裝Tomcat
1)查找Docker Hub上的tomcat鏡像
docker search tomcat
2)拉取官方的鏡像
docker pull tomcat
3)使用tomcat鏡像運行容器
docker run -d --name tomcat -p 8080:8080 -v $PWD/test:/usr/local/tomcat/webapps/test tomcat
命令說明:
- -p 8080:8080:將容器的8080端口映射到主機的8080端口
- -v $PWD/test:/usr/local/tomcat/webapps/test:將主機中當前目錄下的test掛載到容器的/test
查看tomcat日誌輸出
通過瀏覽器訪問
到此,docker的簡單介紹和使用結束
參考文獻:https://www.w3cschool.cn/dock...