參考:http://www.cnblogs.com/xcloudbiz/articles/5497037.htmlhtml
參考:http://www.07net01.com/2016/08/1636248.htmlmysql
參考:http://blog.csdn.net/sunshingheavy/article/details/54143764git
參考:http://hanqunfeng.iteye.com/blog/2331644github
想嘗試一下基本的sql
mkdir /registry-vardocker
mkdir /registry-var/my_registryjson
docker run --restart=always --name registry -d -p 5000:5000 -v /registry-var/my_registry:/var/lib/registry registrycentos
push到該容器的鏡像會保存在宿主機的/registry-var/my_registry下 若是使用好比nfs 分佈式的存儲等大概 就能雙活了api
registry版本默認就是v2的了 而且我試驗下來 鏡像保存目錄不是不少文章裏的tmp 而是/var/lib服務器
Create or modify /etc/docker/daemon.json
{ "insecure-registries":["192.168.2.200:5000"] }
Error response from daemon: Get https://registry.x.com:5000/v2/: http: server gave HTTP response to HTTPS client 這個錯
systemctl restart docker.service
完美解決。
上傳到私有倉庫示例:
首先存在 好比centos 鏡像
而後從新tag標記
docker tag centos 192.168.2.200:5000/centos
而後就能夠推送到私庫了
docker push 192.168.2.200:5000/centos
下載示例:
docker pull 192.168.2.200:5000/centos
補充參考:http://blog.csdn.net/kunloz520/article/details/52640581
補充方案:
下面是老的docker 大概1.10之前的作法 在1.12沒用了
vi /usr/lib/systemd/system/docker.service
改這句 加後綴參數
ExecStart=/usr/bin/dockerd --insecure-registry=192.168.2.200:5000
[root@localhost ~]# systemctl daemon-reload
[root@localhost ~]# systemctl restart docker.service
查詢有哪些鏡像:(registry.x.com:5000是我假定的鏡像地址和端口,-u是用戶名密碼)
curl -u xxx:123abc -X GET http://registry.x.com:5000/v2/_catalog
返回:{"repositories":["centos"]}
centos是我測試上傳的一個centos最新版的鏡像
查看一個鏡像有哪些tag 也就是版本吧
curl -u xxx:123abc -X GET http://registry.x.com:5000/v2/centos/tags/list
返回
{"name":"centos","tags":["latest"]}
目前我只有惟一的tag latest
加能夠遠程刪除鏡像 要改配置文件
位置:/etc/docker/registry/config.yml
version: 0.1
log:
fields:
service: registry
storage:
delete:
enable:true
cache:
blobdescriptor: inmemory
filesystem:
rootdirectory: /var/lib/registry
http:
addr: :5000
headers:
X-Content-Type-Options: [nosniff]
health:
storagedriver:
enabled: true
interval: 10s
threshold: 3
構建倉庫用的密碼文件:username 123abc是用戶名密碼
docker run --entrypoint htpasswd registry -Bbn username 123abc >> /registry-var/auth/htpasswd)
下面是完整的加上自定義配置文件、存儲目錄的命令了:
docker run -d -p 5000:5000 --restart=always -v /registry-var/auth/:/auth/ -e "REGISTRY_AUTH=htpasswd" -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd -v /registry-var/my_registry:/var/lib/registry/ -v /registry-var/config.yml:/etc/docker/registry/config.yml --name registry registry
docker run -d -p 5000:5000 --restart=always -v /registry-var/auth/:/auth/ -e "REGISTRY_AUTH=htpasswd" -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" -e "REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd" -e "REGISTRY_STORAGE_DELETE_ENABLED=true" -v /registry-var/my_registry:/var/lib/registry/ --name registry registry
登錄測試:
docker login -u 用戶名-p 密碼 registry.x.com:5000
出來Login Succeeded
就是成功了 能夠隨意push和pull了 固然 要加上registry.x.com:5000
好比 docker pull registry.x.com:5000/centos
刪除鏡像
首先獲取鏡像名和tag
獲取到鏡像名列表
curl -u xxx:123abc -X GET http://registry.x.com:5000/v2/_catalog
{"name":"centos","tags":["latest"]}
name就是景象名 tag 就是tag了 鏈接起來 用: 纔是具體的某個鏡像
根據鏡像名獲取tag列表 這裏是鏡像名centos 爲例
curl -u xxx:123abc -X GET http://registry.x.com:5000/v2/centos/tags/list
而後獲取digest_hash參數
curl -u xxx:123abc --header "Accept: application/vnd.docker.distribution.manifest.v2+json" -X GET http://registry.x .com:5000/v2/centos/manifests/latest
拿到:
{
"schemaVersion": 2,
"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
"config": {
"mediaType": "application/vnd.docker.container.image.v1+json",
"size": 1833,
"digest": "sha256:3bee3060bfc81c061ce7069df35ce090593bda584d4ef464bc0f38086c11371d"
},
"layers": [
{
"mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
"size": 72267384,
"digest": "sha256:d3aeceeb0289bf97c2474366cfcdaf66e29b409d45d6ed91be3335f16915f1b0"
}
]
根據某個sha刪除
(失敗 表現爲第二次運行能夠發現不一樣的回覆信息 表示找不到
{"errors":[{"code":"MANIFEST_UNKNOWN","message":"manifest unknown"}]}
可是實際並沒有效果的樣子
)
curl -u xxx:123abc -X DELETE http://registry.x.com:5000/v2/centos/manifests/sha256:3bee3060bfc81c061ce7069df35ce090593bda584d4ef464bc0f38086c11371d
啓動倉庫容器的時候 加 -e "REGISTRY_STORAGE_DELETE_ENABLED=true"可使得這句話第一次運行不報錯 不然報錯 說不支持的操做, 配置文件加不上delete 加了就報錯{"errors":[{"code":"UNSUPPORTED","message":"The operation is unsupported."}]})
回收數據(失敗 配置文件加不上delete 加了報錯 不加能運行可是並未刪除文件)
docker exec -it registry sh 進入registry容器內
在容器內執行:
registry garbage-collect config.yml
下面來自摘錄:
sudo curl --cacert /docker_registry_dir/certs/domain.crt --basic --user admin:admin https://docker.registry.server:5000/v2/_catalog
{"repositories":["mysql","swarm"]}
看到mysql還在,可是其下面對應的tag已經不見了:
sudo curl --cacert /docker_registry_dir/certs/domain.crt --basic --user admin:admin https://docker.registry.server:5000/v2/mysql/tags/list
{"name":"mysql","tags":null}
sudo curl --cacert /docker_registry_dir/certs/domain.crt --basic --user admin:admin https://docker.registry.server:5000/v2/_catalog
{"repositories":["swarm"]}
https://docs.docker.com/registry/spec/api/#deleting-an-image