Docker创建镜像的四种方式
docker镜像创建操作
使用docker save/load保存加载镜像
docker save保存镜像
root@DESKTOP-UCCCCAE:~# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
redis 6.0.5 235592615444 3 weeks ago 104MB
mysql 5.7 a4fdfd462add 5 weeks ago 448MB
ubuntu 15.10 9b9cb95443b5 3 years ago 137MB
root@DESKTOP-UCCCCAE:~# docker save -o redis.tar redis:6.0.5
root@DESKTOP-UCCCCAE:~#
-o, --output string 写入文件
docker load加载镜像
root@DESKTOP-UCCCCAE:~# docker load -i redis.tar
root@DESKTOP-UCCCCAE:~# docker load < redis.tar
两种方式都行
-i, --input string 从tar文件读取
-q, --quiet 压制标准输出
< 输入重定向 > 输出重定向,覆盖或创建文件 >> 输出重定向,追加或创建
docker export/import导入导出容器
docker export导出容器
save 是从镜像中导出镜像,能保留所有的镜像层,不保存容器启动后的变化内容;
save保存的镜像包含历史镜像层(可以使用docker tag进行层回滚),所以叫保存镜像。
export 是从容器中导出镜像文件,能保存启动容器后的变化内容,但会丢失历史镜像层;
镜像中保存了容器启动后的变化内容,所以也被叫作导出容器。
一句话就是docker export导出了保存容器状态的镜像
root@DESKTOP-UCCCCAE:~# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a2bf177b57f9 redis:6.0.5 "docker-entrypoint.s…" 5 days ago Up 9 hours 0.0.0.0:6379->6379/tcp redis605
root@DESKTOP-UCCCCAE:~# docker export redis605 -o redis2.tar
root@DESKTOP-UCCCCAE:~#
# 对比docker save redis:6.0.5 -o redis.tar
代码块拖到最右可以看到export是指定容器名redis605,而save是指定镜像名redis:6.0.5;
虽然docker export是以镜像形式导出容器,但从目标的类型来讲,可以被称作导出容器。
docker import导入容器
root@DESKTOP-UCCCCAE:~# cat redis2.tar | docker import - test/redis:v1
sha256:89feb7a1ff3ba1aa77e9dad84afb8e07b9b48e4713aef75047062bc08a6ad5e4
#或docker import redis2.tar redis:v1
root@DESKTOP-UCCCCAE:~#
-c, --change list 对创建的镜像应用DockerFile描述,即添加docker指令
-m, --message string 为镜像设置提交信息(与容器操作相关的信息)
root@DESKTOP-UCCCCAE:~# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
test/redis v1 89feb7a1ff3b 13 seconds ago 101MB
redis 6.0.5 235592615444 3 weeks ago 104MB
mysql 5.7 a4fdfd462add 5 weeks ago 448MB
ubuntu 15.10 9b9cb95443b5 3 years ago 137MB
可以看到用docker export导出的镜像比原镜像小了一些,这是因为丢失了历史镜像层。
使用已有的镜像来创建新镜像
docker container commit创建镜像
root@DESKTOP-UCCCCAE:~# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu 15.10 9b9cb95443b5 3 years ago 137MB
root@DESKTOP-UCCCCAE:~# docker run -it ubuntu:15.10
root@7a4c11fd451e:/# touch demo.txt
root@7a4c11fd451e:/# exit
exit
#启动容器后,进入容器创建文件
接下来使用上方容器id(7a4c11fd451e )进行docker container commit操作:
root@DESKTOP-UCCCCAE:~# docker container commit -m "Add a demo.txt file" -a "hjm" 7a4c11fd451e test/ubuntu:v1
sha256:a1776575d1b3391597bcdb4c75fdf7b8531355e201bd34c1af4a669ae5ead9dd
-a, --author string Author (e.g., "John Hannibal Smith <hannibal@a-team.com>")
-c, --change list Apply Dockerfile instruction to the created image,同import
-m, --message string Commit message,同docker import处
-p, --pause 提交时暂停容器 (default true)
root@DESKTOP-UCCCCAE:~# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
test/ubuntu v1 a1776575d1b3 11 seconds ago 137MB
使用DockerFile创建镜像
太长没人看,DockerFile方式创建镜像写在下面链接这一篇:
Dockerfile创建镜像
有错误帮忙指出