私有DockerHub搭建


docker簡介

一個開源的應用容器引擎,可以用來打包程序,可以包入依賴環境,這樣只需要提供docker image即可,類似於虛擬機,但是更輕量級。

幾個概念:

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

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

容器:從鏡像創建的運行實例,可以被啟動、開始、停止、刪除。 類似於安裝好的虛擬機系統。

倉庫:存放鏡像的倉所,倉庫注冊服務器上有多個倉庫,每個倉庫有多個鏡像,每個鏡像有多個tab。和git做類比的話,dockerhub類似github,里面有很多項目,項目類似於鏡像,每個項目有多次提交,對應鏡像的多個tag

 

使用目的

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

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/

需要參照https://blog.csdn.net/jiaolongdy/article/details/75389167修改/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入門白皮書

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM