Docker容器化管理技術

Docker容器化

1.Docker簡介

1.1什麼是虛擬化
	在計算機中,虛擬化(英語:Virtualization)是一種資源管理技術,是將計算機的各種實體資源,如:服務器,網絡,內存及存儲等,予以抽象,轉化後呈現出來,打破實體結構間的不可切割的障礙,使用戶可以比原本的組態更好的方式來應用這些資源.這些資源的新虛擬部分是不受現有資源的架設方式,地域或者物理組態所限制.一般所指的虛擬化資源包括計算能力和資料存儲
	在實際的生產環境中,虛擬化技術主要用來解決高性能的物理硬件產能過剩和老的舊的硬件產能過低的重組重用,透明化底層物理硬件,對資源進行充分的利用
	虛擬化技術種類很多,例如:軟件虛擬化,硬件虛擬化,內存虛擬化,網絡虛擬化(vip),桌面虛擬化,服務虛擬化,虛擬機等
1.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的容器就像操作一個快速輕量級的虛擬機一樣簡單
1.3爲什麼選擇Docker
1.上手快
	用戶只需要幾分鐘,就可以把自己的程序Docker化,Docker依賴於"寫時複製"(copy-on-write)模型,使修改應用程序也非常的迅速,可以說是"隨心所欲,代碼即改"的境界
	隨後,就可以創建容器來運行應用程序了大多數的Docker容器只需要不到1秒中既可以啓動,由於取出了管理程序的開銷Docker容器擁有很高的性能,同時同一臺宿主機中也可以運行更多的容器,使用戶儘可能的充分利用系統的資源
2.職責的邏輯分類
	使用Docker,是開發人員只需要關心容器中運行的應用程序,而運維人員只需要關心如何管理容器.Docker設計的目的就是要加強開發人員寫代碼的開發環境與應用程序要部署的生產環境一致性.從而降低那種"開發時一切正常,肯定是運維的問題(測試環境都是正常的,上線後出了問題就歸結爲肯定是運維的問題)"
3.快速高效的開發生命週期
	Docker的目標之一就是縮短代碼從開發,測試到部署,上線運行的週期,讓你的應用程序具備可移植性,易於構建,並易於協作.(通俗一點說,Docker就像一個盒子,裏面可以裝很多物件,如果需要這些物件的可以直接將該大盒子拿走,而不需要從該盒子一件一件的取)
4.鼓勵使用面向服務的架構
	Docker還鼓勵面向服務的體系結構和微服務架構.Docker推薦單個容器只運行一個應用程序或進程,這樣就形成了一個分佈式的應用程序模型,在這種模型下,應用程序或服務器都可以表示爲一系列內部互聯的容器,從而使分佈式部署應用程序,擴展或調試應用程序都變得簡單,同時也提高了程序的內省性(當然可以在一個容器中運行多個程序)
1.4.容器與虛擬機比較

下面的圖片比較了Docker和傳統虛擬化方式的不同之處,可見容器時在操作系統層面上實現虛擬化,直接複用本地主機的操作系統,而傳統方式則是在硬件層面上實現

與傳統的虛擬機相比,Docker優勢體現爲啓動速度快,佔用體積小
1.5Docker組件
1.5.1Docker服務器與客戶端

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-ddTw5Fks-1589866873351)(C:\Users\One\AppData\Roaming\Typora\typora-user-images\1568015934951.png)]

Docker是一個客戶端-服務器(C/S)架構程序.Docker客戶端只需要向Docker服務器或者守護進程發出請求,服務器或者守護進程將完成所有工作並返回結果.Docker提供了一個命令行工具Docker以及一整套RESTful API你可以在同一臺宿主句上運行Docker守進程和客戶端,也可以從本地的Docker客戶端裏連接到運行在另一臺宿主機上的遠程Docker守護進程

