docker倉庫搭建、加密、用戶認證

1 . 含義及理解:

  1. 倉庫分為公開倉庫(Public)和私有倉庫(Private)兩種形式。最大的公開倉庫是 Docker Hub,存放了數量龐大的鏡像供用戶下載。 國內的公開倉庫包括 Docker Pool等,可以提供大陸用戶更穩定快速的訪問。
  2. 當然,用戶也可以在本地網絡內創建一個私有倉庫。當用戶創建了自己的鏡像之后就可以使用 push 命令將它上傳到公有或者私有倉庫,這樣下次在另外一臺機器上使用這個鏡像時候,只需要從倉庫上 pull 下來就可以了。
  3. 私有倉庫的優勢:
    有時候使用Docker Hub這樣的公共倉庫可能不方便,這種情況下用戶可以使用registry創建一個本地倉庫供私人使用,
    使用私有倉庫可以節省網絡帶寬,針對于每個鏡像不用每個人都去中央倉庫上面去下載,只需要從私有倉庫中下載即可。而且提供鏡像資源利用,針對于公司內部使用的鏡像,推送到本地的私有倉庫中,以供公司內部相關人員使用。
    Docker官方提供的工具docker-registry可以用于構建私有的鏡像倉庫。

2 . 搭建私有倉庫:

首先將下載好的鏡像導入到倉庫里

[root@docker ~]# docker images registry
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
registry            2                   f32a97de94e1        4 months ago        25.8MB

運行此容器

[root@docker ~]# docker run -d --name registry -p 5000:5000 -v /opt/registry:/var/lib/registry registry:2
##    創建并運行容器,設置數據卷,并做端口映射

查看容器運行運行情況以及映射端口開啟情況:

