Doker镜像及挂载

一、什么是镜像

镜像是一种轻量级、可执行的独立软件包、用来打包软件运行环境和基于运行坏境开发的软件,他包含运行某个所需要的所用内容,包裹代码、运行时、库、环境变量和配置文件。

所用的应用,直接打包成docker镜像、就可以直接跑起来!

二、如何得到镜像

1.从远程仓库下载

2.朋友拷贝给你

3.自己制作一个镜像DockerFile

三、镜像加载原理

UnionFS(联合文件系统)

UnionFS(联合文件系统):Union文件系统(UnionFS)是一种分层、轻量级并高性能的文件系统,它支持对文件系统的修改做为一次提交来层层的叠加,同时可以将不同的目录挂载到同一个虚拟文件系统下。Union文件系统是Docker镜像的基础,镜像可以通过分层来进行继承,基于基础镜像,可以制作各种的应用镜像

特性:一次同时可以加载多个文件系统,但从外面看起来,只能看到一个文件系统,联合加载会把各层文件系统叠加起来,这样最终的文件系统会包含所用底层的文件和目录

四、commit镜像

docker commit 提交容器成为一个新的的副本

docker commit -m="提交的描述信息"  -a="作者" 容器id 目标镜像名:[TAG]

1.启动一个默认的tomcat

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

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

4.将我们操作过的容器通过commit提交为一个镜像!我们以后就使用我们修改过的镜像即可,这就是我们自己修改过的镜像

入门基本Docker

 五、容器数据卷

一、什么是容器数据卷

docker理念:将应用和坏境打包成一个镜像!

容器之间可以有一个数据共享的技术,Docker容器中产生的数据,同步到本地!

这就是卷技术!也就是目录挂载,将我们容器内的目录,挂载到到本地上(Liunx上面)

六、使用数据卷

方法一:直接使用命令来挂载  -v

docker run it -v 主机目录:容器目录

测试

[root@iZwz9b96gsillkg6v5gbmjZ home]# docker run -it -v /home/ceshi:/home centos /bin/bash

 七、安装mysql

 下载mysql

docker pull mysql:5.7

1.容器运行,需要做数据挂载,安装启动mysql,需要配置设置密码,这是要注意点

        官方测试,docker run --name mysql01 -e MYSQL_ROOT_PASSWWORD="自己要设置的密码" -d mysql:5.7

启动我们的mysql5.7 并挂载

[root@iZwz9b96gsillkg6v5gbmjZ ~]# docker run -d -p 3305: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

假设我们的容器删了

 发现,我们挂载到本地的数据卷依旧没有丢失,这就实现了容器数据持久化功能!

八、具名和匿名挂载

匿名挂载

-v  容器内路径       -P 是水机容器端口

docker run -d -p 端口 --name  nginx01 -v /etc/nginx  nginx

#查看所用的volume(镜像) 的情况

[root@iZwz9b96gsillkg6v5gbmjZ ~]# docker volume ls

 #这里发现,这种就是匿名挂载,我们在-v只写了容器内的路径,没有写容纳器外的路径

具名挂载

[root@iZwz9b96gsillkg6v5gbmjZ ~]# docker run -d -P --name nginx01 -v jiuti_ming:/etc/nginx nginx

[root@iZwz9b96gsillkg6v5gbmjZ ~]# docker volume ls

local     e2a3a1121c4ffa38243332fdb984f9969e13719e70923e72feee6d196f0ade5e
local     jiuti_ming

#通过 -v 卷名:容器内路径

#查看一下这个有卷名的卷

#查看一下这个没有卷名的卷

 所用的docker容器内的卷,没有指定目录的情况下都在`/var/lib/docker/volumes/xxx/_data`下面

#我们通过具名挂载可以方便找到我们的一个卷,大多数情况下我们使用的是具名挂载

  区分具名挂载还是匿名挂载,还是指定路径挂载

# -v 容器内的路径          匿名挂载

# -v 卷名:容器内路径    具名挂载

#-v /宿主机路径:容器内路径   指定路径挂载

扩展

#通过- v 容器内路径,ro , rw 改变读写权限

ro        #只读

rw        #可读可写

#一旦这个设置了容器的权限,容器对我们挂载出来的内容就有了限定了

docker run -d  -p  --name nginx01 -v juming_nginx01:/etc/nginx:ro  nginx

docker run -d  -p  --name nginx01 -v juming_nginx01:/etc/nginx:ro  nginx

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

 

九、数据容器卷 

容器之间配置信息的传递,数据卷容器的生命周期一直持续到没有容器使用为止

但是,一旦持久化到本地,这个时候,本地数据是不会删除的

例如:创建一个容器 ,条件 存在一个容器song

创建容器

docker run -d  -p 3305:3306 -e  MYSQL_ROOT_PASSWORD=12456 -name mysql02 --volumes-form song mysql:5.7

#这样可以实现,两个容器可以同步,是通过--volumes-form 来同步的,其实就是一个拷贝的原理

     

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值