在docker容器模式下搭建nexus3搭建docker私有倉庫庫

一库继、環(huán)境準備

#1.nexus3容器版
sonatype/nexus3
#2.nginx容器版
nginx
#從官方下載以上工具并安裝docker-compose部署
#3.docker20.10.7版本

二、客戶端使用操作

#1.客戶端主機操作
echo "192.168.0.210 mydocker.io" |tee -a /etc/hosts
mkdir -p /etc/docker/certs.d/mydocker.io
#在(192.168.0.210)拷貝root.crt至客戶端
scp -r /home/nexus3-nginx/conf.d/ssl/mydocker.io.crt 客戶端IP:/etc/docker/certs.d/mydocker.io/
#2.客戶端使用
#用戶是在nexus3中創(chuàng)建
#登錄
docker login -u autumner -p 1234qwer mydocker.io
#打標簽
docker tag image:label mydocker.io/image:label
#推送
docker push mydocker.io/image:label
#拉取
docker pull mydocker.io/image:label
#注:
#因客戶端不具備上網(wǎng)功能所以不能直接進行docker search image搜索窜醉,只能通過代理遠程拉取,具體操作
docker pull mydocker.io/image:label

三制跟、docker私庫配置操作

3.1.nexus3準備工作

#1.docker-compose啟動nexus3
vim docker-compose.yml
version: '3.1'

services: 
  nexus: 
    restart: always
    image: sonatype/nexus3
    container_name: nexus3
    ports: 
      - 80:8081

    volumes: 
      - nexus-data:/nexus-data


 
volumes: 
  nexus-data: 
#2.啟動nexus3
docker-compose -f docker-compose.yml up -d
#停止
docker-compose -f docker-compose.yml down
#3.瀏覽器訪問nexus3
http://192.168.0.210
#修改admin用戶密碼
#進入nexus3容器查看默認密碼
docker exec -it nexus3 sh
sh-4.4$ cat /opt/sonatype/sonatype-work/admin.password
#然后在瀏覽器進行admin用戶密碼修改

3.2.blob存儲創(chuàng)建

#瀏覽器
http://192.168.0.210 用戶名:admin 密碼:1234qwer點擊配置
Repository-Blob Stores-Create blob store-Name("docker-blob")-Create blob store
#定義一個Name,其它內(nèi)容會自動補全

3.3.創(chuàng)建hosted類型Docker倉庫

Repository-Repositories-Create repository-docker(hosted)
Name: 定義一個名稱docker-local
Online: 勾選酱虎。這個開關(guān)可以設(shè)置這個Docker repo是在線還是離線雨膨。
Repository Connectors(HTTP 8083):連接器允許docker客戶端直接連接到docker倉庫,并實現(xiàn)一些請求操作读串,如docker pull, docker push, API查詢等聊记。但這個連接器并不是一定需要配置的撒妈,尤其是我們后面會用group類型的docker倉庫來聚合它。
                      把HTTP這里勾選上排监,然后設(shè)置端口為8083
Allow anonymous docker pull:不勾選狰右。這樣的話就不允許匿名訪問了,執(zhí)行docker pull或 docker push之前舆床,都要先登錄:docker login
Docker Registry API Support:Docker registry默認使用的是API v2, 但是為了兼容性棋蚌,我們可以勾選啟用API v1。
Storage-Blob store:下拉選擇前面創(chuàng)建好的專用blob:docker-blob
Hosted-Delpoyment policy:開發(fā)環(huán)境允許運行重復(fù)發(fā)布,因此選擇Allow redeploy挨队。
最后保存

3.4.創(chuàng)建proxy類型Docker倉庫

Repository-Repositories-Create repository-docker(proxy)
#proxy類型倉庫谷暮,可以幫助我們訪問不能直接到達的網(wǎng)絡(luò),如官方的dockerhub鏡像庫。
Name: docker-proxy
Repository Connectors: 不設(shè)置盛垦。
Docker Registry API Support-Enable Docker V1 API:勾選

Proxy-
    Remote Storage: docker hub的proxy湿弦,這里填寫: https://registry-1.docker.io 這個是官方默認的一個鏈接
    Docker Index: Use Docker Hub
    Storage:idocker-hub
Auto blocking enabled:勾選
Storage-Blob store:下拉選擇前面創(chuàng)建好的專用blob:docker-blob
Negative Cache-Not found cache enabled:勾選
最后保存

3.5.創(chuàng)建group類型Docker倉庫

Repository-Repositories-Create repository-docker(group)
#group類型的docker倉庫,是一個聚合類型的倉庫腾夯。將前面創(chuàng)建的2個倉庫聚合成一個URL對外提供服務(wù)颊埃,可以屏蔽后端的差異性,實現(xiàn)類似透明代理的功能蝶俱。
name:docker-group
Repository Connectors(8082):啟用了一個監(jiān)聽在8082端口的http連接器班利;
                把HTTP這里勾選上,然后設(shè)置端口為8082
