Blogger Information
Blog 10
fans 0
comment 0
visits 6304
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
docker入门到进阶三
.
Original
458 people have browsed it

如何提交一个自己的镜像
commit镜像
docker commit 提交容器成为一个新的副本

#命令和git原理类似
docker commit -m="提交的描述信息" -a ="作者" 容器id 目标镜像名:【TAC】
实战测试
#1.启动一个默认的tomcat

#2.发现这个默认的tomcat 是没有wenapps应用,镜像原因,官方的镜像默认webapps 下面是没有文件的!

#3.我自己拷贝进去了基本的文件

#4.将我们操作过的容器通过commit提交为镜像!我们以后就使用我们修改过的镜像即可,这就是我们自己的修改的。
如果想保存当前容器的状态,就可以通过commit来提交,获得一个镜像,就好比Vm虚拟机的快照。

docker的理念回顾
将应用和环境打包成一个镜像!
如果数据都在容器中,那么我们容器删除,数据就会丢失需求:数据可以持久化
如果将MySQL部署在容器,容器删了等于删库跑路!需求:MySQL数据可以存储在本地

使用容器数据卷可以完成以上需求:

容器数据卷
什么是容器数据卷?
容器之间可以有一个数据共享技术!docker容器中产生的数据,同步到本地!
这就是卷技术!目录的挂载,将我们容器内的目录,挂在到linux上面!
总结:容器的持久化和同步操作!容器间也是可以数据共享的!

使用数据卷
方式一:直接使用命令来挂载 -v
docker run -it -v 主机目录,容器内目录

#测试
docker run -it -v /home/ceshiL:/home centos /bin/bash

#启动时我们可以通过docker inspect 容器id    #查看容器信息和挂载目录
数据卷可以实现双向绑定
注意:如果容器停止,宿主机将同步目录里的文件进行修改,仍然可以同步数据。
好处:挂载后,我们以后修改只需要在本地修改即可,容器内自动同步。


实战:安装MySQL
思考:MySQL的数据持久化的问题!
#获取镜像
[root@localhost ~]# docker pull mysql:5.7

#运行容器:需要做数据挂载!    #安装启动MySQL,需要配置密码,这是要注意的!
#官方测试:docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
#
#启动我们的
-d    后台运行
-p    端口映射
-v    卷挂载
-e    环境配置
--name    容器名
[root@localhost ~]# docker run -d -p 3310:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7

#启动容器之后我们在本地使用Navicat连接测试一下
#Navicat-连接到服务器的3310 --- 3310 和容器内的3306映射,这个时候我们就可以连接了!
#
#在本地测试创建一个数据库,查看一下我们映射的路径是否OK!
假设我们将容器删除,发现,我们挂载到本地的数据卷依旧没有丢失,这就实现了容器持久化功能。
具名和匿名挂载
#匿名挂载
-v    容器内路径!
docker run -d -P --name nginx01 -v /etc/nginx nginx
#查看所有的volume(卷)的情况
[root@localhost ~]# docker volume ls
DRIVER    VOLUME NAME
local     8ba0aef11bef65f036cec4b3b47ca080a27d2964e0e5858f53852604b4fb3f5a
#这里发现,这种就是匿名挂载,我们在 -v 只写了容器内的路径,没有写容器外的路径!
[root@localhost home]# docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx nginx
8f8a4faec44873d41ae545726db7c2ea681313ba8c4442d9c575d936e9b593fd
[root@localhost home]# docker volume ls
DRIVER    VOLUME NAME
local     juming-nginx

#通过 -v 卷名:容器内路径
#查看一下这个卷
所有的docker容器内的卷,没有指定目录的情况下都是 /var/lib/docker/volumes/xxxx/_data
我们通过具名挂载可以方便的找到我们的一个卷,大多数情况下在使用    具名挂载
#如何 确定是具名挂载还是匿名挂载,还是指定路径挂载!
-v 容器内路径    #匿名挂载
-v 卷名:容器内路径    #具名挂载
-v /宿主机路径::容器内路径    #指定路径挂载!    
拓展
#通过 -v 容器内路径:ro rw 改变读写权限
ro    readonly    #只读
rw    readwrite    #可读可写

#一旦这个设置了容器权限,容器对我们挂载出来的内容就有限定了
[root@localhost _data]# docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx:ro nginx
[root@localhost _data]# docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx:rw nginx

#ro 只要看到ro就说明这个路径只能通过宿主机来操作,容器内部是无法操作!


微信公众号:黑马金牌编程

Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post