Docker封装镜像
一、commit封装镜像
1.导入镜像
docker load -i ubuntu.tar
docker images
2.建立容器vm1,运行ubuntu,并建立文件,然后ctrl+p+q退出
[root@server1 ~]# docker run -it --name vm3 ubuntu
root@d9389486d98d:/# ls
bin dev home lib64 mnt proc run srv tmp var
boot etc lib media opt root sbin sys usr
root@d9389486d98d:/# touch file{1…10}
root@d9389486d98d:/# ls
bin etc file2 file5 file8 lib mnt root srv usr
boot file1 file3 file6 file9 lib64 opt run sys var
dev file10 file4 file7 home media proc sbin tmp
root@d9389486d98d:/# [root@server1 ~]#
3.删除这个容器,再基于ubuntu创建容器,查看我们所作修改是否还在
[root@server1 ~]# docker rm vm3 -f
vm3
[root@server1 ~]# docker run --name vm3 -it ubuntu
root@60219e7cfb6f:/# ls
bin dev home lib64 mnt proc run srv tmp var
boot etc lib media opt root sbin sys usr
root@60219e7cfb6f:/#
可以看到我们所作的修改已经被释放掉,
那么问题来了:如果我们得到一个原始的镜像后,需要往上百台的之机上构建容器并部署相关服务,做好的镜像没办法保存打包,那将是一件非常痛苦的事情;这个时候我们可以使用commit命令将容器构建成一个新的镜像
4.commit封装镜像
构建镜像三部曲:
运行容器
修改容器
将容器保存为新的镜像
我们在vm3这个容器中修改,然后使用commit封装镜像
root@60219e7cfb6f:/# touch file{1…10}
root@60219e7cfb6f:/# ls
bin etc file2 file5 file8 lib mnt root srv usr
boot file1 file3 file6 file9 lib64 opt run sys var
dev file10 file4 file7 home media proc sbin tmp
root@60219e7cfb6f:/# [root@server1 ~]#
[root@server1 ~]# docker commit vm3 ubuntu:vm3
sha256:cabed28649ae61bbb1bd49be17d6342fa33209dcdc825b8c3fafacb3130dbe3d
然后再删除这个容器后
可以看到commit已经创建了一个ubuntu:vm3的镜像,我们基于这个镜像创建运行一个容器看看刚才的修改是否还在
可以看到使用新封装的镜像构建容器,保存了之前操作的痕迹
二、使用Dockerfile封装虚拟机
1.删除之间建立的容器和镜像
2.在/下建立一个目录,!!注意!!不要把dockerfile放在/下(因为创建镜像的时候会加载dockerfile所在目录的全部数据)
Mkdir /docker
Cd /docker
vim Dockerfile
FROM rhel7
MAINTAINER 965386491@qq.com
COPY yum.repo /etc/yum.repos.d/
RUN rpmdb --rebuilddb
RUN yum clean all
RUN yum install -y httpd
RUN echo “This is guozhaoliang’s test web” >> /var/www/html/index.html
EXPOSE 80
CMD ["/usr/sbin/httpd", “-D”, “FOREGROUND”]
3.建立docker-httpd镜像
docker build . .指Dockerfile所在目录
建运行docker封装的http镜像
docker run -d -p 80:80 --name example1 http