目录
1、Docker镜像的分层结构
镜像最底层和主机共享门内核数据,base镜像的实质就是一个最小的linux。
要注意的是,镜像虽然有很多层,但是可写容器层往下的镜像层都不可写,也就是说我们运行容器后对其进行的修改,实际上都是保存在了可写容器层,如果释放了容器,那么之前所写的数据都会作废,想要保存数据需要把容器层打包
2、docker镜像构建:命令行方法
步骤包括:运行容器、修改容器 、将容器保存为新的镜像,不推荐。
缺点: 效率低、可重复性弱、容易出错 使用者无法对镜像进行审计,存在安全隐患
server11:
docker search busybox ###在docker仓库中查找名为busybox的镜像
docker info 可以查看docker仓库在哪,即我们上一步的查找是在哪个数据库查找的
docker pull busybox ###拉取镜像,需要一段时间从仓库中下载下来
docker images ###拉取好后用该命令查看本机拉取好的所有镜像
docker ps ####查看正在运行中的所有容器,发现上一个实验的小游戏还在,我们要删掉这个容器
docker rm -f demo ###强制删除
接下来我们运行busybox,
docker run -it --name demo busybox ####it表示是交互式进程,不可打入后台,demo是名字,如果不制定,系统会自动分配一个不好打的,所以制定了名字比较方便
在容器内可以用 ls和touch管理文件
ctrl+d退出交互式页面
退出容器后, docker ps 查看运行中的容器,发现busybox已经关了
docker ps -a 能看到所有容器,有busybox,说明busybox只存在但是未运行
假如我们后边还想要运行这个容器,可以采用以下步骤:
docker start demo 启动后再查看,就有busybox了
docker attach demo 进入交互页面
可以看到我们刚才的文件都在,此时退出容器,并删除 docker rm -f demo
docker run -it --name demo busybox再次创建busybox容器,发现之前的文件没了
容器的运行和修改都实现了,接下来就是如何保存所作的修改,在这里最简单的办法同样是最不推荐的办法,就是采用commit命令:
修改好相应内容后,退出容器,使用以下命令
docker commit demo demo:v1 即创建一个demo:v1,这个v1的内容就是修改后的容器内容
docker run -it --name demo demo:v1 运行demo:v1,之前的内容都在
如果不想要修改后的镜像v1,用 docker rmi -f demo:v1 删除