docker镜像讲解

镜像是什么?

镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于环境开发的软件,它包含运行某个软件所需的内容,包括代码、运行时、库、环境变量和配置文件。
所有的应用,直接打包docker镜像,就可以直接跑起来!
如何得到镜像?
1、从远程仓库下载
2、他人拷贝给你
3、自己制作一个dockerfile

docker镜像加载原理:

Docker镜像加载原理
简单介绍这个图:


image.png

bootfs(boot file system) 主要包含bootloader和kernel, bpotloader 主要是引导加载kernel,当我们加载镜像的时候,会通过bootloader加载kernal,Docker镜像最底层是bootfs,当boot加载完成后整个kernal内核都在内存中了,bootfs也就可以卸载,值得注意的是,bootfs是被所有镜像共用的,许多镜像images都是在base image(rootfs)基础上叠加的

rootfs (root file system),在bootfs之 上.包含的就是典型Linux系统中的/dev, /proc, /bin, /etc等标准目录和文件。rootfs就是 各种不同的操作系统发行版,比如Ubuntu, Centos等等 。

分层理解


image.png

真正干活的是docker上的容器,不同容器都有一个共同的镜像,这个镜像有不同层级,每个层级都有自己的内容,可以共用,docker根据不同的需求来叠加镜像,从而对外暴露一个整体的镜像,每个容器都是精简版的linux系统,bootfs相当于鲸鱼的背,各容器内核kernal共用

image.png
如何提交自己的镜像?

commit镜像

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

  docker commit -m='提交的描述信息'  -a='作者'  容器id  目标镜像名:TAG
实战测试:
#启动一个默认的tomcat
#发现这个默认的tomcat是没有webapps应用,镜像的原因,官方默认的tomcat webapps下面是没有文件的!
#我自己手动拷贝进去了基本的文件
#将我们操作过的容器通过commit 提交作为一个镜像!我们以后就可以使用改动过的镜像就可以了
 docker commit -a='zhangjicheng' -m='add webapps app' cb56c60b02a9  tomcat1.0
image.png

学习方式说明:理解概念,但是一定要实践。最后实践和理论相结合一次搞定这个知识!

容器数据卷

什么是容器数据卷?

docker理念回顾

将应用和环境打包成一个镜像!
数据?如果数据都在容器中那么我们的容器删除数据都会丢失!需求:数据可以持久化
Mysql ,容器删了,删库跑路!需求:Mysql 数据可以保存在本地!
容器之间可以有一个数据共享的技术,docker 容器中产生的数据,同步到本地!
这就是卷技术!目录的挂载,将我们容器内的目录,挂载到linux上面!


image.png

总结一句话:容器的持久化和同步操作!容器间也是可以数据共享的!

使用容器卷

方式一:直接使用命令来挂载 -v
###docker run -it -v  主机目录,容器内目录
docker run -it -v /home/ceshi:/home centos /bin/bash #启动centos镜像
docker inspect b5b85562ddfd #进入容器内部
可以看到具体的卷是如何挂载的
image.png

测试一下文件的同步:
容器内添加一个test.java


image.png

容器外部:


image.png

注意:这个卷的同步是双向同步的;外部修改内部也会同步!即使容器是停止的!
好处:我们以后只需要修改在本地的文件即可,容器内就会自动同步!

实战:安装Mysql

1、获取镜像: docker pull mysql:5.7
2、运行容器并挂载文件路径; 安装mysql是需要配置密码的,这是需要注意的
官方的一个测试:#-e 配置文件

-d:后台运行
-p:端口映射
-v:卷挂载
-e:环境配置
--name:容器名字
[root@VM-0-11-centos ceshi]# docker run -d -p 3306:3306 -v /home/mysql/config:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql001 mysql:5.7


image.png

如果出现启动失败端口映射错误的话:

netstat -tanlp
sudo kill 进程号

查看占用3306端口的进程并杀掉这个进程

启动成功之后;测试一下外部链接内部容器mysql:
说明:DataGrip链接mysql过程 :
先链接打服务器的 3306端口----3306和容器内的3306映射,这个时候我们就可以链接上了


