1 從docker拉取Nexus3鏡像,這里使用的是3.30.0版本
docker pull sonatype/nexus3:3.30.0
docker images
2 創(chuàng)建nexus數(shù)據(jù)掛載目錄
mkdir /opt/nexus-data
這里會宿主機目錄權(quán)限問題,簡單粗暴解決就是直接給我掛載的目錄777權(quán)限,哈哈扯罐。要么就是在啟動容器的時候給容器root權(quán)限授艰。
3 運行nexus容器
docker run -d --name nexus3 --restart=always -p 8081:8081 -p 8082:8082 -v /opt/nexus-data:/nexus-data sonatype/nexus3:3.30.0
出現(xiàn)了網(wǎng)絡(luò)警告电媳,網(wǎng)絡(luò)將不可用骨坑,同時無法進(jìn)入容器,因為容器沒啟動成功绑谣。原因是是沒有開啟網(wǎng)絡(luò)轉(zhuǎn)發(fā),這里需要設(shè)置一下拗引,如果沒有這個問題借宵,這里可以跳過
vim /etc/sysctl.conf
#配置轉(zhuǎn)發(fā)
net.ipv4.ip_forward=1
#重啟服務(wù),讓配置生效
service network restart
#查看是否成功,如果返回為“net.ipv4.ip_forward = 1”則表示成功
net.bridge.bridge-nf-call-ip6tables=1
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-arptables=1
net.ipv4.ip_forward=1
接著重啟docker 重啟nexus就可以了寺擂。
#重啟docker服務(wù)
service docker restart
#重啟容器暇务,正常啟動
docker restart nexus3
#進(jìn)入容器
docker exec -it nexus3 /bin/bash
#ping一下,發(fā)現(xiàn)網(wǎng)絡(luò)也正常了
ping www.baidu.com
等待了一段時間發(fā)現(xiàn)訪問nexus還是沒有起起來,通過docker logs -f nexus3
看了一下日志怔软,發(fā)現(xiàn)報錯了垦细,原因就是上面掛載了目錄,目錄的權(quán)限用戶是root挡逼,nexus在容器內(nèi)部中啟動的時候是以nexus用戶啟動的括改,uid 是200,操作系統(tǒng)root用戶的uid是1000,所以必然沒有寫入權(quán)限家坎,啟動報錯嘱能×呙罚可以通過啟動時添加--privileged=true
賦予root權(quán)限解決這個問題,但是給一個容器賦予一個root權(quán)限是有點不安全惹骂。網(wǎng)上有些博客通過chown 200 -R /opt/nexus-data
我沒試成功苏携,只能先這么搞了。
# 完整的命令
docker run -d --name nexus3 --restart=always --privileged=true -p 8081:8081 -p 8082:8082 -v /opt/nexus-data:/nexus-data sonatype/nexus3:3.30.0
PS:這里給了兩個端口对粪,8081和8082右冻,8081是nexus的默認(rèn)端口,8082預(yù)留給docker私有倉庫使用著拭。
4 創(chuàng)建私有docker倉庫
4.1 訪問界面并登錄
賬號是admin纱扭,密碼記錄在掛載目錄下的/admin.password文件里面,在登陸一波儡遮。
4.2 創(chuàng)建倉庫
點擊齒輪
-> Repositories
-> Create repository
選擇docker(hosted)
配置一下http端口和倉庫名稱乳蛾,其他默認(rèn)。拉到最后面
Create repository
4.3 安全設(shè)置
Security
-> Realms
-> Docker bearer Token Realm
-> Save
4.4 測試
因為我們的倉庫開放的是http的端口鄙币,而docker要求使用的是https肃叶,所以這里還要添加一下信任倉庫。
# 編輯docker服務(wù)端設(shè)置
vim /etc/docker/daemon.json
# 將下面內(nèi)容加到配置文件中(文件是json爱榔,注意逗號等格式問題)
"insecure-registries":["http://yourip:8082"]
# 重啟docker
service docker restart
# 查看設(shè)置是否生效被环,查看Insecure Registries:后面是否有你的nexus倉庫地址
docker info
再次登錄成功了。
4.5 制作鏡像并向私有倉庫推送鏡像
# 拉取hello-world鏡像作為示例
docker pull hello-world
# 制作私有鏡像
docker tag hello-world yourip:8082/hello-world
/# 推送到私有服務(wù)器
docker push yourip:8082/hello-world
推送成功后到nexus頁面查詢我們是否推送成功详幽。
可以看到已經(jīng)看到了我們用于測試的nginx鏡像了筛欢。
額外用一張圖補充docker tag
命令的用法