1.5.2 Docker鏡像與容器
鏡像是構建Docker的基石.用戶基於鏡像來運行自己的容器.鏡像也是Docker生命週期中的"構建部分".鏡像是基於聯合文件系統的一種層式結構,由一系列指令一步一步的來構建
	例如:
		添加一個文件
		執行一個命令
		打開一個窗口
	也可以將鏡像當做容器的"源代碼".鏡像體積很小,非常"便攜",易於分享,存儲和更細
	Docker可以幫助你構建和部署容器,你只需要把自己的應用程序或者服務打包放到容器即可.容器時基於鏡像系統啓動起來的,容器中可以運行一個或者多個線程.我們可以認爲,鏡像是Docker生命週期中的構建或者打包階段,而容器則是啓動或者執行階段.容器基於鏡像啓動,一旦容器啓動完成後我們就可以登錄到容器中安裝自己需要的軟件或者服務
	所以Docker容器就是
		一個鏡像格式
		一些列標準操作
		一個執行環境
	Docker借鑑了標準集裝箱的概念,標準集裝箱將貨物運往世界各地,Docker將這個模型運用到自己的設計中,唯一不同的是:集裝箱運輸貨物,而Docker運輸軟件
	和集裝箱一樣,Docker在執行上述操作時,並不關心容器中到底裝了什麼,它不管事web服務器還是數據庫,或者是應用程序服務器什麼的.所有的容器都按照相同的方式將內容"裝載"進去
	Docker也不關心你要把容器運到何方,我們可以在自己的筆記本中構建容器,上傳到Registry然後下載到一個物理的或者虛擬的服務器來測試,在把容器部署到具體的主機中,像標準集裝箱一樣,Docker容器方便替換,可以疊加,易於分發,並且儘量使用
1.5.3Registry註冊中心
Docker用Registry來保存用戶構建的鏡像.Registry分爲公佈和私有兩種.Docker公司運營公共的Registry叫做Docker Hub.用戶可以在Docker Hub註冊賬號,分享並保存自己的鏡像(說明:在Docker Hub下載鏡像巨慢,可以構建私有的Registry)
	https://hub.docker

2.Docker安裝部署

·目前CentOS僅發行版本中的內核支持Docker
·Docker運行在Centos 7上,要求系統爲64位,系統內核爲3.10以上
·Docker運行在Centos -6.5或者更高的版本的Centos上,要求系統爲64位,系統內核版本爲2.6.32-431或者更高的版本
·查看自己的內核
·uname -a命令用於打印當前系統相關信息(內核版本號,硬件架構,主機名稱和操作系統類型等)
 uname -a,--all 顯示所有
 -s,--kernel-name 輸出內核名稱
 -n,--nodename 輸出網絡節點上的主機名
 -r,--kernel-release 輸出內核發行號
 -v,--kernel-version 輸出內核版本號
 -m,--machine 輸出主機的硬件架構名稱
 -o,--operating-system 輸出操作系統名稱

2.1.Docker架構

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-rrBkV9pG-1589866873353)(C:\Users\One\AppData\Roaming\Typora\typora-user-images\1568790672366.png)]

Docker使用客戶端-服務器(C/S)架構模式,使用遠程API來管理和創建Docker容器
Docker 容器通過Docker鏡像來創建
容器與鏡像的關係類似於面向對象編程中的對象與類
Docekr  面向對象
容器		對象
鏡像		類

2.2.Docker三大核心組件
·鏡像(image)
	Docker鏡像(image)就是一個只讀的模板,鏡像可以用來創建Docker容器,一個鏡像可以創建很多容器
·容器(Container)
	-Docker利用容器(Container)獨立運行的一個或一組應用.容器時用鏡像創建的運行實例
	-它可以被啓動,開始,停止,刪除.每個容器都是相互隔離的,保證安全的平臺
	-可以把容器看作是一個簡易版的Linux環境(包括root用戶權限,進程空間,用戶空間和網絡空間等)和運行在其中的運行程序
	-容器的定義和鏡像幾乎一模一樣,也是一堆層的統一視角,唯一區別在於容器的最上面的那一層是可讀可寫的
