一、什么是镜像

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

所用的应用,直接打包成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提交为一个镜像!我们以后就使用我们修改过的镜像即可,这就是我们自己修改过的镜像

odoo 镜像制作 doker镜像是什么_服务器

入门基本Docker

 五、容器数据卷

一、什么是容器数据卷

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

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

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

六、使用数据卷

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

docker run it -v 主机目录:容器目录
测试
[root@iZwz9b96gsillkg6v5gbmjZ home]# docker run -it -v /home/ceshi:/home centos /bin/bash

odoo 镜像制作 doker镜像是什么_odoo 镜像制作_02

 七、安装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

假设我们的容器删了

odoo 镜像制作 doker镜像是什么_odoo 镜像制作_03

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

八、具名和匿名挂载

匿名挂载

-v  容器内路径       -P 是水机容器端口
docker run -d -p 端口 --name  nginx01 -v /etc/nginx  nginx
#查看所用的volume(镜像) 的情况
[root@iZwz9b96gsillkg6v5gbmjZ ~]# docker volume ls

odoo 镜像制作 doker镜像是什么_odoo 镜像制作_04

 #这里发现,这种就是匿名挂载,我们在-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 卷名:容器内路径
#查看一下这个有卷名的卷

odoo 镜像制作 doker镜像是什么_运维_05

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

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

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

odoo 镜像制作 doker镜像是什么_运维_06

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

# -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就说明这个路径只能通过宿主机来操作,容器内是无法操作的

odoo 镜像制作 doker镜像是什么_odoo 镜像制作_07

 

odoo 镜像制作 doker镜像是什么_运维_08

九、数据容器卷 

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

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

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

创建容器

docker run -d  -p 3305:3306 -e  MYSQL_ROOT_PASSWORD=12456 -name mysql02 --volumes-form song mysql:5.7
#这样可以实现,两个容器可以同步,是通过--volumes-form 来同步的,其实就是一个拷贝的原理