docker registry私有倉庫的使用方法介紹

docker使用場景和優缺點

這不是本文的重點O(∩_∩)O哈哈~。若是各位看官想了解這些的話能夠看看 這兒。node

爲何要本身搭鏡像倉庫

阿里雲固然已經有了registry倉庫服務,還挺方便的。可是有的就會以爲這種私有鏡像仍是本身保管比較好啊,咱們這兒說的是本身搭建倉庫用來管理私有鏡像。測試徹底後提交到私有的registry,線上再從registry拉取部署,和阿里雲的registry倉庫服務同樣的使用方式。docker

環境:

ubuntu 16.04ubuntu

Docker registry2.x的加密部署方法

安裝docker環境這裏不作介紹了,網上不少文章都有介紹。bash

下拉registry鏡像,命令:

docker pull registry2.2測試

生成自簽名證書:

cd ~/;ui

mkdir registry && cd registry && mkdir certs && cd certs;阿里雲

openssl req -x509 -days 3650 -subj '/CN=reg.lajiaochaorou.com/' -nodes -newkey rsa:2048 -keyout registry.key -out registry.crt;加密

其中reg.lajiaochaorou.com是我給這個倉庫定的域名,能夠寫別的。spa

生成用戶和密碼:

cd ~/registry&& mkdir auth;翻譯

docker run --entrypoint htpasswd registry:2.2 -Bbn lajiaochaorou 123456 > auth/htpasswd;

這裏生成的用戶名密碼就是lajiaochaorou:123456, 能夠寫別的。

建立掛載目錄:

mkdir –p ~/data/registry2

啓動registry server:

docker run -d –p 5000:5000 --restart=always --name registry \
-v `pwd`/auth:/auth \
-e "REGISTRY_AUTH=htpasswd" \
-e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
-e "REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd" \
-v `pwd`/certs:/certs \
-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/registry.crt \
-e REGISTRY_HTTP_TLS_KEY=/certs/registry.key \
-v ~/data/registry2:/var/lib/registry    registry:2.2
複製代碼

把上面的命令放到腳本start_reg.sh(愛取什麼名隨你),放到~/registry下。 --restart=always表示自啓動。

配置client(也就是咱們宿主機):

建立證書目錄:

mkdir -p /etc/docker/certs.d/reg.lajiaochaorou.com:5000

下載證書:

cp ~/registry/certs/registry.crt /etc/docker/certs.d/reg.lajiaochaorou.com:5000

域名解析:

echo 192.168.215.*** reg.lajiaochaorou.com >> /etc/hosts (這裏的ip寫宿主機ip)

登錄registry:

docker login reg.lajiaochaorou.com:5000

按照要求輸入用戶名,密碼(我這裏爲lajiaochaorou:123456)

登陸成功就能夠存放和拉取私有鏡像了!registry搭好了。

Docker pull/push鏡像

咱們在push鏡像到私有倉庫以前,要把鏡像的名稱改爲reg.lajiaochaorou.com:5000/imagename的形式,不然系統認爲你要push到公共倉庫,會提示沒有權限。命令:

docker tag ubuntu reg.lajiaochaorou.com:5000/ubuntu

docker push reg.lajiaochaorou.com:5000/ubuntu

上面是以修改ubuntu鏡像爲例,實際中咱們通常是操做本身的項目鏡像。

執行成功後鏡像被提交到倉庫了。

咱們刪除這個reg.lajiaochaorou.com:5000/ubuntu鏡像試試:

docker rmi reg.lajiaochaorou.com:5000/ubuntu

刪除成功,咱們再把這個鏡像pull下來試試:

docker pull reg.lajiaochaorou.com:5000/ubuntu

下拉成功,咱們運行這個鏡像吧:

docker run –it reg.lajiaochaorou.com:5000/ubuntu

應該有一個僞終端彈出來,這時的文件系統已是這個容器(ubuntu)的文件系統了,所以能夠很方便地對這個容器裏面的文件進行操做。好比:

touch test.c
echo 'hello world' > hello.txt
複製代碼

這時咱們在容器外面執行:

docker diff 容器id|容器名;

能夠看到有添加了兩個文件。

不如趁機提交成一個新的鏡像:

docker commit 容器id|容器名 reg.lajiaochaorou.com:5000/ubuntu2.0(新的鏡像名 )

這時,咱們看一下如今有哪些鏡像:

docker images

能夠看到,一個新的鏡像reg.lajiaochaorou.com:5000/ubuntu2.0產生了!

咱們運行這個新的鏡像:

docker run –it reg.lajiaochaorou.com:5000/ubuntu2.0

僞終端出來以後,咱們ls一下,能夠看到剛纔touch和echo的兩個文件確實在這個文件系統了。

以上就是所有的registry使用方法了, 缺點是,沒有圖片的展現。當時沒有及時截圖,就這樣吧。

補充一下docker經常使用命令吧

docker run: 運行一個容器
-it   一般it兩個參數一塊兒用的,表示以交互模式執行,並分配一個僞終端
-v   掛載目錄,本地目錄:容器目錄
--name 給容器一個名字,不指定就隨機產生
-e    設置環境變量
--rm   容器退出以後就刪除

docker rm: 刪除一個容器
docker rm 容器名|容器id

docker rmi:刪除一個鏡像
	docker rmi 鏡像名
docker ps: 查看正在運行的容器
	docker ps –a :產看全部容器
docker kill :殺死一個運行中的容器,也能夠用-s參數向容器發送信號
docker stop:結束一個運行中的容器
docker exec : 在運行中的容器執行命令,一般能夠-t分配僞終端達到進入容器的目的
docker commit: 提交一個容器成新的鏡像,能夠-m 給出說明,-a給出做者
docker start: 啓動一個容器
docker inspect: 查看鏡像|容器的元數據
docker build: 編譯一個新的鏡像,與commit功能相似
複製代碼

補充一下Dockerfile的使用

Dockfile是一種被Docker程序解釋的腳本,Dockerfile由一條一條的指令組成,每條指令對應Linux下面的一條命令。Docker程序將這些Dockerfile指令翻譯真正的Linux命令。這是打包鏡像的主要方式。 命令解釋:

FROM    //基於哪一個鏡像
MAINTAINER   //建立人
CMD       //容器啓動時執行的命令,Dockerfile只能有一條CMD
USER        //用哪一個用戶跑container
ENV          //設置環境變量
ADD            //將文件<src>拷貝到container的文件系統對應的路徑<dest>
COPY       //與ADD相似,COPY只能是本地數據
VOLUME        //將本地文件夾掛載到container容器中
WORKDIR       //切換目錄
複製代碼

例子:

FROM busybox
ENV foo /bar
WORKDIR ${foo}   # WORKDIR /bar
ADD . $foo       # ADD . /bar
COPY \$foo /quux # COPY $foo /quux
複製代碼

使用命令:

docker build –t ubuntu5.0 .

生成一個新的鏡像,名爲ubuntu5.0,不用-f指定Dockerfile的路徑那麼就是使用的當前目錄的Dockerfile。

相關文章
相關標籤/搜索