如何自己commit一个镜像
这里还是先引用一下老师的笔记
关于如何自己commit一个镜像这个问题目前因为从仓库中拉下来的Tomcat里面是没有项目的,所以把webapps.dist里面的拷贝到webapps里面去作为自己的镜像在commit一下
这里用Tomcat举例子首先把镜像拉取下来执行 docker pull tomcat
我这里已经有了最新版本。
有了Tomcat镜像之后就执行docker run -it -p 8080:8080 tomcat
来启动tomcat 这里因为tomcat是一个前台应用所以得使用快捷键 ctrl + p + q来退出当前容器这样子退出不会让tomcat容器停止运行
退出来之后就可以进入我们的tomcat控制台,这个时候我们执行docker exec -it 40359d451d90 /bin/bash
可以看到我们已经进入进来了
因为从镜像仓库当中下载的镜像里面的webapps里面是空的所以为了方便我们测试我们这个时候需要把webapps.dist拷贝到webapps里面去
我们执行cp -r webapps.dist/* webapps
这个时候就可以访问我们的tomcat服务器了记得开启阿里云服务器的安全组对应的端口哈!!!!
下一步就是commit镜像了执行命令docker commit -a="迟茗阳" -m="在webapp里面添加了一些东西" 40359d451d90 tomcat02:1.0
注意这里镜像名字吧不能有大写字母
这个时候就看镜像多了一个tomcat02
一直到这里结合我前面写的就算是入门docker了但是还远远不够!!!后面还得学习docker数据卷 docker 网络和dockerfile
容器数据卷
还是上来先引用一下老师的笔记
下面是我自己的理解和总结---------------------------------
容器数据卷的概念主要为了解决容器数据持久化的问题。当容器停止或删除时,其内部的状态和数据通常会丢失。为了确保这些重要信息能够长期保存,即使在容器生命周期结束后也能继续访问,数据卷技术应运而生。
具体来说,数据卷允许将容器内的特定目录与宿主机上的一个目录进行绑定。这意味着,当你对容器内指定目录下的文件进行任何修改时,实际上是在直接操作宿主机上对应的文件。以MySQL为例,假设你基于官方MySQL镜像启动了一个容器。在这个过程中,你可以设置一个数据卷,将MySQL的数据目录(例如,包含数据库文件的目录)挂载到宿主机的一个特定位置。这样一来,无论何时你在MySQL容器中创建、修改或删除数据库,这些操作都会反映在宿主机的相应目录下,从而实现了数据的持久化存储。
这种做法的好处显而易见:
- 数据保护:即使容器被删除或替换,由于数据实际存储于宿主机,因此不会丢失。
- 灵活性:多个容器可以共享同一个宿主机上的数据卷,这在需要跨多个服务或应用共享数据的情况下非常有用。
- 易于备份和恢复:因为数据独立于容器存在,所以更容易进行备份和恢复操作。
总之,通过使用数据卷,不仅解决了容器化应用中常见的数据持久化问题,还增强了系统的灵活性和可维护性。
下面是实际的测试内容------------------------
还是先引用一下老师的笔记
启动一个centos容器把centos容器里面的home目录挂载到宿主机的home/ceshi目录下面去
执行命令docker run -it -v /home/ceshi:/home centos /bin/bash
做一个挂载并且进入到容器当中去
可以看到多了一个cecshi目录这就相当于做了一个挂载之后再宿主机上面添加东西会自动同步到容器内,在容器内添加的东西会自动同步到宿主机里面去
这个时候可以执行docker inspect 容器id
来查看容器的详细信息来看看他是否已经挂载成功了可以看到是已经挂载成功的了
可以看到现在容器里面和容器外面的两个挂载的内容是一样的都是空的
现在开始新建文件在容器里面新建一个文件test.java在容器外面不用新建会自动同步
在容器外面新建的也会自动同步到里面去
上面是新建文件,容器内外新建文件都是一样的接下来看文件里面的内容!!
还是一样的我们在容器里面对test01.txt写一个侧测试内容看看能不能自动同步到容器外面去
结论是容器里面修改的文件内容会自动同步到容器外面去
接下来看容器外面修改的文件内容能不能自动同步到容器里面去
注意以下这里就算是停止了容器因为已经把数据挂载出去了所以数据也不会丢失,删除容器数据也不会丢失!!!但是弊端就是会占用两倍的存储
mysql同步数据
这里因为docker的镜像加速国内都给封锁了所以这里只能先往后放了,有需要的直接取看老师的视频
狂神说dockermysql同步数据
其实就是用数据卷技术把mysql存储数据的地方挂载到宿主机上面去
具名挂载和匿名挂载
具名挂在和匿名挂载其实就也是外挂数据卷,没啥区别就是前面启动容器的时候我们指定了容器里面的/home目录挂载到/home/ceshi 要是使用匿名挂在我们可以不指定挂载的目录
我们使用NGINX镜像启动一个具名数据卷
docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx nginx
启动玩之后因为我们指定了数据卷的名字但是没有指定挂载的数据卷在宿主机上面的路径,docker会自动的有一个空间来存储这些没有指定宿主机路径的挂载
匿名挂载和具名挂载的区别
匿名挂载和具名挂载都是Docker中的数据卷挂载方式,主要用于容器的数据持久化。具体来说:
- 匿名挂载:
- 不需要指定挂载卷的名称。
- 适合临时使用或不需要持久化数据的情况。
- 如果容器被删除,匿名卷也会被删除。
- 具名挂载:
- 明确指定挂载卷的名称。
- 适合需要持久化数据和更好地管理数据的情况。
- 即使容器被删除,具名卷依然存在,可以通过名称进行管理。
挂载之后可以使用docker volume ls
来查看已经有的具名挂载和匿名挂载,其实匿名挂载就是不指定名字但是对于docker来说有一个哈希码也是一样的
使用NGINX镜像启动具名数据卷
假设我们要使用NGINX镜像启动一个具名数据卷,具体步骤如下:
1.创建具名卷:
docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx nginx
创建匿名卷用这个命令
docker run -d -P --name nginx03 -v /etc/nginx nginx
2.创建成功之后可以执行docker volume ls
来查看已经有的卷
可以查看数据卷的详细信息
总结一下数据卷的挂载方式
-v 容器内路径 # 匿名挂载
-v 数据卷名:/容器内路径 # 具名挂载
-v /宿主机路径:/容器内路径 # 指定路径挂载