dockerregistry私有倉庫的使用方法介紹

NO IMAGE

docker使用場景和優缺點

這不是本文的重點O(∩_∩)O哈哈~。如果各位看官想了解這些的話可以看看
這兒。

為什麼要自己搭鏡像倉庫

阿里雲當然已經有了registry倉庫服務,還挺方便的。但是有的就會覺得這種私有鏡像還是自己保管比較好啊,我們這兒說的是自己搭建倉庫用來管理私有鏡像。測試完全後提交到私有的registry,線上再從registry拉取部署,和阿里雲的registry倉庫服務一樣的使用方式。

環境:

ubuntu 16.04

Docker registry2.x的加密部署方法

安裝docker環境這裡不做介紹了,網上很多文章都有介紹。

下拉registry鏡像,命令:

docker pull registry2.2

生成自簽名證書:

cd ~/;

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是我給這個倉庫定的域名,可以寫別的。

生成用戶和密碼:

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。

相關文章

Hadoop學習筆記之HDFS

MySQL5.7中自增id的小bug

html元素的分類和嵌套規則

我們也許並不瞭解Promise