[root@docker ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
cee722ac6ccb        registry:2          "/entrypoint.sh /etc…"   2 minutes ago       Up 2 minutes        0.0.0.0:5000->5000/tcp   registry
[root@docker ~]# netstat -antlp
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1091/sshd           
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1564/master         
tcp        0      0 192.168.13.111:22       192.168.13.250:40316    ESTABLISHED 5785/sshd: root@pts 
tcp6       0      0 :::22                   :::*                    LISTEN      1091/sshd           
tcp6       0      0 ::1:25                  :::*                    LISTEN      1564/master         
tcp6       0      0 :::5000                 :::*                    LISTEN      8994/docker-proxy   

上傳鏡像到本地倉庫

在上傳鏡像的時候,一般會默認上傳到docker hub官方倉庫,現在需要上傳到本地自己創建的倉庫,需要指定上傳的地址以及端口。如果使用ip默認使用tls加密,目前沒有設置,所有直接指定到本機的端口。

docker tag nginx:latest localhost:5000/nginx

上傳修改過標簽的鏡像到本地倉庫:

docker push localhost:5000/nginx   # 上傳curl localhost:5000/v2/_catalog   # 核實是否上傳成功

查看其數據卷掛載點

運行容器的時候,設置了數據卷,可以子阿宿主機查看上傳的結果:

cd /opt/registry/
cd docker/
cd registry/
cd v2/
cd repositories/

此時創建的私有倉庫遠程主機無法使用,并且不夠安全,此時則可以采用私有倉庫加證書加密的方式來創建私有倉庫

3 . 私有倉庫的TLS加密

以上倉庫使用明文的方式,并且沒有認證。存在較大的安全隱患,下面介紹使用TLS加密以及用戶認證。
為docker倉庫添加證書加密功能
docker遠程主機訪問私有倉庫,默認必須使用TLS加密

1 . 生成證書

mkdir -p certs
openssl req -newkey rsa:4096 -nodes -sha256 -keyout certs/haha.com.key  -x509 -days 365 -out certs/haha.com.crt

2、重新啟動registry容器:

docker  rm -f registry       先刪除之前開啟的容器

重新加密開啟容器:

 docker run -d \ ##-d:打入后臺 > --restart=always \ > --name registry \ 
>  -v "$(pwd)"/certs:/certs \
>   ##-v:手動指定數據卷的掛載 \
>    -e REGISTRY_HTTP_ADDR=0.0.0.0:443 \ ##-e:編輯registry的參數;監聽443端口 
>     -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/haha.com.crt \ ##使用證書為生成的證書 
>     -e REGISTRY_HTTP_TLS_KEY=/certs/haha,com.key \ ##使用的私鑰 
>      -p 443:443 \ ##端口映射
>       registry:2 ##倉庫名

查看容器運行情況以及端口開啟情況:

docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                            NAMES
d3063593b314        registry:2          "/entrypoint.sh /etc…"   33 seconds ago      Up 31 seconds       0.0.0.0:443->443/tcp, 5000/tcp   registrynetstat -antlp
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      656/sshd            
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      778/master          
tcp        0      0 172.25.13.160:22        172.25.13.250:59964     ESTABLISHED 20132/sshd: root@pt 
tcp6       0      0 :::22                   :::*                    LISTEN      656/sshd            
tcp6       0      0 ::1:25                  :::*                    LISTEN      778/master          
tcp6       0      0 :::443                  :::*                    LISTEN      21555/docker-proxy  

docker客戶端的設置。

 mkdir -p /etc/docker/certs.d/toto.com   # 創建該目錄,名稱和證書域名一致
cd /etc/docker/certs.d/haha.com
cp /root/certs/haha.com.crt ca.crt

證書域名解析的更改

192.168.13.111  docker haha.com

驗證部署是否成功

修改本地鏡像標簽為固定格式:域名/進行名稱

docker tag nginx:v4 haha.com/nginx

上傳鏡像:

docker push haha.com/nginx

4 . Docker倉庫添加用戶認證功能

1 、創建用戶密碼文件:

 mkdir auth
docker run --rm --entrypoint htpasswd registry:2 \
-Bbn haha redhat > auth/htpasswd   #茶ungjian用戶密碼文件:用戶haha密碼redhat

2 由于創建密碼文件已經開啟了一個容器,需要先刪除該容器

docker rmi registry

3 再次運行容器同時添加用戶認證功能。

docker run -d \ ##-d:打入后臺 
> --restart=always \ > --name registry \ 
>  -v "$(pwd)"/certs:/certs \
>   ##-v:手動指定數據卷的掛載 \
>    -e REGISTRY_HTTP_ADDR=0.0.0.0:443 \ ##-e:編輯registry的參數;監聽443端口 
>     -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/toto.com.crt \ ##使用證書為生成的證書 
>     -e REGISTRY_HTTP_TLS_KEY=/certs/toto,com.key \ ##使用的私鑰 
>      -p 443:443 \ ##端口映射
>      -v "$(pwd)"/auth:/auth \  ##掛載認證目錄
>      -e "REGISTRY_AUTH=htpasswd" \  ##認證方式
>      -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \  
>      -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd  \  ##認證文件路徑
>       registry:2 ##倉庫名

4 、查看容器以及端口開啟情況:

docker ps 
CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS                            NAMES
17a21a99d6a6        registry:2          "/entrypoint.sh /etc…"   About a minute ago   Up About a minute   0.0.0.0:443->443/tcp, 5000/tcp   registrynetstat -antlp
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      656/sshd            
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      778/master          
tcp        0      0 172.25.13.160:22        172.25.13.250:59964     ESTABLISHED 20132/sshd: root@pt 
tcp6       0      0 :::22                   :::*                    LISTEN      656/sshd            
tcp6       0      0 ::1:25                  :::*                    LISTEN      778/master          
tcp6       0      0 :::443                  :::*                    LISTEN      22096/docker-proxy 

到次用戶認證功能設置成功
測試:

1 、再沒有認證的情況下無法上傳。

docker tag busybox:latest haha.com/busyboxdocker push haha.com/busybox

2 、進行認證登陸

 docker login haha.com
Username: haha
Password: 
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-storeLogin Succeeded
docker push haha.com/busybox
The push refers to repository [haha.com/busybox]
8a788232037e: Pushed 
latest: digest: sha256:915f390a8912e16d4beb8689720a17348f3f6d1a7b659697df850ab625ea29d5 size: 527

3 登陸成功后會產生認證文件

/root/.docker/config.json   #記錄用戶登陸信息

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/541997.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/541997.shtml
英文地址,請注明出處:http://en.pswp.cn/news/541997.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Centos7+Nginx+Keepalived實現Apache服務的高可用負載均衡

Centos7NginxKeepalived實現Apache服務的高可用&負載均衡今天是2017年的第一天,昨天也就是2016年的最后一天,我嘗試部署了Centos7NginxKeepalived實現WEB服務的高可用負載均衡服務,終于在2017年的第一天前完成了,所以在此分享…

客戶端通過網口啟動可過去的ip_西安交通大學16年3月課程考試《網絡組網技術綜合訓練》作業考核試題...

西安交通大學16年3月課程考試《網絡組網技術綜合訓練》作業考核試題一、單選題(共 20 道試題,共 40 分。)V 1. 下列不屬于服務器內部結構的是()A. CPUB. 電源C. 5類雙絞線D. 北橋芯片滿分:2 分2. 網絡中使用光纜的優點是()A. 便宜B. 容易安裝C. 是一個工…

mcq 隊列_MCQ | 軟件工程基礎知識/簡介(1)

mcq 隊列Q1. Which of the following is a part of the software? Q1。 以下哪個是軟件的一部分? Programs 程式 Documentation 文獻資料 Operating Procedures 運營流程 All of the above 上述所有的 Answer: d. All of the above 答案: d。 上述所有…

docker設置鏡像加速器

設置鏡像加速器 一般情況下,直接從官方倉庫中直接拉取鏡像會比較慢,可以設置鏡像加速器,相當于一個反向代理。以阿里云為例 1 . 首先獲取自己的加速器地址 www.aliyun.com 登陸自己的賬號(可以是支付寶賬號) 首頁點…

keytool條目_java keytool 常用命令

最近在做ssl連接active directory, 遇到了不少的ssl的問題。連接ssl時會需要用將證書保存到keystore, 而這個步驟剛好就用到了keytool命令。直接敲keytool會有提示如何用這個命令, 但對于完全不懂的我,還是找了下基本命令&#xf…

用JavaScript中的示例進行fill()函數

fill() is a predefined function in JavaScript, which is used to fill all elements of an array with a static value. fill()是JavaScript中的預定義函數&#xff0c;用于用靜態值填充數組的所有元素。 Example: 例&#xff1a; <html><head><title>J…

談談重載(overload)覆蓋(override)與隱藏

這三個概念都是與OO中的多態有關系的。如果單是區別重載與覆蓋這兩個概念是比較容易的&#xff0c;但是隱藏這一概念卻使問題變得有點復雜了&#xff0c;下面說說它們的區別吧。重載是指不同的函數使用相同的函數名&#xff0c;但是函數的參數個數或類型不同。調用的時候根據函…

搭建Harbor私有倉庫

1 首先裝好docker&#xff1a; 由于之前已安裝過&#xff0c;所以直接開起就行 2 . 安裝python2.7以上版本 之前編譯安裝過7.3的&#xff0c;直接用吧 3 . 安裝docker-compose docker容器管理工具&#xff0c;是habor的依賴之一。 curl -L "https://github.com/docker…

mysql日志查詢指令_MySQL查詢日志總結

MySQL查詢日志介紹MySQL的查詢日志記錄了所有MySQL數據庫請求的信息。無論這些請求是否得到了正確的執行。默認文件名為hostname.log。默認情況下MySQL查詢日志是關閉的。生產環境&#xff0c;如果開啟MySQL查詢日志&#xff0c;對性能還是有蠻大的影響的。另外很多時候&#x…

thinkphp5.0助手函數占用服務器資源

db(user) 默認情況下&#xff0c;每次請求都會重新連接數據庫&#xff0c;這樣會占用服務器資源 方法1.如果不想每次都重連可以這樣 db("List",[],false) 方法2.還可以直接改function&#xff0c;及則需要把 function db($name , $config [], $force true){retu…

python 無符號整數_Python中的有符號和無符號整數數組

python 無符號整數An array can be declared by using "array" module in Python. 可以通過在Python中使用“數組”模塊來聲明數組 。 Syntax to import "array" module: 導入“數組”模塊的語法&#xff1a; import array as array_alias_nameHere, imp…

mysql快速批量入庫_MySQL-批量入庫優化

MySQL批量入庫的方式循環一條一條入庫批量入庫通過程序組合 insert into (字段) tbl vlaues(), vlaues(), vlaues(),...事務入庫$autoCommit (isset($this->startTransaction) ? !$this->startTransaction : true);$ids array();if ($autoCommit) {$this->startTra…

docker集群搭建(k8s)

1 . 理解&#xff1a; Kubernetes是一個開源的&#xff0c;用于管理云平臺中多個主機上的容器化的應用&#xff0c;Kubernetes的目標是讓部署容器化的應用簡單并且高效&#xff08;powerful&#xff09;,Kubernetes提供了應用部署&#xff0c;規劃&#xff0c;更新&#xff0c…

Python模擬刪除字符串兩邊的空白

目標&#xff1a;   1.使用string模塊的whitespace   2.刪除左邊、右邊以及兩邊的空白 代碼如下&#xff1a; [rootlocalhost python]# cat rmspace.py #!/usr/bin/env python #coding:utf8 """ 使用字符串刪除左右兩端的空白。 """from str…

xml分析錯誤:注釋未終止_錯誤:C中的未終止注釋(無效的注釋塊) 常見的C程序錯誤...

xml分析錯誤:注釋未終止Comments are used to write logic explain or anything that you do not want to compile. In C language there are two types of comments 1) Single line comment and 2) Multi-line comment. 注釋用于編寫邏輯解釋或您不想編譯的任何內容。 在C語言…

