docker_registry2 0.4.0 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +34 -7
- data/lib/docker_registry2.rb +6 -6
- data/lib/registry/registry.rb +24 -9
- data/lib/registry/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 992caae84eabca0ad18bcc512d5597374dc6118d
|
4
|
+
data.tar.gz: b2c5bf87009426992b0e7fe033c0f68bfcedbca8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: aa966c198aed38cc24d0f249ba0d0add2dff8f6ea890488f3bb1e9276668c89c0679d22f7049d66a8968933481df96297e4773458e5e89f1f00c98ed782d7618
|
7
|
+
data.tar.gz: de196e0db00daf1c698ac31bc28835f79bc8beffad0acae27318b44a578e6441f08330177986639dc300a339be61759e651a046ba5e0cfbb5d06dc06c3e69809
|
data/README.md
CHANGED
@@ -38,6 +38,17 @@ And execute:
|
|
38
38
|
Once it is installed, you first *open* a connection to a registry, and then *request* from the registry.
|
39
39
|
|
40
40
|
### Connecting
|
41
|
+
Use the `connect` method to connect to a registry:
|
42
|
+
|
43
|
+
````ruby
|
44
|
+
reg = DockerRegistry2.connect("https://my.registy.corp.com")
|
45
|
+
````
|
46
|
+
|
47
|
+
If you do not provide the URL for a registry, it uses the default `https://registry.hub.docker.com`.
|
48
|
+
|
49
|
+
|
50
|
+
|
51
|
+
You can connect anonymously or with credentials:
|
41
52
|
|
42
53
|
#### Anonymous
|
43
54
|
To connect to a registry:
|
@@ -78,7 +89,7 @@ Once you have a valid `reg` object return by `DockerRegistry2.connect()`, you ca
|
|
78
89
|
results = reg.search("mylibs")
|
79
90
|
````
|
80
91
|
|
81
|
-
Returns all repositories whose name contains `"mylibs"`.
|
92
|
+
Returns all repositories whose name contains `"mylibs"`.
|
82
93
|
|
83
94
|
**Note:** The v2 registry does not support search directly server-side. Thus, this is simulated by using the `catalog/` endpoint. It is highly recommended to avoid using this function until the v2 registry supports direct search, as it will be slow. It pulls a list of all repositories to the client and then does a pattern match on them.
|
84
95
|
|
@@ -126,7 +137,7 @@ The response structure looks something like this:
|
|
126
137
|
}
|
127
138
|
````
|
128
139
|
|
129
|
-
It is important to note that the hashes **may** or **may not** match the hashes that you receive when running `docker images` on your machine. These are the hashes returned by the `Docker-Content-Digest` for the manifest. See [v2 API Spec](https://docs.docker.com/registry/spec/api/#get-manifest).
|
140
|
+
It is important to note that the hashes **may** or **may not** match the hashes that you receive when running `docker images` on your machine. These are the hashes returned by the `Docker-Content-Digest` for the manifest. See [v2 API Spec](https://docs.docker.com/registry/spec/api/#get-manifest).
|
130
141
|
|
131
142
|
These **may** or **may not** be useful for comparing to the local image on disk when running `docker images`. These **are** useful for comparing 2 different tags or images in one or more registries.
|
132
143
|
|
@@ -244,6 +255,26 @@ The following exceptions are thrown:
|
|
244
255
|
* `RegistryAuthenticationException`: username and password are invalid
|
245
256
|
* `RegistryAuthorizationException`: registry does not support your deleting the given repository, probably because you do not have sufficient access rights.
|
246
257
|
|
258
|
+
#### Layer sizes
|
259
|
+
If you want to get the sizes of one or more layers in an image, you have several convenience functions available.
|
260
|
+
|
261
|
+
##### Total Size
|
262
|
+
If you want to add up easily all of the layers in a manifest (which, of course, should equal the total size of the image), you can pass the manifest to the `manifest_sum` method.
|
263
|
+
|
264
|
+
```ruby
|
265
|
+
manifest = reg.manifest "library/ubuntu", "16.04"
|
266
|
+
totalSize = reg.manifest_sum manifest
|
267
|
+
```
|
268
|
+
|
269
|
+
##### Single Blob
|
270
|
+
If you have the repo name and the sha256 hash for the blob, you can get the size of the layer by doing:
|
271
|
+
|
272
|
+
```ruby
|
273
|
+
reg.blob_size "namespace/repo", "sha256:abc5634737434"
|
274
|
+
```
|
275
|
+
|
276
|
+
Of course, most of the time you won't need this, since the sizes are already included in the same place you got the blob hashes in the first place: the manifest.
|
277
|
+
|
247
278
|
|
248
279
|
### Exceptions
|
249
280
|
|
@@ -258,10 +289,6 @@ MIT License.
|
|
258
289
|
|
259
290
|
## Contribution
|
260
291
|
|
261
|
-
Developed by Avi Deitcher http://github.com/deitch
|
292
|
+
Developed by Avi Deitcher http://github.com/deitch
|
262
293
|
Contributors Jonathan Hurter https://github.com/johnsudaar
|
263
294
|
Contributions courtesy of TraderTools, Inc. http://tradertools.com
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
|
data/lib/docker_registry2.rb
CHANGED
@@ -4,19 +4,19 @@ require File.dirname(__FILE__) + '/registry/exceptions'
|
|
4
4
|
|
5
5
|
|
6
6
|
module DockerRegistry2
|
7
|
-
def self.connect(uri)
|
7
|
+
def self.connect(uri="https://registry.hub.docker.com")
|
8
8
|
@reg = DockerRegistry2::Registry.new(uri)
|
9
|
-
end
|
10
|
-
|
9
|
+
end
|
10
|
+
|
11
11
|
def self.search(query = '')
|
12
12
|
@reg.search(query)
|
13
13
|
end
|
14
14
|
|
15
15
|
def self.tags(repository)
|
16
16
|
@reg.tags(repository)
|
17
|
-
end
|
18
|
-
|
17
|
+
end
|
18
|
+
|
19
19
|
def self.manifest(repository,tag)
|
20
20
|
@reg.manifest(repository,tag)
|
21
21
|
end
|
22
|
-
end
|
22
|
+
end
|
data/lib/registry/registry.rb
CHANGED
@@ -44,7 +44,7 @@ class DockerRegistry2::Registry
|
|
44
44
|
# parse the response
|
45
45
|
resp = JSON.parse response
|
46
46
|
# do we include the hashes?
|
47
|
-
if withHashes then
|
47
|
+
if withHashes then
|
48
48
|
useGet = false
|
49
49
|
resp["hashes"] = {}
|
50
50
|
resp["tags"].each {|tag|
|
@@ -62,38 +62,53 @@ class DockerRegistry2::Registry
|
|
62
62
|
resp["hashes"][tag] = head.headers[:docker_content_digest]
|
63
63
|
}
|
64
64
|
end
|
65
|
-
|
65
|
+
|
66
66
|
return resp
|
67
67
|
end
|
68
|
-
|
68
|
+
|
69
69
|
def manifest(repo,tag)
|
70
70
|
# first get the manifest
|
71
71
|
JSON.parse doget "/v2/#{repo}/manifests/#{tag}"
|
72
72
|
end
|
73
|
-
|
73
|
+
|
74
74
|
def pull(repo,tag,dir)
|
75
75
|
# make sure the directory exists
|
76
76
|
FileUtils::mkdir_p dir
|
77
77
|
# get the manifest
|
78
78
|
m = manifest repo,tag
|
79
79
|
# pull each of the layers
|
80
|
-
layers = m["
|
80
|
+
layers = m["layers"].each { |layer|
|
81
81
|
# make sure the layer does not exist first
|
82
82
|
if ! File.file? "#{dir}/#{layer.blobSum}" then
|
83
83
|
doget "/v2/#{repo}/blobs/#{layer.blobSum}" "#{dir}/#{layer.blobSum}"
|
84
84
|
end
|
85
85
|
}
|
86
86
|
end
|
87
|
-
|
87
|
+
|
88
88
|
def push(manifest,dir)
|
89
89
|
end
|
90
|
-
|
90
|
+
|
91
91
|
def tag(repo,tag,newrepo,newtag)
|
92
92
|
end
|
93
|
-
|
93
|
+
|
94
94
|
def copy(repo,tag,newregistry,newrepo,newtag)
|
95
95
|
end
|
96
|
-
|
96
|
+
|
97
|
+
# gets the size of a particular blob, given the repo and the content-addressable hash
|
98
|
+
# usually unneeded, since manifest includes it
|
99
|
+
def blob_size(repo,blobSum)
|
100
|
+
response = dohead "/v2/#{repo}/blobs/#{blobSum}"
|
101
|
+
Integer(response.headers[:content_length],10)
|
102
|
+
end
|
103
|
+
|
104
|
+
def manifest_sum(manifest)
|
105
|
+
size = 0
|
106
|
+
manifest["layers"].each { |layer|
|
107
|
+
size += layer["size"]
|
108
|
+
}
|
109
|
+
size
|
110
|
+
end
|
111
|
+
|
97
112
|
private
|
98
113
|
def doreq(type,url,stream=nil)
|
99
114
|
begin
|
data/lib/registry/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: docker_registry2
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Avi Deitcher https://github.com/deitch
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2017-
|
13
|
+
date: 2017-03-26 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: bundler
|