James Coyle's blog पढ़ने के बाद, मुझे लगा कि docker save
और docker load
आदेश मुझे चाहिए।
> docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
progrium/consul latest e9fe5db22401 11 days ago 25.81 MB
> docker save e9fe5db22401 | tar x
> ls e9fe5db22401*
VERSION json layer.tar
VERSION
फ़ाइल केवल 1.0
शामिल है, और json
काफी जानकारी का एक बहुत कुछ शामिल है:
{
"id": "e9fe5db224015ddfa5ee9dbe43b414ecee1f3108fb6ed91add11d2f506beabff",
"parent": "68f9e4929a4152df9b79d0a44eeda042b5555fbd30a36f98ab425780c8d692eb",
"created": "2014-08-20T17:54:30.98176344Z",
"container": "3878e7e9b9935b7a1988cb3ebe9cd45150ea4b09768fc1af54e79b224bf35f26",
"container_config": {
"Hostname": "7f17ad58b5b8",
"Domainname": "",
"User": "",
"Memory": 0,
"MemorySwap": 0,
"CpuShares": 0,
"Cpuset": "",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"PortSpecs": null,
"ExposedPorts": {
"53/udp": {},
"8300/tcp": {},
"8301/tcp": {},
"8301/udp": {},
"8302/tcp": {},
"8302/udp": {},
"8400/tcp": {},
"8500/tcp": {}
},
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
"Env": [
"HOME=/",
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
"SHELL=/bin/bash"
],
"Cmd": [
"/bin/sh",
"-c",
"#(nop) CMD []"
],
"Image": "68f9e4929a4152df9b79d0a44eeda042b5555fbd30a36f98ab425780c8d692eb",
"Volumes": {
"/data": {}
},
"WorkingDir": "",
"Entrypoint": [
"/bin/start"
],
"NetworkDisabled": false,
"OnBuild": [
"ADD ./config /config/"
]
},
"docker_version": "1.1.2",
"author": "Jeff Lindsay <[email protected]>",
"config": {
"Hostname": "7f17ad58b5b8",
"Domainname": "",
"User": "",
"Memory": 0,
"MemorySwap": 0,
"CpuShares": 0,
"Cpuset": "",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"PortSpecs": null,
"ExposedPorts": {
"53/udp": {},
"8300/tcp": {},
"8301/tcp": {},
"8301/udp": {},
"8302/tcp": {},
"8302/udp": {},
"8400/tcp": {},
"8500/tcp": {}
},
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
"Env": [
"HOME=/",
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
"SHELL=/bin/bash"
],
"Cmd": [],
"Image": "68f9e4929a4152df9b79d0a44eeda042b5555fbd30a36f98ab425780c8d692eb",
"Volumes": {
"/data": {}
},
"WorkingDir": "",
"Entrypoint": [
"/bin/start"
],
"NetworkDisabled": false,
"OnBuild": [
"ADD ./config /config/"
]
},
"architecture": "amd64",
"os": "linux",
"Size": 0
}
layer.tar
फ़ाइल रिक्त प्रतीत होता है। इसलिए माता-पिता और दादाजी का निरीक्षण किया गया, दोनों में layer.tar
फ़ाइलों में कोई फ़ाइल नहीं थी।
तो यह सोचते हैं कि 4.0K एक खाली टारबॉल के लिए मानक आकार है:
for layer in $(du -hs */layer.tar | grep -v 4.0K | cut -f2)
do (echo $layer:;tar tvf $layer)
done
देखने के लिए कि इन फाइल सिस्टम के लिए सरल वृद्धिशील परिवर्तन होते हैं।
तो एक निष्कर्ष यह है कि छवि बनाने के लिए डॉकर का उपयोग करना संभव है और इसे रजिस्ट्री को धक्का दें, जैसे पैकर करता है।
स्क्रैच से छवि बनाने का तरीका described in the docs है।
यह पता चला है कि docker import - scratch
टैरबॉल में क्या है इसके बारे में परवाह नहीं करता है। मैं बस मानता हूं कि rootfs है।
> touch foo
> tar c foo | docker import - scratch
02bb6cd70aa2c9fbaba37c8031c7412272d804d50b2ec608e14db054fc0b9fab
> docker save 02bb6cd70aa2c9fbaba37c8031c7412272d804d50b2ec608e14db054fc0b9fab | tar x
> ls 02bb6cd70aa2c9fbaba37c8031c7412272d804d50b2ec608e14db054fc0b9fab/
VERSION json layer.tar
> tar tvf 02bb6cd70aa2c9fbaba37c8031c7412272d804d50b2ec608e14db054fc0b9fab/layer.tar
drwxr-xr-x 0/0 0 2014-09-01 13:46 ./
-rw-r--r-- 500/500 0 2014-09-01 13:46 foo
OpenEmbedded एकीकरण के संदर्भ में, यह शायद सबसे अच्छा है rootfs
टारबॉल, जो कुछ yocto बॉक्स से बाहर प्रदान करता है निर्माण करने के लिए, और official Python library का उपयोग rootfs आयात करने के लिए import_image(src='rootfs.tar', repository='scratch')
साथ टारबॉल और फिर इसे धक्का निजी रजिस्ट्री विधि ।
यह सबसे सुरुचिपूर्ण समाधान नहीं है, लेकिन इस समय इसे इस तरह काम करना होगा। अन्यथा कोई शायद rootfs
संशोधनों को अपने तरीके से प्रबंधित और तैनात कर सकता है, और लक्ष्य होस्ट पर docker import
का उपयोग करें, जो अभी भी एक अच्छा फिट नहीं होगा, लेकिन कुछ हद तक सरल है।