Docker Registry API Support-Enable Docker V1 API:勾選
Storage-Blob store:下拉選擇前面創(chuàng)建好的專用blob:docker-blob
group : 將左邊可選的2個倉庫榨呆,添加到右邊的members下罗标。
最后保存

3.6.創(chuàng)建docker私庫用戶

#1.設(shè)置nexus3的web端管理權(quán)限
Security-Realms-右側(cè)
把Docker Bearer Token Realm 增加到Active中然后點擊Save保存
#2.創(chuàng)建規(guī)則
Security-Roles-右側(cè)Create role
Role ID: nx-docker-role #必填,nx-docker-role自定義的
Role name: nx-docker-hub-role #必填,nx-docker-hub-role自定義的
Privileges:
    把Filter中的
    nx-repository-admin-docker-docker-group-*
    nx-repository-admin-docker-docker-local-*
    nx-repository-admin-docker-docker-proxy-*
    nx-repository-view-docker-*-*
    增加到Given中然后點擊Save保存
#3.創(chuàng)建docker用戶
Security-Users-右側(cè)Create local user
ID: 必填
First name: 必填
last name: 必填
email: 必填
Password: 必填
confirm password: 必填
Status:Active
Roles:
    nx-anonymous
    nx-docker-hub-role增加到Granted中
然后點擊Create local user保存完成
    **最后docker的3個私有倉庫建立完成,但在推送和拉取時需要各自地址操作愕提,使用起來非常不方便馒稍,解決辦法我們可以通過nginx代理來實現(xiàn)**

四、nginx代理訪問Docker私有倉庫

4.1.nginx安裝

#本例通過容器模式部署nginx浅侨,直接通過dockerhub拉取鏡像

4.2.證書生成

#通過工具一鍵生成證書
#創(chuàng)建配置文件和日志目錄
mkdir -p /home/nexus3-nginx/conf.d/ssl
mkdir -p /home/nexus3-nginx/logs
cd /home/nexus3-nginx/conf.d/ssl
#一鍵生成證書 
./gencer.sh
    [root@nexus-nfs ssl]# ./gencer.sh 
    Enter your domain [www.example.com]:mydocker.io
    Enter your serverName [nginx]:mydocker.io
    Create server key...
    Generating RSA private key, 1024 bit long modulus
    ............++++++

附件:gencer.sh源碼

#!/bin/sh

# create self-signed server certificate:

read -p "Enter your domain [www.example.com]:" DOMAIN
read -p "Enter your serverName [nginx]:" SERVERNAME

echo "Create server key..."

openssl genrsa -des3 -out $SERVERNAME.key 2048

echo "Create server certificate signing request..."

SUBJECT="/C=CN/ST=TJ/L=TJ/O=AUTUMNER/OU=ECW/CN=$DOMAIN"

openssl req -new -subj $SUBJECT -key $SERVERNAME.key -out $SERVERNAME.csr

echo "Remove password..."

mv $SERVERNAME.key $SERVERNAME.origin.key
openssl rsa -in $SERVERNAME.origin.key -out $SERVERNAME.key

echo "Sign SSL certificate..."

openssl x509 -req -days 3650 -in $SERVERNAME.csr -signkey $SERVERNAME.key -out $SERVERNAME.crt

openssl x509 -in $SERVERNAME.crt -out $SERVERNAME.cer -outform der

openssl x509 -inform der -in $SERVERNAME.cer -out $SERVERNAME.pem

4.3.nginx配置

#在主機/home/nexus3-nginx/conf.d目錄創(chuàng)建dockerhub.conf
cd /home/nexus3-nginx/conf.d
vim dockerhub.conf #粘貼以下內(nèi)容
#ip地址換成本服務(wù)器主機ip

upstream nexus_docker_get {
    server 192.168.0.210:8082;
}
 
upstream nexus_docker_put {
    server 192.168.0.210:8083;
}
server {
    listen 80;
    listen 443 ssl;
    server_name mydocker.io;
    access_log /var/log/nginx/mydocker.io.log;
    # 證書
    ssl_certificate /etc/nginx/conf.d/ssl/mydocker.io.crt; # 證書路徑根據(jù)上面生成的來定
    ssl_certificate_key /etc/nginx/conf.d/ssl/mydocker.io.key;
    ssl_protocols TLSv1.1 TLSv1.2;
    ssl_ciphers '!aNULL:kECDH+AESGCM:ECDH+AESGCM:RSA+AESGCM:kECDH+AES:ECDH+AES:RSA+AES:';
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:10m;
    # disable any limits to avoid HTTP 413 for large image uploads
    client_max_body_size 0;
    # required to avoid HTTP 411: see Issue #1486 (https://github.com/docker/docker/issues/1486)
    chunked_transfer_encoding on;
    # 設(shè)置默認使用推送代理
    set $upstream "nexus_docker_put";
    # 當請求是GET纽谒,也就是拉取鏡像的時候,這里改為拉取代理如输,如此便解決了拉取和推送的端口統(tǒng)一
    if ( $request_method ~* 'GET') {
        set $upstream "nexus_docker_get";
    }
    # 只有本地倉庫才支持搜索鼓黔,所以將搜索請求轉(zhuǎn)發(fā)到本地倉庫,否則出現(xiàn)500報錯
    if ($request_uri ~ '/search') {
        set $upstream "nexus_docker_put"; 
    }
    index index.html index.htm index.php;
    location / {
        proxy_pass http://$upstream;
        proxy_set_header Host $host;
        proxy_connect_timeout 3600;
        proxy_send_timeout 3600;
        proxy_read_timeout 3600;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_buffering off;
        proxy_request_buffering off;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto http;
    }
}