image.png

验证交互:


image.png

image.png

注意:假设我们将容器删除。我们挂载到本地的数据卷依旧没有丢失,这就实现了容器数据持久化功能!

具名和匿名挂载

匿名挂载

-v 容器路径!

docker run -d - P --name nginx01 -v /etc/nginx nginx

查看所有的卷的情况

docker volume ls

image.png

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

具名挂载

docker run -d -P --name nginx002 -v juming-nginx:/etc/nginx nginx


image.png

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

查看一下这个卷 docker volume inspect 卷名 #进入到这个卷里面


image.png

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

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

如何确定是具名挂载还是匿名挂载?还是指定路径挂载?

-v 容器内路径 #匿名挂载
-v 卷名:容器内路径 #具名挂载
-v /宿主机路径 :容器内路径 #指定路径挂载!

扩展:

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

ro 只能读
rw 可读可写

一旦设置了权限 容器对我们挂载出来的容器就有了限定了!

docker run -d -P --name nginx002 -v juming-nginx:/etc/nginx :ro nginx
docker run -d -P --name nginx002 -v juming-nginx:/etc/nginx :rw nginx

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

初识Dockerfile

Dockerfie 就是用来构建docker镜像的构建文件!命令脚本!先体验一下
通过这个脚本可以生成镜像,镜像是一层一层的,脚本命令也是一层一层的


image.png

步骤:

1、创建一个dockerfile文件,名字可以随机 建议dockerfile
2、文件中的内容 指令(大写) 参数;这里的每个命令都镜像的一层!

FROM centos
VOLUME ["/volume01","/volume02"] #匿名挂载
CMD echo "**********make***********"
CMD /bin/bash
3、执行命令:docker build -f /home/docker-test-volume/dockerfile -t kuangshen/centos .

测试:启动一下我们自己创建的容器:

image.png

查看挂载文件是否存在:



容器内新建test.txt文件:


image.png

容器外同步:

这种方法我们未来使用的会非常的多,因为我们通常会构建自己的镜像!
假设构建镜像时候没挂载卷,要手动挂载 -v 卷名:容器内路径!

数据卷容器

两个mysql 甚至多个mysql数据共享


image.png

启动3个容器来测试一下

image.png

image.png

在docker01上创建文件 docker02上也同步验证:


image.png

image.png

image.png

通过--volumes -from 数据卷 就可以实现多个容器数据共享;数据共享只要有一个容器没删除,数据共享的文件就不会丢失!

image.png

多个mysql可实现数据共享

docker run -d -p 3306:3306 -v /home/mysql/config:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql001 mysql:5.7
docker run -d -p 3336:3306 -e MYSQL_ROOT_PASSWORD=123456 --name mysql02 --volumes -from mysql001 mysql:5.7

这个时候,可以实现两个容器同步!

结论:

容器之间配置信息的传递,数据卷容器的生命周期一直持续到没有容器使用为止。但是一旦你持久化到了本地,这个时候,本地的数据是不会删除的!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,490评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,581评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,830评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,957评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,974评论 6 393
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,754评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,464评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,357评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,847评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,995评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,137评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,819评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,482评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,023评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,149评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,409评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,086评论 2 355

推荐阅读更多精彩内容

  • Docker之安装[//www.greatytc.com/p/291673f20036]Docker之常...
    ljchengx阅读 332评论 0 1
  • 深入浅出Docker Docker概述 基于GO语言开发 Docker的思想来自于集装箱。Docker通过隔离机...
    summerbythesea阅读 408评论 0 0
  • 镜像是什么镜像是一种轻量级、可执行的独立软件保,用来打包软件运行环境和基于运行环境开发的软件,他包含运行某 个软件...
    青竹心_zxx阅读 466评论 0 0
  • 转载自:黑马程序员java课程 一、系统发展趋势:实体机——>虚拟机-——>容器 二、Docker简介 1. Do...
    ThompsonHen阅读 275评论 0 0
  • 一篇文章学会docker docker安装 docker在线安装 1.更新yum到最新 2.卸载旧版本 3.安装需...
    饶一熊阅读 770评论 0 1