docker簡介
1.什麼是虛擬化
在計算機中,虛擬化(英語:Virtualization)是一種資源管理技術,是將計算機的各種實體資源,如服務器、網絡、內存及存儲等,予以抽象、轉換後呈現出來,打破實體結構間的不可切割的障礙,使用戶可以比原本的組態更好的方式來應用這些資源。這些資源的新虛擬部份是不受現有資源的架設方式,地域或物理組態所限制。一般所指的虛擬化資源包括計算能力和資料存儲。
在實際的生產環境中,虛擬化技術主要用來解決高性能的物理硬件產能過剩和老的舊的硬件產能過低的重組重用,透明化底層物理硬件,從而最大化的利用物理硬件對資源充分利用虛擬化技術種類很多,例如:軟件虛擬化、硬件虛化、內存虛擬化、網絡虛擬化(vip)、桌面虛擬化、服務虛擬化、虛擬機等等。
2.什麼是Docker
Docker是一個開源項目,誕生於2013年初,最初是dotCloud公司內部的一個業餘項目。它基於Google公司推出的Go語言實現。項目後來加入了Linux基金會,遵從了Apache2.0協議,項目代碼在GitHub上進行維護。
Docker自開源後受到廣泛的關注和討論,以至於dotCloud公司後來都改名爲Docker Inc。Redhat已經在其RHEL6.5中集中支持Docker;Google也在其PaaS產品中廣泛應用。Docker項目的目標是實現輕量級的操作系統虛擬化解決方案。Docker的基礎是Linux容器(LXC)等技術。在LXC的基礎上Docker進行了進一步的封裝,讓用戶不需要去關心容器的管理,使得操作更爲簡便。用戶操作Docker的容器就像操作一個快速輕量級的虛擬機一樣簡單。
3.爲什麼選擇Docker?
1)上手快
用戶只需要幾分鐘,就可以把自己的程序“Docker化”。Docker依賴於“寫時複製”(copy:on-write)54681模型,使修改應用程序也非常迅速,可以說達到“隨心所致,代碼即改”的境界。隨後,就可以創建容器來運行應用程序了。大多數Docker容器只需要不到1秒中即可啓動。由於去除了管理程序的開銷,Docker容器擁有很高的性能,同時同一臺宿主機中也可以運行更多的容器,使用戶儘可能的充分利用系統資源。
2)職責的邏輯分類
使用Docker,開發人員只需要關心容器中運行的應用程序,而運維人員只需要關心如何管理容器。Docker設計的目的就是要加強開發人員寫代碼的開發環境與應用程序要部署的生產環境一致性。從而降低那種“開發時一切正常,肯定是運維的問題(測試環境都是正常的,上線後出了問題就歸結爲肯定是運維的問題)”
3)快速高效的開發生命週期
Docker的目標之一就是縮短代碼從開發、測試到部署、上線運行的週期,讓你的應用程序具備可移植性,易於構建,並易於協作。(通俗一點說,Docker就像一個盒子,裏面可以裝很多物件,如果需要這些物件的可以直接將該大盒子拿走,而不需要從該盒子中一件件的取。)
4)鼓勵使用面向服務的架構
Docker還鼓勵面向服務的體系結構和微服務架構。Docker推薦單個容器只運行一個應用程序或進程,這樣就形成了一個分佈式的應用程序模型,在這種模型下,應用程序或者服務都可以表示爲一系列內部互聯的容器,從而使分佈式部署應用程序,擴展或調試應用程序都變得非常簡單,同時也提高了程序的內省性。(當然,可以在一個容器中運行多個應用程序)
4.容器與虛擬機比較
下面的圖片比較了Docker和傳統虛擬化方式的不同之處,可見容器是在操作系統層面上實現虛擬化,直接複用本地主機的操作系統,而傳統方式則是在硬件層面實現。
與傳統的虛擬機相比,Docker優勢體現爲啓動速度快、佔用體積小。
5.Docker服務器與客戶端
Docker是一個客戶端-服務器(C/S)架構程序。Docker客戶端只需要向Docker服務器或者守護進程發出請求,服務器或者守護進程將完成所有工作並返回結果。Docker提供了一個命令行工具Docker以及一整套RESTfulAPl。你可以在同一臺宿主機上運行Docker守護進程和客戶端,也可以從本地的Docker客戶端連接到運行在另一臺宿主機上的遠程Docker守護進程。
6.Docker鏡像與容器
鏡像是構建Docker的基石。用戶基於鏡像來運行自己的容器。鏡像也是Docker生命週期中的構建”部分。鏡像是基於聯合文件系統的一種層式結構,由一系列指令一步一步構建出來。例如:執行一個命令;打開一個窗口。也可以將鏡像當作容器的“源代碼”。鏡像體積很小,非常“便攜”,易於分享、存儲和更新。
Docker可以幫助你構建和部署容器,你只需要把自己的應用程序或者服務打包放進容器即可。容器是基於鏡像啓動起來的,容器中可以運行一個或多個進程。我們可以認爲,鏡像是Docker生命週期中的構建或者打包階段,而容器則是啓動或者執行階段。容器基於鏡像啓動,一旦容器啓動完成後,我們就可以登錄到容器中安裝自己需要的軟件或者服務。
所以Docker容器就是:一個鏡像格式;一些列標準操作;一個執行環境。
Docker借鑑了標準集裝箱的概念。標準集裝箱將貨物運往世界各地,Docker將這個模型運用到自己的設計中,唯一不同的是:集裝箱運輸貨物,而Docker運輸軟件。
和集裝箱一樣,Docker在執行上述操作時,並不關心容器中到底裝了什麼,它不管是web服務器,還是數據庫,或者是應用程序服務器什麼的。所有的容器都按照相同的方式將內容“裝載”進去。
Docker也不關心你要把容器運到何方:我們可以在自己的筆記本中構建容器,上傳到Registry,然後下載到一個物理的或者虛擬的服務器來測試,在把容器部署到具體的主機中。像標準集裝箱一樣,Docker容器方便替換,可以疊加,易於分錢,並且儘量通用。
7.Registry(註冊中心)
Docker用Registry來保存用戶構建的鏡像。Registry分爲公共和私有兩種。Docker公司運營公共的Registry叫做Docker Hub。用戶可以在Docker Hub註冊賬號,分享並保存自己的鏡像(說明:在Docker Hub下載鏡像巨慢,可以自己構建私有的Registry)。
https://hub.docker.com/
Docker安裝與啓動
1.安裝Docker Docker官方建議在Ubuntu中安裝,因爲Docker是基於Ubuntu發佈的,而且一般Docker出現的問題Ubuntu是最先更新或者打丁的。在很多版本的CentOS中是不支持更新最新的一些補丁包的。
由於我們學習的環境都使用的是CentoS,因此這裏我們馨諾我e頭聯輸2-e醫看裸穎這裏建議安裝在CentOS7.x以上的版本,在CentOS6.x的版本中,安裝前需要安裝其他很多的環境而且Docker很多補丁不支持更新。
yum包更新到最新
sudo yum update
安裝需要的軟件包,yum-util 提供yum-config-manager功能,另外兩個是devicemapper驅動依賴的
sudo yum instal1-y yum-utils device-mapper-persistent-data 1vm2
設置yum源爲阿里雲
sudo yum-config-manager,-add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
安裝docker-ce
docker sudo yum install docker-ce
安裝後查看docker版本
docker-v
2.設置ustc的鏡像
ustc是老牌的linux鏡像服務提供者了,還在遙遠的ubuntu5.04版本的時候就在用。ustc的docker鏡像加速器速度很快。ustc docker mirror的優勢之一就是不需要註冊,是真正的公共服務。
https:/lug.ustc.edu.cn/wiki/m...:
vi/etc/docker/daemon.json
在該文件中輸入如下內容:
“registry-mirrors":["https://docker.mirrors.ustc.edu.cn"]
3.Docker的啓動與停止
systemctl命令是系統服務管理器指令
啓動docker:
systemct1 start docker
停止docker:
systemct1 stop docker
重啓docker:
systemct1 restart docker
查看docker狀態:
systemct1 status docker
開機啓動:|
systemct1 enable docker
查看docker概要信息
docker info
查看docker幫助文檔
docker--help
常用命令
1.鏡像相關命令
查看鏡像
docker images
- REPOSITORY:鏡像名稱
- TAG.鏡像標籤I
- IMAGEID:鏡像ID
- CREATED:鏡像的創建日期(不是獲取該鏡像的日期)
- SIZE:鏡像大小
這些鏡像都是存儲在Docker宿主機的/var/lib/docker目錄下
搜索鏡像
如果你需要從網絡中查找需要的鏡像,可以通過以下命令搜索
docker search 鏡像名稱
- NAME:倉庫名稱
- DESCRIPTION:鏡像描述
- STARS:用戶評價,反應一個鏡像的受歡迎程度OFFICIAL:是否官方
- AUTOMATED:自動構建,表示該鏡像由Docker Hub自動構建流程創建的
拉取鏡像
拉取鏡像就是從中央倉庫中下”本地
docker pull 鏡像名稱
例如,我要下載centos7鏡像docker pu1l centos:73.1.4
刪除鏡像
docker rmi 鏡像I0 //按鏡像ID除鏡像
刪除所有鏡像
docker rmidocker images
2.容器相關命令
查看容器
docker ps //查看正在運行的容器
docker ps-a //查看所有容器
查看最後一次運行的容器
docker ps -1
查看停止的容器
docker ps-f status-exited
2.創建與啓動容器
創建容器常用的參數說明:
創建容器命令:docker run
- -1:表示運行容器
- t:表示容器啓動後會進入其命令行。加入這兩個參數後,容器創建就能登錄進去。即分配一個僞終端。
- -name:爲創建的容器命名。
- v:表示目錄映射關係(前者是宿主機目錄,後者是映射到宿主機上的目錄),可以使用多個一v做多個目錄或文件映射。注意:最好做目錄映射,在宿主機上做修改,然後共享到容器上。
- d:在run後面加上-d參數,則會創建一個守護式容器在後臺運行(這樣創建容器後不會自動登錄容器,如果只加-i-t兩個參數,創建後就會自動進去容器)。
- p:表示端口映射,前者是宿主機端口,後者是容器內的映射端口。可以使用多個-p做多個端口映射
1)交互式方式創建容器
docker run-it--name-容器名稱鏡像名稱:標籤/bin/bash
這時我們通過ps命令查看,發現可以看到啓動的容器,狀態爲啓動狀態
退出當前容器
exit
2)守護式方式創建容器
docker run-di--name=容器名稱鏡像名稱:標籤
登錄守護式容器方式
docker exec-it 容器名你(或者容器I0)/bin/bash
3.停止與啓動容器
停止容器
docker stop 容器名稱(或者容器ID)
啓動容器
docker start 容器名稱(或者容器ID)
4.文件拷貝
如果我們需要將文件拷貝到容器內可以使用cp命令
docker cp需要拷貝的文件或目錄容器名稱:容器目錄
也可以將文件從容器內拷貝出來
docker cp 容器名稱:容器目錄需要拷貝的文件或目錄
5.目錄掛載
我們可以在創建容器的時候,將宿主機的目錄與容器內的目錄進行映射,這樣我們就可以通過修改宿主機某個目錄的文件從而去影響容器。
創建容器添加-v參數後邊爲宿主機目錄容器目錄,例如:
docker run-di-v/usr/local/myhtml:/usr/1ocal/myhtml--name-mycentos3 centos:7
如果你共享的是多級的目錄,可能會出現權限不足的提示。這是因爲CentOS7中的安全模塊selinux把權限禁掉了,我們需要添加參數-privileged=true來解決掛載的目錄沒有權限的問題
6.查看容器IP地址
我們可以通過以下命令查看容器運行的各種數據
docker inspect 容器名稱(容器D)
也可以直接執行下面的命令直接輸出IP地址
docker ihspect--format="f wetworksettings.IPAddress}}'容器名稱(容器ID)
7.刪除容器
刪除指定的容器
docker rm 容器名稱(容器ID)
應用部署
1.MySQL部署
拉取mysql鏡像
docker pull centos/mysq1-57-centos7
創建容器
docker run -di --name=tensquare_mysq1 -p 33306:3306 -e MYSQL_ROOT_PASSWORD=123456 my5q1
- -p代表端口映射,格式爲宿主機映射端口:容器運行端口
- e代表添加環境變量MYSQL_ROOT_PASSWORD是root用戶的登陸密碼
3.遠程登錄mysql連接宿主機的IP,指定端口爲33306
2.tomcat部署
拉取鏡像
docker pull tomcat:7-jre7
創建容器 -p表示地址映射.
docker run -di --name=mytomcat -p 9000:8080
-v /usr/local/webapps:/usr/local/tomcat/webapps tomcat:7-jre7
3.Nginx部署
拉取鏡像
docker pull nginx
創建Ngin容器
docker run -di --name=mynginx -p 80:80 nginx
4.Redis部署
拉取鏡側
docker pull redis
創建容器
docker run -di --name=myredis -p 6379:6379 redis
遷移與備份
容器保存爲鏡像
我們可以通過以下命令將容器保存爲鏡像
docker commit mynginx myngik_i
鏡像備份
我們可以通過以下命令將鏡像保存爲tar文件
docker save -o mynginx.tar mynginx_i
鏡像恢復與遷少
首先我們先刪除掉mynginx_img鏡像然後執行此命令進行恢復
docker load -i mynginx.tar
- -i輸入的文件
執行後再次查看鏡像,可以看到鏡像已經恢復
Dockerfile
1.什麼是Dockerfile
Dockerfile是由一系列命令和參數構成的腳本,這些命令應用於基礎鏡像並最終創建一個新的鏡像。
- 對於開發人員:可以爲開發團隊提供一個完全一致的開發環境;
- 對於測試人員:可以直接拿開發時所構建的鏡像或者通過Dockerfile文件構建一個新的鏡像開始工作了;
- 對於運維人員:在部署時,可以實現應用的無縫移植。
2.常用命今
3.使用腳本創建鏡像
1)創建目錄
mkdir -p /usr/1ocal/dockerjdk8
2)下載jdk-8u171-linux-x64.tar.gz並上傳到服務器(虛擬機)中的/usr/local/dockerjdk8目錄
3)創建文件Dockerfile
vi Dockerfile
#依賴鏡像名稱和ID
FROM centos:7
#指定鏡像創建者信息
MAINTAINER ITCAST
#換工作目錄
WORKDIR/usr
UN mkdir/usr/local/java
#ADD是相對路徑jar,把java添加到容器中
ADD jdk-8u171-1inux-x64.tar.gz/usr/local/java/
#配置java環境變量
ENV JAVA_HOME/usr/local/java/jdk1.8.e_171
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/1ib/dt.jar:$JAVA_HOME/1ib/tools.jar:$JRE_HOME/1ib:SCLASSPATH
ENV PATH $JAVA_HOME/bin:SPATH
4)執行命令構建鏡像
docker build-t='jdkl.8'.
注意後邊的空格和點,不要省略
5)查看鏡像是否建立完成
docker images
Docker私有倉庫
1.私有倉庫搭建與配置
1)拉取私有倉庫鏡像(此步省略)
docker pull registry
2)啓動私有倉庫容器
docker run -di --name=registry -p 5eee:5eee registry
3)打開瀏覽器輸入地址http://192.168.184.141:5000/v2/_catalog看到(“repositories“:[]}表示私有倉庫搭建成功並且內容爲空
4)修改daemon.json vi/etc/docker/daemon.json添加以下內容,保存退出。
{"insecure-registries":["192.168,184.141:5000"]}
此步用於讓docker信任私有倉庫地址
5)重啓docker服務
systemct1 restart docker
2.鏡像上傳至私有倉庫
1)標記此鏡像爲私有倉庫的鏡像
docker tag jdk1.8 192.168.184.141:5000/jdk1.8
2)再次啓動私服容器
docker start registry
3)上傳標記的鏡像
docker push 192.168.184.141:5000/jdk1.8