目錄
1.1 docker簡介
1. 什么是docker
- Docker 是應用最廣泛的開源容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的容器中
- 一種操作系統基本的虛擬化技術
- 一種簡單的應用程序打包工具
- 依賴Linux內核特性:Namespace(資源隔離) 和 Cgroup(資源限制)
docker實質就像虛擬機一樣,就好像是一個具有獨立操作系統的真實機器
# 虛擬機是有真正的linux內核的(C語言開發的程序),真實需要通過 .ios 文件安裝操作系統 # 而我們的docker共享linux宿主機內核(bin/etc等文件),只有一個linux文件系統
注:每個容器擁有一套和宿主機完全隔離的文件系統(共用linux內核),程序在這個虛擬容器里運行,就好像在真實的物理機上運行一樣。
容器
1):容器是一個操作系統級別下的虛擬化技術,運行一個容器就行運行一個進程一樣
2):容器依賴linux內核特性:Namespace(資源隔離)和Cgroups(資源限制)
資源隔離:
1):Linux Namespaces機制提供一種資源隔離方案,每個namespace看上去就像一個單獨的Linux系統。
2):PID,IPC(進程通信),Network等系統資源不再是全局性的,而是屬於某個特定的Namespace。
3):每個namespace下的資源對於其他namespace下的資源都是透明,不可見的。
4):系統中可以同時存在兩個進程號為0,1,2的進程,由於屬於不同的namespace,所以它們之間並不沖突。
5):而在用戶層面上只能看到屬於用戶自己namespace下的資源,例如使用ps命令只能列出自己namespace下的進程。
6):這樣每個namespace看上去就像一個單獨的Linux系統。
資源隔離:
1):為了讓容器中的進程更加可控,Docker 使用 Linux cgroups 來限制容器中的進程允許使用的系統資源。
2):可以在啟動容器是指定每個容器可以使用的 網絡、磁盤、CPU以及內存 等
容器資源限制
1 '''1. 內存限額: 允許容器最多使用500M內存和100M的Swap,並禁用 OOM Killer ''' 2 [root@linux-node4 diff]# docker run -d --name nginx03 --memory="500m" --memory-swap="600m" --oom-kill-disable nginx 3 4 '''2. CPU限額:''' 5 [root@linux-node4 diff]# docker run -d --name nginx04 --cpus="1.5" nginx # 允許容器最多使用一個半的CPU 6 [root@linux-node4 diff]# docker run -d --name nginx05 --cpus=".5" nginx # 允許容器最多使用50%的CPU
2. docker思想
1. Docker的思想源於集裝箱,集裝箱解決了什么問題呢?
2. 在早期運輸貨物需要不同分類的船,例如運輸水果的船,運輸生活用品的船
3. 有了集裝箱后,在大船上,可以把貨物分類到不同的集裝箱中,水果一個集裝箱,生活用品一個集裝箱
4. 它們之間互不影響,只要把貨物封裝好集裝箱里,就可以把不同類的貨物一起運走。
5. 通過Docker logo也可以看出所以然來,Docker就像大船,集裝箱就是容器。
6. 一條鯨魚拖着若干個集裝箱的經典形象已經深入人心。

3. docker與虛擬機比較
2. 虛擬機技術臃腫,需要先創建新的系統,按系統隔離
舉例
1)Docker就是手機中的各種APP,只需要一個系統就可以下載自己所需的應用
2)虛擬化技術相當於蘋果手機安裝一個龐大軟件,這個軟件上安裝安卓系統、魅族系統等,每個系統上還要安裝各類應用。


4. docker解決的問題
1. 高效的利用資源
2. 單台機器得部署多個應用;
3. 應用之間互相隔離(微服務);
4. 應用之間不能發生資源搶占,每個應用只能使用事先注冊申請的資源。
5. docker架構
1. Docker客戶端(Client): docker 命令行工具,用戶也可以通過 REST API 與服務器通信
2. Docker服務器(Docker daemon): 服務器組件,以 Linux 后台服務的方式運行, Docker daemon 運行在 Docker host 上,負責創建、運行、監控容器,構建、存儲鏡像
3. Docker鏡像(Image): 可將 Docker 鏡像看着只讀模板,通過它可以創建 Docker 容器
4. 鏡像倉庫(Registry): Registry 是存放 Docker 鏡像的倉庫,Registry 分私有和公有兩種
5. Docker容器(Container): Docker 容器就是 Docker 鏡像的運行實例

1.2 docker 安裝
1. 安裝依賴包
yum install -y yum-utils device-mapper-persistent-data lvm2
2. 添加Docker軟件包源(否則doker安裝的不是新版本)
yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo
3. 安裝Docker CE
yum install -y docker-ce
4. 啟動Docker服務並設置開機啟動
systemctl start docker
systemctl enable docker
5. 測試docker是否安裝成功(hello-world是官方提供的一個測試鏡像)
docker run hello-world
6. 查看docker基本信息
docker info
docker version
1.3 docker 技術應用場景
1. 場景一:節省項目環境部署時間
1)單項目打包
1. 每次部署項目到測試、生產等環境,都要部署一大堆依賴的軟件、工具,時間久,出錯概率大。
2. Docker主要理念就是環境打包部署,可在任意Docker Engine運行。
3. 我們只需要將每個項目環境打包到鏡像,push到鏡像倉庫,當有需要部署這個項目時,直接pull鏡像啟動容器,這個項目就可以訪問了!一次構建多次部署,一勞永逸。
2)整套項目打包
1. 比如有一個產品可以整套部署到客戶那里,以往都是派一名實施工程師到客戶那部署。
2. 如果用了Docker,我們可以前期將這套項目封裝打包起來,實現一鍵部署,分分鍾鍾搞定,就不需要再派人過去了。比如官方的Docker Compose編排工具。
3)新開源技術試用
1. 有時,我們想調研一些開源項目,我們可以直接從公共鏡像倉庫pull項目官方做好鏡像啟動容器即可。
2. 場景二:環境一致性
1. 項目在開發電腦本地運行沒問題,到了測試或生產環境就運行不起來。
2. Docker將項目環境打包成鏡像,可以在任何Docker Engine部署
3. 場景三:持續集成
1. 一個項目版本快速迭代的測試場景,需要一個合理的CI(持續集成)/CD(持續部署)環境支撐。
2. CI/CD是一個周期性自動化項目測試流程,包括構建、部署、測試、發布等工作,很少需要人工干預。
3. Docker通過項目鏡像構建和快速部署,打通測試環境與生產環境,高度保持多個環境之間一致性。
4. 場景四:微服務
1. 微服務指盡可能細粒度拆分業務程序架構,由多個獨立服務組成業務系統。
2. Docker容器作為這些獨立服務的部署單元,每個服務單獨部署到一個docker容器中。
1.4. docker簡單使用(創建一個nginx容器)
1 # 1、創建一個nginx容器 2 docker run -it nginx 3 4 # 2、查看docker運行的容器(可以獲取到這個容器的id) 5 docker ps 6 7 # 3、訪問這個容器 8 # 進入這個nginx容器(進入的文件系統和宿主機是完全隔離的,有自己獨立的文件系統) 9 docker exec -it 73877e65c07d bash 10 11 # 4、查看當前容器的 IP 12 docker inspect 73877e65c07d # 73877e65c07d是通過docekr ps查看到的容器ID 13 curl 172.17.0.2 # 測試這個nginx容器是否可以訪問
