目录
- Docker 系列文章目录
- 保存本地镜像到本地文件
- 1 创建
- 2 使用
- 自定义镜像详解
- 创建自己的镜像
- 通过容器创建
保存本地镜像到本地文件
1 创建
语法:
docker save -o 本地文件名称 仓库中镜像名称/镜像 ID
示例:
docker save -o centos-shark2.tar centos-shark:latest
注意: 镜像的 tag 一定要写,如果不写,当前本地仓库的所有镜像都将会保存到本地的 tar 文件中。
2 使用
使用的时候可以把保存的文件传输到任何一个 Docker 宿主机上
之后使用如下命令
docker load -i centos-shark2.tar
自定义镜像详解
镜像是容器的基础,是容器静态的运行环境。就像是一个程序代码,当你运行了这个程序,此时它的动态表现形式就是在内存中,叫进程。
创建自己的镜像
创建 自己的镜像可以使用 docker commit
命令,从一个你配置好环境的容器中创建一个镜像,这个镜像会自动放到你的本地仓库。但是强烈建议不应该这样自定义你的镜像。应为这会带来一些安全隐患,也不利于分享传输你的环境。
正确的做法是通过 Dockerfile 来定制镜像。
提示: 镜像是多层的,每一层都是在前一层的基础上进行的修改。
当然容器也是多层存储的,当容器运行时,会以镜像会基础层,之后在镜像的基础层上加一层,来作为容器运行时的存储层。
下面我们就以在 Centos 这个基础镜像启动一个容器,之后在容器里安装一下我们所要的工具,之后再保存容器中的操作,分别用 commit 方式和 Dockerfile 方式来演示这个过程。
通过容器创建
- 启动容器,并安装软件
[root@localhost ~]# docker run -it centos:latest /bin/bash
[root@89b5c240ba58 /]# rpm -qa |grep vim
vim-minimal-7.4.160-2.el7.x86_64
[root@89b5c240ba58 /]# vim a
bash: vim: command not found
[root@89b5c240ba58 /]# rpm -qa |grep tree
[root@89b5c240ba58 /]# yum install tree vim*
- 安装完毕,验证
[root@89b5c240ba58 /]# rpm -qa |grep tree
tree-1.6.0-10.el7.x86_64
[root@89b5c240ba58 /]# rpm -qa |grep vim
vim-filesystem-7.4.160-4.el7.x86_64
vim-enhanced-7.4.160-4.el7.x86_64
vim-minimal-7.4.160-4.el7.x86_64
vim-common-7.4.160-4.el7.x86_64
vim-X11-7.4.160-4.el7.x86_64
[root@89b5c240ba58 /]#
- commit 提交到本地仓库
commit 语法:
docker commit [选项] <容器ID或容器名> [<镜像名>[:<标签>]]
示例:
打开另外一个终端,或者退出容器,在宿主机上执行如下命令:
- 先查看本地仓库的镜像情况
[root@localhost ~]# docker image ls |grep centos
centos latest e934aafc2206 7 weeks ago 199MB
centos7 1.0 4842f0bd3d61 16 months ago 383MB
openshift/base-centos7 latest 4842f0bd3d61 16 months ago 383MB
- 再确认一下要提交的容器 ID 或者 容器名
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
89b5c240ba58 centos:latest "/bin/bash" 20 minutes ago Up 20 minutes zealous_nobel
- 开始提交到本地仓库
[root@localhost ~]# docker commit \
> --author "yangge <yangge@qf.com>" \
> --message "Install tree vim*" \
> 89b5c240ba58 \
> centos:1.10
sha256:8f1a0dbcef683c3ca22522f3dbac63633734f3d832a21cc425feaac8d4a21857
参数说明:
- –author 作者
- –message 说明信息
自定义镜像最佳实战,必须养成写作者和说明信息的习惯
- 验证
[root@localhost ~]# docker image ls centos
REPOSITORY TAG IMAGE ID CREATED SIZE
centos 1.10 8f1a0dbcef68 7 minutes ago 372MB
centos latest e934aafc2206 7 weeks ago 199MB
思考:
刚才我们安装了软件之后并没有清理缓存等环境,这样有可能导致镜像的臃肿。
还有可能是,你制作好的镜像别人不一定能信任,就像你不会随便从其他地方拉取一个镜像来作为自己的生产环境的容器一样。
更可怕的是,容器和镜像都是分层的,对于当前层的修改,是不会影响之前层的,之前层都是只读的。假如某一次对其修改有误,想再修改回来,那就会又增加一层,导致更加臃肿。
所以正确的做法是采用 Dockerfile。