導出容器
如果要導出本地某個容器,可以使用docker export
命令:
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8e847a221af5 ubuntu "/bin/bash" 14 hours ago Exited (0) 5 seconds ago distracted_lalande
888b1857981e ubuntu "/bin/bash" 14 hours ago Exited (0) 14 hours ago boring_dijkstra
c74c8288ae0b ubuntu:14.04 "/bin/bash" 15 hours ago Exited (0) 15 hours ago awesome_goldstine
$ docker export 888 > ubuntu.tar
$ ls
Applications IdeaProjects Pictures eclipse-workspace ubuntu.tar
注意:導出容器的容器ID可以簡寫,去前面三個字符
可以看見我們把容器已經導出了。
導入容器
可以使用docker import
從容器快照文件中再導人爲鏡像,在操作這個之前,我們可以找個容器,進去修改一些東西。
再將修改的容器導入爲鏡像文件,然後查看我們修改的文件是否還存在:
B000000094106A:~ zhanghao53$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8e847a221af5 ubuntu "/bin/bash" 14 hours ago Exited (0) 12 minutes ago distracted_lalande
888b1857981e ubuntu "/bin/bash" 14 hours ago Exited (0) 14 hours ago boring_dijkstra
c74c8288ae0b ubuntu:14.04 "/bin/bash" 15 hours ago Exited (0) 15 hours ago awesome_goldstine
B000000094106A:~ zhanghao53$ docker start 888
888
$ docker exec -it 888 bash
root@888b1857981e:/# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
root@888b1857981e:/# mkdir zhanghao
root@888b1857981e:/# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var zhanghao
root@888b1857981e:/# cd zhanghao/
root@888b1857981e:/zhanghao# ls
root@888b1857981e:/zhanghao# vim
bash: vim: command not found
root@888b1857981e:/zhanghao# apt-get update
Get:1 http://archive.ubuntu.com/ubuntu bionic InRelease [242 kB]
Get:2 http://archive.ubuntu.com/ubuntu bionic-updates InRelease [65.4 kB]
... ...
Fetched 24.9 MB in 35s (721 kB/s)
Reading package lists... Done
root@888b1857981e:/zhanghao# apt-get install vim
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
file libexpat1 libgpm2 libmagic-mgc libmagic1 libmpdec2 libpython3.6 libpython3.6-minimal libpython3.6-stdlib libreadline7 libsqlite3-0
libssl1.1 mime-support readline-common vim-common vim-runtime xxd xz-utils
Suggested packages:
gpm readline-doc ctags vim-doc vim-scripts
The following NEW packages will be installed:
file libexpat1 libgpm2 libmagic-mgc libmagic1 libmpdec2 libpython3.6 libpython3.6-minimal libpython3.6-stdlib libreadline7 libsqlite3-0
libssl1.1 mime-support readline-common vim vim-common vim-runtime xxd xz-utils
0 upgraded, 19 newly installed, 0 to remove and 0 not upgraded.
Need to get 12.7 MB of archives.
After this operation, 61.0 MB of additional disk space will be used.
......
root@888b1857981e:/zhanghao# vim fasdfa.txt
root@888b1857981e:/zhanghao# ls -l
total 4
-rw-r--r-- 1 root root 138 May 10 02:45 fasdfa.txt
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
888b1857981e ubuntu "/bin/bash" 14 hours ago Up 4 minutes boring_dijkstra
$ docker export 888 > ubuntu.tar
B000000094106A:~ zhanghao53$ ls
Applications IdeaProjects Pictures eclipse-workspace ubuntu.tar
$ cat ubuntu.tar | docker import - test/ubuntu:v1.0
sha256:cde190ed9432a2b79d0d2a389d4b41e26b9c50d0f314c6b2130a430956f6bbf9
$ docker images;
REPOSITORY TAG IMAGE ID CREATED SIZE
test/ubuntu v1.0 cde190ed9432 16 seconds ago 168.5 MB
ubuntu 14.04 8cef1fa16c77 12 days ago 222.9 MB
ubuntu latest 452a96d81c30 12 days ago 79.62 MB
ubuntu 17.10 e4422b8da209 12 days ago 99.22 MB
$ docker run -dit cde /bin/bash
373635d352ca2c4582aa9aa8373d8108c1f92f647a364e20814d7970f84dc367
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
373635d352ca cde "/bin/bash" 8 seconds ago Up 7 seconds amazing_leavitt
888b1857981e ubuntu "/bin/bash" 14 hours ago Up 7 minutes boring_dijkstra
$ docker exec -it 373 bash
root@373635d352ca:/# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var zhanghao
root@373635d352ca:/# cd zhanghao/
root@373635d352ca:/zhanghao# ls -l
total 4
-rw-r--r-- 1 root root 138 May 10 02:45 fasdfa.txt
除此之外還可以通過指定URL或者某個目錄來導入:
docker import http://example.com/exampleimage.tgz example/imagerepo
刪除容器
使用docker rm 'CONTAINER ID'
命令可以刪除容器
在Docker 1.13版本以後,可以使用docker container prune
我的版本你不符合,大家可以自己實驗一下
save、load、export、import的區別
首先明確一點save、load是操作鏡像的,而export、import是操作容器的,這個是根本的區別。
save 和 load
Save命令用於持久化鏡像,可以通過下面的命令來保存鏡像:
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f96b8d635fab ubuntu "/bin/bash" 13 minutes ago Up 13 minutes sick_fermi
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu latest 452a96d81c30 12 days ago 79.62 MB
$ docker save 452 > ubuntu:latest.tar
$ ls -lh ubuntu\:latest.tar
-rw-r--r-- 1 soygrow INTERNAL\Domain Users 78M 5 10 11:41 ubuntu:latest.tar
// 首先把容器和鏡像都刪了
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
// 從保存的鏡像文件中加載
$ docker load < ubuntu\:latest.tar
65bdd50ee76a: Loading layer [==================================================>] 82.09 MB/82.09 MB
ec75999a0cb1: Loading layer [==================================================>] 15.87 kB/15.87 kB
67885e448177: Loading layer [==================================================>] 8.192 kB/8.192 kB
8db5f072feec: Loading layer [==================================================>] 5.632 kB/5.632 kB
059ad60bcacf: Loading layer [==================================================>] 3.072 kB/3.072 kB
Loaded image ID: sha256:452a96d81c30a1e426bc250428263ac9ca3f47c9bf086f876d11cb39cf57aeec
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
<none> <none> 452a96d81c30 12 days ago 79.62 MB
$ docker tag 452 ubuntu:latest
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu latest 452a96d81c30 12 days ago 79.62 MB
注意:docker load 加載鏡像後repository和tag名稱都爲none,這裏可以使用 docker tag 命令添加相應的REPOSITORY和TAG
export 和 import
首先這兩個命令是操作容器的,和save、load不同,這兩個命令的使用方法在上文中已經介紹了。
區別
docker import
可以重新指定鏡像的名字,docker load
不可以docker export
導出的版本會比原來的版本小點,因爲導出的版本會丟失歷史和元數據
導出後再導入(exported-imported)的鏡像會丟失所有的歷史,而保存後再加載(saveed-loaded)的鏡像沒有丟失歷史和層(layer)。這意味着使用導出後再導入的方式,你將無法回滾到之前的層(layer),同時,使用保存後再加載的方式持久化整個鏡像,就可以做到層回滾(可以執行docker tag 來回滾之前的層)