查看 mysql 狀態_查看mysql狀態的常用命令

在mysql客戶端輸入"show status"之后將會看到如下輸出&#xff1a;如果想要查看某個具體的值&#xff0c;可以使用如下命令&#xff1a;show status LIKE "%具體變量%";Aborted_clients 由于客戶沒有正確關閉連接已經死掉&#xff0c;已經放棄的連接數量.A…

常用數學符號的讀法及其含義

2019獨角獸企業重金招聘Python工程師標準>>> 常用數學符號的讀法及其含義 近來發現很多學生對一些數學符號的讀法及其含義不是很清楚。今天特把一些常用的列表如下。希望能夠提供一些幫助&#xff01; 大寫 小寫 英文注音 國際音標注音 中文注音 Α…

math.atan_JavaScript中帶有示例的Math.atan()方法

math.atanJavaScript | Math.atan()方法 (JavaScript | Math.atan() Method) Math.atan() is a function in math library of JavaScript that is used to find the value of arctangent of a number. Math.atan()是JavaScript數學庫中的函數&#xff0c;用于查找數字的反正切值…

mysql 計算工作日_mysql計算工作日_MySQL

bitsCN.commysql計算工作日Sql代碼 DELIMITER $$ drop procedure if exists pGetWorkDays$$ create procedure pGetWorkDays(s datetime,e datetime) begin select floor(days/7)*5days%7 -case when 6 between wd and wddays%7-1 then 1 else 0 end -case when 7 between wd a…

后端碼農談前端(HTML篇)第三課:常見屬性

一、HTML全局屬性 1、核心屬性 屬性描述id設置元素的唯一 id。class設置元素的一個或多個類名&#xff08;引用樣式表中的類&#xff09;。style設置元素的行內樣式&#xff08;CSS內聯樣式&#xff09;。title設置有關元素的額外信息&#xff08;可在工具提示中顯示&#xff0…