碰到的問題
1.在開發環境ok,到了穩定環境出問題。
2.現場的運維同事,需要準備對應操作系統的服務器,準備tas,jdk。
3.安裝一些新的服務 需要給駐地同學寫詳細的說明文檔,例如zookeeper,redis等。
什么是docker

docker :有道翻譯 n. 碼頭工人 物件
Docker的思想來自于集裝箱,集裝箱解決了什么問題?在一艘大船上,可以把貨物規整的擺放起來。并且各種各樣的貨物被集裝箱標準化了,集裝箱和集裝箱之間不會互相影響。那么我就不需要專門運送水果的船和專門運送化學品的船了。只要這些貨物在集裝箱里封裝的好好的,那我就可以用一艘大船把他們都運走。
docker就是類似的理念。現在都流行云計算了,云計算就好比大貨輪。docker就是集裝箱。
1.不同的應用程序可能會有不同的應用環境,比如.net開發的網站和php開發的網站依賴的軟件就不一樣,如果把他們依賴的軟件都安裝在一個服務器上就要調試很久,而且很麻煩,還會造成一些沖突。常規來講,我們可以在服務器上創建不同的虛擬機在不同的虛擬機上放置不同的應用,但是虛擬機開銷比較高。docker可以實現虛擬機隔離應用環境的功能,并且開銷比虛擬機小,小就意味著省錢了。
2.你開發軟件的時候用的是Ubuntu,但是運維管理的都是centos,運維在把你的軟件從開發環境轉移到生產環境的時候就會遇到一些Ubuntu轉centos的問題,比如:有個特殊版本的數據庫,只有Ubuntu支持,centos不支持,在轉移的過程當中運維就得想辦法解決這樣的問題。這時候要是有docker你就可以把開發環境直接封裝轉移給運維,運維直接部署你給他的docker就可以了。而且部署速度快。
3.在服務器負載方面,如果你單獨開一個虛擬機,那么虛擬機會占用空閑內存的,docker部署的話,這些內存就會利用起來。總之docker就是集裝箱原理。
Docker 使用 Google 公司推出的 Go 語言 進行開發實現,基于 Linux 內核的 cgroup,namespace,以及 AUFS 類的 Union FS 等技術,對進程進行封裝隔離,屬于操作系統層面的虛擬化技術。由于隔離的進程獨立于宿主和其它的隔離的進程,因此也稱其為容器。最初實現是基于 LXC,從 0.7 以后開始去除 LXC,轉而使用自行開發的 libcontainer,從 1.11 開始,則進一步演進為使用 runC 和 containerd。
與虛擬機有啥區別
虛擬機:
docker:
上面的圖片比較了 Docker 和傳統虛擬化方式的不同之處。傳統虛擬機技術是虛擬出一套硬件后,在其上運行一個完整操作系統,在該系統上再運行所需應用進程;而容器內的應用進程直接運行于宿主的內核,容器內沒有自己的內核,而且也沒有進行硬件虛擬。因此容器要比傳統虛擬機更為輕便。
使用docker前先了解幾個概念
鏡像:
Docker的鏡像概念類似于虛擬機里的鏡像,是一個只讀的模板,一個獨立的文件系統,包括運行容器所需的數據,可以用來創建新的容器。
例如:一個鏡像可以包含一個完整的 ubuntu 操作系統環境,里面僅安裝了Mysql或用戶需要的其它應用程序。
Docker的鏡像實際上由一層一層的文件系統組成,這種層級的文件系統被稱為UnionFS。鏡像可以基于Dockerfile構建,Dockerfile是一個描述文件,里面包含若干條命令,每條命令都會對基礎文件系統創建新的層次結構。
Docker 提供了一個很簡單的機制來創建鏡像或者更新現有的鏡像,用戶甚至可以直接從其他人那里下載一個已經做好的鏡像來直接使用。Docker容器
Docker 利用容器來運行應用。
Docker容器是由Docker鏡像創建的運行實例。Docker容器類似虛擬機,可以支持的操作包括啟動,停止,刪除等。每個容器間是相互隔離的,容器中會運行特定的應用,包含特定應用的代碼及所需的依賴文件。
可以把容器看做是一個簡易版的 Linux 環境(包括root用戶權限、進程空間、用戶空間和網絡空間等)和運行在其中的應用程序。Docker倉庫
如果你使用過git和github就很容易理解Docker的倉庫概念。Docker 倉庫的概念跟Git 類似,注冊服務器可以理解為 GitHub 這樣的托管服務。
Docker 倉庫是用來包含鏡像的位置,Docker提供一個注冊服務器(Register)來保存多個倉庫,每個倉庫又可以包含多個具備不同tag的鏡像。Docker運行中使用的默認倉庫是 Docker Hub 公共倉庫。
倉庫支持的操作類似git,當用戶創建了自己的鏡像之后就可以使用 push 命令將它上傳到公有或者私有倉庫,這樣下次在另外一臺機器上使用這個鏡像時候,只需要從倉庫上 pull 下來就可以了。數據卷
主要的作用就是保留數據,因為當容器刪除時,容器的存儲層會被清空,定義數據卷是為了與物理磁盤掛接,從而將數據保留。常用命令
刪除所有鏡像
docker rmi $(docker images -q)
刪除所有未運行 Docker 容器
docker rm $(docker ps -a -q)
啟動 容器
docker run --name webserver -d -p 80:80 nginx
訪問容器內部
$ docker exec -it 容器名 bash
commit構建鏡像
$ docker commit
--author "Tao Wang twang2218@gmail.com"
--message "修改了默認網頁"
webserver
nginx:v2
根據dockerfile生成本地鏡像
docker build --no-cache --force-rm -t registry.thunisoft.com:5000/artery/zxzbtx:latest .
將鏡像推到arteryDocker 倉庫
docker push registry.thunisoft.com:5000/artery/zxzbtx:latest