私有DockerHub搭建

docker簡介

一個開源的應用容器引擎,能夠用來打包程序,能夠包入依賴環境,這樣只須要提供docker image便可,相似於虛擬機,可是更輕量級。git

幾個概念:github

Paas,platform as a service,Caas container as a service。docker

鏡像:文件的層次結構以及包含如何運行容器的源數據,相似虛擬機中安裝系統的iso文件。json

容器:從鏡像建立的運行實例,能夠被啓動、開始、中止、刪除。 相似於安裝好的虛擬機系統。瀏覽器

倉庫:存放鏡像的倉所,倉庫註冊服務器上有多個倉庫,每一個倉庫有多個鏡像,每一個鏡像有多個tab。和git作類比的話,dockerhub相似github,裏面有不少項目,項目相似於鏡像,每一個項目有屢次提交,對應鏡像的多個tag安全

 

使用目的

1,實現應用隔離,多個應用可能會相互影響,經過使用docker可使相互分離,好比搭建禪道系統會用到lnamp,而其餘的一些也會用到,雖然經過配置也能分割【目前現狀,可是不夠直觀,並且conf文件寫的比較亂,多是水平差,不過不想花太多精力在這個上面,畢竟配置不是目的】,可是使用docker會更方便整潔,好比本地81端口提供A服務,82端口提供B服務,只須要ngix中配置轉發便可。bash

2,方便管理,進行一些實驗的時候,老是得記錄當前的一些東西,一旦實驗失敗還須要還原,若是使用docker,只須要根據須要commit備份便可,若是失敗了,從新加載以前的image繼續。服務器

3,方便遷移,在任意一臺電腦上,不管是服務器仍是本地,進行實驗測試,完成後發佈只須要將對應的image移過去便可,以前則是在本地作一遍,好了再在server上作一遍,雖然說熟能生巧,但是浪費時間,並且沒必要要,畢竟根本目的是開發某個功能,不是爲了部署和維護。學習

4,體積小。以前有用過虛擬機,利用快照功能備份,可是文件太大了,難以經過U盤移動拷貝,docker image通常幾十兆到一兩百兆,大的也才一個多G,很輕易能夠經過U盤拷貝。測試

5,鏡像多,DockerHub上有不少公開image,只須要找到合適的鏡像,在上面進行修改便可。

6,佔用資源少,若是想要虛擬機流暢運行,至少2G或者4G的內容,16G頂多開四五個虛擬機,而docker能夠運行不少個。

侷限性

畢竟只是大概的瞭解了docker,看書中介紹有提到安全性等問題,根據須要決定是否使用,本身目前只是爲了作一些實驗學習,因此採用。不過以前初次接觸docker的時候,爲了搭建一個服務,一直沒成功,因此直接下了別人的image,結果運行後雖然能實現目的,可是不知道怎麼停下來,搜索百度,怎麼都停不下來,最終直接刪除了文件,因爲docker是封裝好的,若是既能知足需求,同時悄悄的作一些其餘事情,也是很難發現的,不想github同樣,直接提供源碼,若是有後門就有可能被人發現,因此docker最好下載可信度高的,或者直接本身從頭開始搭建。

經常使用docker命令

docker須要管理員權限運行,下面省略sudo

man docker會給出文檔說明

docker 或者docker /? 或者docker --help 給出幫助文檔

 

爲了下載dockerhub的image,首先須要在dockerhub上註冊。

docker login   //進行登陸,用戶名不帶郵箱@以及後面的部分

登陸成後能夠在dockerhub上搜索下載

docker search XXX //以XXX爲關鍵字在dockerhub上搜索

docker pull AAA:BBB //AAA是image的名字,BBB是tag,若是不指定,則爲latest,即下載最新的image

下載後本地就有了鏡像

docker images //查看本地的docker

會列出REPOSITORY  TAG  IMAGEID CREATED SIZE等信息

docker ps // 查看運行中的container

會列出CONTAINERID  IMAGE COMMAND CREATED STATUS PORTS等信息

docker start/stop/restart CONTAINERID   //中止某個container,能夠只輸入部分,只要可以作出區分便可,好比container少的時候只輸入一兩位就夠了

docker port CONTAINERID //查看該container port映射關係

docker run 【選項】 IMAGE 【command  args】  //從某個鏡像啓動container,若是本地沒有會自動下載

docker commit CONTAINERID  repository:tag //當在docker內作出某些修改後,能夠用這個命令建立新的image,相似虛擬機的快照功能

docker exec //進入某個container內,如docker exec -it /bin/bash

docker rmi imageid //刪除鏡像

 

 

私有dockerhub

之因此搭建私有dockerhub,主要由於是要作的事情都是具體的針對我的的,若是提交到dockerhub上一來浪費公共資源,二來可能不經意間泄露我的信息,並且鑑於前面提到的備份功能,可能會頻繁的commit,而私有dockerhub有在本地搭建,能夠提升效率。

因爲對docker還處於簡單使用的階段,就直接使用了別人作好的image。

使用sudo docker login,登陸

sudo  docker run -d -p 5000:5000 registry,自動下載並啓動registry 容器,經過5000端口映射到container內的5000端口

此時能夠經過瀏覽器訪問本地的5000端口XXX:5000/v2/

須要參照http://www.javashuo.com/article/p-cxczemjo-md.html修改/etc/docker/daemon.json文件,若是不存在則建立一個:

{ "insecure-registries":["myregistry.example.com:5000"] }

重啓

sudo /etc/init.d/docker restart

而後下載鏡像,好比jmoger/gitblit

git docker pull jmoger/gitblit

給這個image打上tag,獲得一個新的image:

sudo docker tag jmoger/gitblit 192.168.50.186:5000/gitblit    //根據時間狀況設置ip

而後就能夠提交到本身的私有dockerhub上了

sudo docker push 192.168.50.186:5000/gitblit

能夠在docker內進行開發,而後用這種方式同步開發環境。好比作禪道系統的二次開發,在公司內作了一部分,docker提交到本身的dockerhub上,回去後pull下來能夠繼續作,不管code仍是環境都徹底同樣。若是經過git同步code,還須要確保兩邊有一樣的環境,若是經過虛擬機同步,導出導入虛擬機須要很多時間,並且虛擬機須要配置一些東西,安裝必要的軟件以後未必可以經過U盤攜帶,並且讀寫十幾G甚至幾十G的內容也須要很多時間。

 

參考資料:

1.docker技術入門與實戰

2.docker入門白皮書

相關文章
相關標籤/搜索