4.4.nginx啟動

#編輯nexus3和nginx的docker-compose文件
#停止nexus3的容器
docker-compose -f docker-compose.yml down
#編輯docker-compose.yml文件
version: '3.1'

services: 
  nexus: 
    restart: always
    image: sonatype/nexus3
    container_name: nexus3
    ports: 
      - 80:8081
      - 8082:8082     #開啟docker的group類型端口
      - 8083:8083     #開啟docker的hosted類型端口
    volumes: 
      - nexus-data:/nexus-data

  dockerhub:              #增加nginx容器
    restart: always
    image: nginx
    container_name: dockernginx
    depends_on: 
      - nexus
    ports: 
      - 443:443          #開啟https端口
    volumes: 
      - /home/nexus3-nginx/logs:/var/log/nginx:rw        #掛載日志目錄
      - /home/nexus3-nginx/conf.d:/etc/nginx/conf.d:ro   #掛載nginx配置文件和證書
 
volumes: 
  nexus-data: 
 #啟動docker-compose   
docker-compose -f docker-compose.yml up -d

五不见、客戶端機驗證參考第二章節(jié)客戶操作

#1.拉取鏡像報如下錯誤
Error response from daemon: Head https://mydocker.io/v2/busybox/manifests/latest: no basic auth credentials
#解決方法
#登錄
docker login -u autumner -p 1234abcD mydocker.io
#2.直接搜索鏡像報錯
 docker search redis
Error response from daemon: Get https://index.docker.io/v1/search?q=redis&n=25: dial tcp: lookup index.docker.io on 219.150.32.132:53: read udp 192.168.0.217:56157->219.150.32.132:53: i/o timeout
#解決方法
docker search mydocker.io/redis #帶上mydocker.io標簽實現(xiàn)代理下載redis
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末澳化,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子稳吮,更是在濱河造成了極大的恐慌缎谷,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,496評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件灶似,死亡現(xiàn)場離奇詭異列林,居然都是意外死亡瑞你,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評論 3 392
  • 文/潘曉璐 我一進店門希痴,熙熙樓的掌柜王于貴愁眉苦臉地迎上來者甲,“玉大人,你說我怎么就攤上這事砌创÷哺祝” “怎么了?”我有些...
    開封第一講書人閱讀 162,632評論 0 353
  • 文/不壞的土叔 我叫張陵嫩实,是天一觀的道長刽辙。 經(jīng)常有香客問我,道長舶赔,這世上最難降的妖魔是什么扫倡? 我笑而不...
    開封第一講書人閱讀 58,180評論 1 292
  • 正文 為了忘掉前任谦秧,我火速辦了婚禮竟纳,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘疚鲤。我一直安慰自己锥累,他們只是感情好,可當我...
    茶點故事閱讀 67,198評論 6 388
  • 文/花漫 我一把揭開白布集歇。 她就那樣靜靜地躺著桶略,像睡著了一般。 火紅的嫁衣襯著肌膚如雪诲宇。 梳的紋絲不亂的頭發(fā)上际歼,一...
    開封第一講書人閱讀 51,165評論 1 299
  • 那天,我揣著相機與錄音姑蓝,去河邊找鬼鹅心。 笑死,一個胖子當著我的面吹牛纺荧,可吹牛的內(nèi)容都是我干的旭愧。 我是一名探鬼主播抵赢,決...
    沈念sama閱讀 40,052評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼枝秤,長吁一口氣:“原來是場噩夢啊……” “哼外遇!你這毒婦竟也來了数初?” 一聲冷哼從身側(cè)響起伊履,我...
    開封第一講書人閱讀 38,910評論 0 274
  • 序言:老撾萬榮一對情侶失蹤琅锻,失蹤者是張志新(化名)和其女友劉穎着茸,沒想到半個月后恨锚,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體型奥,經(jīng)...
    沈念sama閱讀 45,324評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡瞳收,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年池充,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片缎讼。...
    茶點故事閱讀 39,711評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡收夸,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出血崭,到底是詐尸還是另有隱情卧惜,我是刑警寧澤,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布夹纫,位于F島的核電站咽瓷,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏舰讹。R本人自食惡果不足惜茅姜,卻給世界環(huán)境...
    茶點故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望月匣。 院中可真熱鬧钻洒,春花似錦、人聲如沸锄开。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽萍悴。三九已至头遭,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間癣诱,已是汗流浹背计维。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留撕予,地道東北人鲫惶。 一個月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像嗅蔬,于是被迫代替她去往敵國和親剑按。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,611評論 2 353

推薦閱讀更多精彩內(nèi)容