·倉庫(repository)
	-倉庫(Repository)是集中存放鏡像文件的場所
	-倉庫(Repisitory)和倉庫註冊服務器(Registry)是有區別的.倉庫註冊服務器上往往存放着多個倉庫,每個倉庫中又包含了多個鏡像,每個鏡像有不同的標籤(tag)
	-最大的公開倉庫是 Docker Hub(https://hub.docker.com/),類似Git Hub
	-存放了數量龐大的鏡像提供用戶下載.國內的公開倉庫包括阿里雲,網易雲等
	
2.3.Docker安裝步驟
1.確認Centos7版本
	cat /etc/redhat-release
2.安裝配置環境
	yum -y install gcc gcc-c++
3.安裝Docker
	#注:安裝前查看有沒有其他版本的Docker 有就移除
	yum remove docker\
	docker-client\
	docker-client-latest\
	docker-common\
	docker-lastest\
	docker-lastest-logrotate\
	docker-logrotate\
	docker-engine
	#安裝新Docker依賴包
	yum install -y yum-utils device-mapper-persistent-data lvm2
4.設置stable鏡像倉庫(阿里雲鏡像)
	yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
5.更新yum軟件包索引
	yum makecache fast
6.安裝最新版本的Docker CE和containerd
	yum -y install docker-ce docker-ce-cli containerd.io
#主機上的圖像,容器,卷或自定義配置文件不會自動刪除.要刪除所有圖像,容器和卷
	yum remove docker-ce
	rm -rf /var/lib/docekr
7.啓動Docker
	systemctl start docker

2.3配置阿里鏡像加速器
1>.登錄:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
2>.點擊左下角"鏡像加速器"
3>.在linux中操作
	sudo mkdir -p /etc/docker
	sudo tee /etc/docker/daemon.json <<-'EOF'
	{
  	"registry-mirrors": ["https://59fygmkm.mirror.aliyuncs.com"]
	}
	EOF
	sudo systemctl daemon-reload
	sudo systemctl restart docker

3.容器生命週期管理

3.1.docker run
創建一個新的容器並運行一個命令、
	docker run [OPTIONS] image [COMMAND][ARG...]
OPTIONS說明:
	·-a stdin:指定標準輸入輸出內容類型,可選STDIN/STDOUT/STDERR
	·-d:後臺運行容器,並且返回容器的id
	·-i:以交互模式運行容器,通常與-t同時使用
	·-t:爲容器重新分配一個僞輸入終端,通常與-i同時使用
	·--name="nginx-lb":爲容器指定一個名稱
	·-dns 8.8.8.8:指定容器使用的DNS服務器,默認和宿主機一致
	·-dns-search example.com:指定容器DN搜索域名,默認與宿主機一致
	·-h "mars":指定容器的hostname
	·-e username="ritchie":設置環境變量
	·--env-file=[]:從指定的文件讀入環境變量
	·--cpuset="0-2"or --cpuset="0,1,2":綁定容器到指定的CPU運行
	·-m:設置容器使用內存最大值
	·--net="birdge":指定容器的網絡連接類型,支持birdge/host/none/container
	·--link=[]:添加鏈接到另一個容器
	·--expose=[]:開放一個端口或一組端口
	
	使用Docker鏡像nginx:latest以後臺模式啓動一個容器,並將容器命名爲mynginx
		docker run --name=mynginx -d nginx:latest
	使用鏡像nginx:lastest以後臺模式啓動一個容器,並將容器的80端口映射到主機的隨機端口
		docker run -P -d nginx:latest
	使用鏡像nginx:latest以後臺模式啓動一個容器,將容器的80端口映射到主機的80端口,主機的目錄/data映射到容器的/data
		docker run -p 80:80 -v /data:/data -d nginx:latest
	使用鏡像nginx:latest以交互模式啓動一個容器,在容器內執行/bin/bash命令
		docker run -it nginx:latest /bin/bashroot@b8573233d675:/#
		
3.2.docker kill
殺掉一個運行中的容器
	docker kill [OPTIONS]CONTAINER [CONTAINER..]
	·-s:向容器發送一個信號
殺掉運行中的容器mynginx
	docker kill -s kill mynginx 
3.3.docker rm
刪除一個或者多個容器
	docker rm [OPTIONS] CONTAINER[CONTAINER....]
	·-f:通過SIGKILL信號強制刪除一個運行中的容器
	·-l:移除容器間的網絡連接,而非容器本身
	·-v:-v刪除與容器關聯的卷
	1.強制刪除db01,db02
		docker rm -f db01 db02
	2.移除容器nginx01對容器db01的連接,連接名db
		docker rm -l db
	3.刪除容器nginx01,並刪除容器掛載的數據卷
		docker rm -v nginx01
	
3.4.docker pause/unpause
暫停/恢復 容器中的所有進程
	1.暫停數據庫容器db01提供服務
		docker pause db01
	2.恢復數據庫容器db01提供服務
		docker unpause db01
3.5.docker create
創建一個新的容器但是不啓動
	docker create [OPTIONS] IMAGE [COMMAND][ARG...]
3.6.docker exec
在運行中的容器執行命令
	docker exec [OPTIONS] CONTAINER COMMAND [ARG..]
	·-d:分離模式:在後臺運行
	·-i:即時沒有附加也保持STDIN打開
	·-t:分配一個僞終端

4.容器操作

4.1.docker ps
 docker ps [OPTIONS]
 	· -a:顯示所有的容器,包括沒有運行的
 	· -f:根據條件過濾顯示的內容
 	· --format:指定返回值的模板文件
 	· -l:顯示最近創建的容器
 	· -n:列出最近創建的n個容器
 	· --no-trunc:不截斷輸出
 	· -q:靜默模式,顯示容器編號
 	· -s:顯示總的文件大小
 1.相關操作
 	#列出所有的正在運行的容器信息
 		docker ps
 	#列出最近創建的5個容器信息
 		docker ps -n 5
 	#列出所有創建的容器id
 		docker ps -a -q
 		
4.2 docker inspect
獲取容器/鏡像的元數據
	docker inspect [OPTIONS]NAME|ID[NAME|ID...]
	· -f:指定返回值的模板文件
	· -s:顯示總的文件大小
	· --type:爲指定類型返回JSON
	
	查看mysql的元數據信息
	docker inspect mysql:5.7
	
4.3 docker top
查看容器中運行的進程信息
	docker top [OPTIONS] CONTAINER [ps OPTIONS]
容器運行時不一定有/bin/bash終端來交互來執行top命令,而且容器還不一定有top命令,可以使用docker top來實現查看container中正在運行的進程
	docker top mysql
4.4.docker attach
連接到正在運行中的容器
	docker attach [OPTIONS] CONTAINER
4.5.docker events
從服務器上獲取實時事件
	docker events [OPTIONS]
	#案例
	#顯示docker 2019年6月1後的所有事件
	docker events --since="1559399759000"
	#顯示docker 鏡像爲mysql:5.6 2019你那6月1日後的相關事件
	docker events -f "image"="mysql:5.7" --since="1559399759000"
		· -f:根據條件過濾事件
		· --since:從指定的時間戳後顯示所有事件
		· --until:流水事件顯示到指定的時間爲止
4.6.docker logs
docker logs [OPTIONS] CONTAINER
#跟蹤查看容器mynginx的日誌輸出
docker logs -f 2ec7b66d9617
	· -f:跟蹤日誌輸出
	· --since:顯示某個開始時間的所有日誌
	· -t:顯示時間戳
	· --tail:僅列出最新N條容器日誌
4.7.docker wait
阻塞運行直到容器停止,然後打印出它的退出代碼

docker wait[OPTIONS] CONTAINER [CONTAINER...]
#逐漸停止
docker wait CONTAINER

4.8.docker export
將文件系統作爲一個tar歸檔導出到STDOUT
	docker export [OPTIONS] CONTAINER
	#實例
	docker export -o mysql -'date +%Y%m%d'.tar a404c6c174a2
	· -o:將輸入內容寫到文件
	
4.9. docker port
列出指定的容器的端口映射,或者查找將PRIVATE_PORT NAT面向公衆的端口
	docker port [OPTIONS] CONTAINER [PRIVATE_PORT[/PROTO]]
	#實例
	docker port 容器ID

5.容器rootfs命令

5.1.docker commit
從容器創建一個新的鏡像
	docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
	#提交
	docker commit -a "runoob.com" -m "my apache" a404c6c174a2 mysql:v1
	· -a:提交鏡像的作者
	· -c:使用Dokcerfile指令來創建鏡像
	· -m:提交時的說明文字
	· -p:在commit時,將容器暫停
	
5.2.docker cp
docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-

docker cp [OPTIONS]SRC_PATH|- CONTAINER:DESC_PATH
#將容器96f7f14e99ab的/www目錄拷貝到主機的/tmp目錄中
docker cp 96f7f14e99ab:/www/tmp/
#將主機/www/runoob目錄拷貝到容器96f7f14e99ab的/www目錄下
docker cp /www/runoob 96f7f14eqqab:/www/
#將主機/www/runoob目錄拷貝到容器96f7f14e99ab中,目錄重命名爲www
docker cp /www/runoob 96f7f14e99ab:/www
	· -L:保持源目標中的鏈接
5.3.docker diff
檢查容器裏文件結構的更改
	docker diff[OPTIONS] CONTAINER
	#查看容器mysql的文件結構更改
	docker diff mysql

6.鏡像倉庫

6.1.dokcer login/logout
登錄/登出到一個Docker鏡像倉庫,如果沒有指定鏡像倉庫的地址,默認爲官方倉庫Docker Hub
	docker login [OPTIONS] [SERVER]
	docker logout [OPTIONS] [SERVER]
	#登錄到Docker Hub
	dokcer login -u 用戶名 -p 密碼
	3登出Docker Hub
	docker logout
	· -u:登錄的用戶名
	· -p:登錄用的密碼
	
6.2.docker pull
從鏡像倉庫中拉取或者更新指定鏡像
	docker pull [OPTIONS] NAME[:TAG|@DIGEST]
	#從Docker Hub下載java最新版的鏡像
	docker pull java
	#從Dokcer Hub下載REPOSITORY爲java的所有鏡像
	docker pull  -a java
	· -a:拉取所有tagged鏡像
	· --disable-content-trust:忽略鏡像的校檢默認是開啓的
6.3.docker push
將本地的鏡像上傳到鏡像倉庫,要先登錄到鏡像倉庫
	docker push [OPTIONS] NAME[:TAG]
	· --disable-content-trust:忽略鏡像的校驗,默認是開啓的
6.4.docker search
從Docker Hub查找鏡像
	docker search [OPTIONS] TERM
	#從Docker Hub查找所有鏡像包含java,並且收藏數大於10的鏡像
	docker search -s 10 java
	
	· --automated:只列出automated build類型的鏡像
	· --no-trunc:顯示完整的鏡像描述
	· -s:列出收藏數不小於指定值的鏡像
	

7.本地鏡像管理

7.1.docker images
列出本地鏡像
	docker images [OPTIONS] [REPOSITORY[:TAG]]
	
	· -a:列出本地所有的鏡像(包含中間映像層,默認情況下,過濾掉中間映像層)
	· --digests:顯示鏡像的摘要信息
	· -f:顯示滿足條件的鏡像
	· --format:指定返回值的模板文件
	· --no-trunc:顯示完整的鏡像信息
	· -q:只顯示鏡像id
顯示:
	· PEPOSITORY:鏡像的倉庫源
	· TAG:鏡像標籤(版本)
	· IMAGE ID:鏡像ID
	· CREATED :創建時間(在docker hub)
	· SEZE:該鏡像的大小
7.2.docker rmi
刪除本地一個或多少鏡像
	docker rmi [OPTIONS] IMAGE [IMAGE...]
	#刪除正在運行的docker 
	docker rm -f $(docker ps -q)
	
	· -f:強制刪除
	· --no-prune:不移除該鏡像的過程鏡像,默認移除
	
7.3.docker tag
標記本地鏡像,將其歸入某一倉庫
	docker tag[OPTIONS] IMAGE[:TAG][REGISTRYHOST/][USERNAME/]NAME [:TAG]
7.4.docker build
使用Dockerfile創建鏡像
	docker build [選項]<上下文路徑/URL/->
	
	· --build-arg=[]:設置鏡像創建時的變量
	· --cpu-shares:設置cpu使用權重
	· --cpu-period:限制CPU CFS週期
	· --cpu-quota:限制CPU CFS配額
	· --cpuset-cpus:指定使用的CPU Id
	· --cpuset-mems:指定使用的內存id
	· --disable-content-trust:忽略校驗,默認開啓
	· -f:指定要使用的Dockerfile路徑
	· --force-rm:設置鏡像過程中刪除中間容器
	· --isolation:使用容器隔離技術
	· --label=[]:設置鏡像使用的元數據
	· -m:設置內存最大值
	· --memory-swap:設置Swap的最大值爲內存+swap,"-1"表示不限swap
	· --no-cache:創建鏡像的過程中不適用緩存
	· --pull:嘗試去更新鏡像的版本
	· -q:安靜模式,成功後只輸出鏡像id
	· --rm:設置鏡像成功後刪除中間容器
	· --shm-size:設置/dev/shm的大小,默認值爲64M
	· --ulimit:Ulimit配置
7.5.docker history
查看鏡像的創建歷史
	docker history [OPTIONS] IMAGE
		· -H:以可讀寫的格式打印鏡像大小和日期,默認爲true
		· --no-trunc:顯示完整的提交記錄
		· -q:僅列出提交ID
7.6.docker save
將制定鏡像保存成tar歸檔文件
	docker save [OPTIONS] IMAGE [IMAGE...]
	#
	docker svae -o my_ubuntu_v3.tar Andy/Ubuntu:v3
	· -o:輸出到的文件
7.7.docker import
從歸檔文件中創建鏡像
	dokcer import [OPTIONS] file|URL|-[REPOSITORY[:TAG]]
	· -c:應用docker指令創建鏡像
	· -m:提交時的說明文字
7.8.docker info

​ 顯示docker 系統信息,包括鏡像和容器數

7.9.docker version

​ 顯示docker 版本信息

​ docker verson[OPTIONS] · -f:指定返回值的模板文件

8.Docker實戰案例

8.1.HelloWorld實例
#啓動Docker  systemctl start  docker 
	dokcer run hell-world
8.2.Tomcat實例
#拉取tomcat鏡像
docker pull tomcat:7-jre7
#創建容器  -v:目錄掛載
docker run -id --name=mytomcat -p 9000:8080 -v /usr/local/webapps:/usr/local/webapps tomcat:7-jre7
#部署web應用   alt+p
sftp> put D:/VMware_GX/VueJs_Demo.war
#把war包轉移到webapps
mv /home/mysftp/VueJs_Demo.war /usr/local/webapps
#訪問tomcat

8.3.Nginx實例
#拉取鏡像
	docker pull nginx
#創建nginx容器
docker run -di --name=mynginx -p 80:80 nginx
#使用SFTP上傳文件
sftp> put -r D:/VMware_GX/Admin_LTE
#找到nginx的目錄
cd /etc/nginx
#查看配置文件
cat nginx.conf
#進入並且查看default.conf
cd /etc/nginx/conf.d/ cat default.conf
#找到nginx存放主頁的地方
/usr/share/nginx/html# dir
	50x.html  index.html
#把要替換的文件夾改名
mv Admin_LTE html
#覆蓋原來的html頁面
docker cp html mynginx:/usr/share/nginx/
8.4.Redis實例
#拉取redis鏡像
docker pull redis
#創建redis容器
docker run -di --name=myredis -p 6379:6379 redis
#通過本地的redis-cli.exe來訪問當前docker中的redis 
 redis-cli -h192.168.180.132

9.遷移與備份

9.1.容器保存爲鏡像
可以通過一下命令將容器保存爲鏡像
docker commit mynginx mynginx_i
9.2.鏡像備份
可以通過以下命令將鏡像保存爲tar文件
docker save -o mynginx.tar mynginx_i
9.3.鏡像的恢復與遷移
可以先刪除掉mynginx_i鏡像,然後執行命令進行恢復
docker load -i mynginx.tar


· -i輸入的的文件
執行後再次查看鏡像,就恢復了

10.Dockerfile

10.1.什麼是Dockerfile
Dockerfile是由一系列命令和參數構成的腳本,這些命令應用於基礎鏡像並最終創建一個新的鏡像
	1.對於開發人員來說,可以爲開發團隊提供一個完全一致的開發環境
	2.對於測試人員來說,可以直接拿開發時所構建的鏡像或者通過Dockerfile文件構建一個新的鏡像開始工作
	3.對於運維人員來說:在部署時,可以實現應用的無縫移植
	
10.2.常用命令
1>.FROM image_name:tag
	定義了使用哪個基礎鏡像啓動構建流程
2>.MAINTAINER user_name
	聲明鏡像的作者
3>.EVN key value
	設置環境變量可以寫多條
4>.RUN command
	是Dockerfile的核心部分(同樣是可以寫多條)
5>.ADD source_dir/file dest_dir/file
	將宿主機的文件複製到容器內,如果是一個壓縮文件,將會在複製後自動解壓
6>.COPY source dir/file dest_dir/file
	和ADD相似但是如果有壓縮文件並不能解壓
7>.WORKDIR path_dir
	設置工作目錄
	
10.3.使用腳本創建鏡像
#創建一個目錄
mkdir -p /usr/local/dockerjdk8
#使用SFTP把jdk8的壓縮包上傳
sftp> put D:\VMware\jdk-8u144-linux-x64.tar.gz
#把上傳的壓縮包 移動到上面創建的目錄
mv jdk-8u144-linux-x64.tar.gz /usr/local/dockerjdk8
#進入目錄
cd /usr/local/docker1.8/
#編寫Dockerfile文件
vi Dockerfile
#編寫內容如下
FROM centos:7
MAINTAINER xuwenxiao
RUN mkdir /usr/local/java
ADD jdk-8u144-linux-x64.tar.gz /usr/local/java/
ENV JAVA_HOME-/usr/local/java/jdk1.8.0_144
ENV JRE_HOME=$JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/bin/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASS_PATH
ENV PATH $JAVA_HOME/bin:$PATH
#構建 .代表當前文件夾
docker build -t='jdk1.8' . 
#查看鏡像 
docker images
11.Docker的私有倉庫
11.1.Docker私有倉庫的配置和搭建
1>.拉取私有倉庫鏡像
	docker pull registry
2>.啓動私有倉庫容器
 	docker run -di --name=registry -p 5000:500 registry
3>.打開瀏覽器輸入地址192.168.180.132:500/v2/_catalog看到{"repositories":[]}表示私有倉庫搭建成功並且內容爲空
4>.修改daemon.json
	vi /etc/docker/dameon.json
	添加一下內容並保存退出
	{"insecure-registries":[192.168.180.132:5000]}
5>.重啓docker服務
	systemctl restart  docker

11.2.鏡像上傳到私有倉庫
1>.標記此鏡像爲私有倉庫的鏡像
	docker tag jdk1.8 192.168.180.132:5000/jdk1.8
2>上傳標記的鏡像
	docker push 192.168.180.132:5000/jdk1.8

A_HOME/bin/dt.jar:$JAVA_HOME/lib/tools.jar: JREHOME/lib:JRE_HOME/lib:CLASS_PATH
ENV PATH JAVAHOME/bin:JAVA_HOME/bin:PATH
#構建 .代表當前文件夾 docker build -t=‘jdk1.8’ .
#查看鏡像 docker images

11.1.Docker私有倉庫的配置和搭建

1>.拉取私有倉庫鏡像
	docker pull registry
2>.啓動私有倉庫容器
 	docker run -di --name=registry -p 5000:500 registry
3>.打開瀏覽器輸入地址192.168.180.132:500/v2/_catalog看到{"repositories":[]}表示私有倉庫搭建成功並且內容爲空
4>.修改daemon.json
	vi /etc/docker/dameon.json
	添加一下內容並保存退出
	{"insecure-registries":[192.168.180.132:5000]}
5>.重啓docker服務
	systemctl restart  docker

11.2.鏡像上傳到私有倉庫

1>.標記此鏡像爲私有倉庫的鏡像 docker tag jdk1.8 192.168.180.132:5000/jdk1.8
2>上傳標記的鏡像 docker push 192.168.180.132:5000/jdk1.8

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