- 链接:https://www.bilibili.com/video/BV1og4y1q7M4?p=2(力推,记得一键三连哦)
- 笔记:我是二刷了上面的视频,看第二遍的时候才开始做笔记的
- Docker概述
- Docker安装
- Docker命令
- 镜像命令
- 容器命令
- 操作命令
- …
- Docker镜像
- 容器数据卷
- DockerFile
- Docker网络原理
- IDEA整合Docker
- Docker Compose
- Docker Swarm
- CICD jenkins
docker 其实就是容器化技术的一种,他可以将项目及项目所依赖的运行环境一起打包成一个文件(在docker称为镜像)。这样就解决了生产环境中运行环境与项目开发时所使用环境不一致问题
镜像这个词在虚拟机中也存在过,优势自然也是和虚拟机相比
-
虚拟机
虚拟机的运行空间是宿主机分配的,其运行系统是独立的(在虚拟机上运行系统需要装系统镜像)。虚拟机开机所耗时间是分钟级别的,但其和宿主机的系统是完全隔离的,所以其安全性较高,但其所占用的资源较多。有时我们仅仅只需要在虚拟环境上运行一个或几个项目,如果装一个虚拟机就会造成资源的浪费
-
Docker
- 程序与代码的区别
程序就是运行时的代码 - 镜像(image):
docker的镜像就是一个模版,其就相当于代码,当运行docker镜像时就会产生docker容器,该容器内部就运行着该镜像。一个镜像可以创建多个容器 - 容器(container)
docker的容器就相当于程序,是通过镜像创建的 - 仓库(repository)
用来存放镜像的地方,分为公有仓库(dockerhub)和私有仓库(腾讯云、华为云等)
环境准备
- centos 7
环境查看
安装
- 帮助文档:https://docs.docker.com/engine/install/centos/
docker 配置腾讯云镜像
容器命令
前提: 下载了镜像才能运行容器
常用的其他命令
- 后台启动容器
- 查看日志命令
- 查看容器中的进程信息
- 查看镜像的元数据
- 进入当前正在运行的容器
- 从容器内拷贝文件到主机中
小结
作业
- 配置nginx反向代理
2.安装tomcat
3.部署 es+kibana
安装docker可视化管理界面
安装一个portainer
镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,他包含运行某个软件所需的所有内容,包括代码、运行库、环境变量和配置文件
UnionFS(Linux的联合文件系统)
UnionFS(联合文件系统):Union文件系统是一种分层、轻量级并且高性能的文件系统,他支持对文件系统的修改作为一次提交来一层一层叠加,同时可以将不同的目录挂载到同一个虚拟文件系统。Union文件系统是Docker镜像的基础。镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像
特征:一次同时加载多个文件系统,但外部看来,只能看到一个文件系统,联合加载会把各层文件系统叠加起来,这样最终的文件系统会包含所有的底层文件和目录
Docker镜像加载原理
Docker的镜像实际上由一层一层的文件系统组成,这种层级的文件系统UnionFS。
bootfs(boot file system)主要包含 bootloader和kernel,bootloader主要是引导加载kernel,Linux刚启动时会加载bootfs文件系统,在Docker镜像的最底层是bootfs。当kernel被加载到内存中后 bootfs就被umount了。
分层镜像
特点
Docker镜像都是只读的,当容器启动时,一个新的可写层被加载到镜像的顶部!
这一层就是我们通常说的容器层,容器之下的都叫做镜像层
测试
数据问题
我们的容器产生后,容器内的数据会随着容器的删除而销毁,这样当我们不需要容器时,删除容器就会造成数据的丢失。举个例子,当我们安装了一个mysql容器,容器删除了,mysql的数据就会删除,这样达不到数据可持久化的目的,而docker的数据卷就是解决此类问题
Docker数据卷
它在容器启动时,通过 -v参数指定宿主机的目录和容器目录相连,这样在宿主机中添加文件,容器内也会同步;容器内产生的数据,宿主机中也会产生。这样即使容器被删除,数据依然保留宿主机中。当然容器与容器之间也是可以数据共享的
方式一:直接使用-v 挂载
通过命令查看容器挂载信息
- 匿名挂载
- 具名挂载
所有的docker容器内的卷没有指定目录的情况下都放在:/var/lib/docker/volumes/xxx/_data下。查看刚才的nginx02的卷路径
发现nginx02的文件都在这里,这就是具名挂载!
- 总结
- 拓展
Dockerfile就是用来构建镜像的构建文件!命令脚本!
通过这个脚本可以生成镜像
同步成功!
- 结论
Dockerfile就是用来构建镜像的构建文件!命令脚本!
构建步骤:
- 编写一个dockerfile文件
- docker build 构建一个镜像
- docker run 运行镜像
- docker push 发布镜像(阿里云或者官方仓库)
查看官方镜像(centos为例)
-
访问dockerhub,并搜索centos
创建一个有vim和net-tools的centos镜像
1.编写配置文件
- 通过文件构建镜像
- 运行构建好的镜像,查看是否支持vim和ifconfig命令
- 通过history命令查看构建过程
CMD和ENTRYPOINT的区别
- CMD
- ENTRYPOINT
这就是CMD和ENTRYPOINT的区别
(先留个坑后面在写)
- 准备镜像文件 tomcat压缩包,jdk的压缩包
- 编写Dockerfile文件
- 先登录docker
- 将镜像打标签
- 发布镜像
测试
问题:docker 是如何处理容器网络访问的?
测试容器内外网络是否能ping通
原理
- 现在我们来测试下两个容器能否ping通,发现可以ping通
小结
开发过程中我们有一个这样的场景,我们要连接数据库就得知道它的 ip:端口,如果我们使用docker运行数据库容器,其地址是虚拟的,这样就造成了每次连接数据库就要改ip地址。借鉴springcloud的思想,是否可以根据容器名来访问容器
- 测试
我们直接在docker中通过容器名查看是否能ping通 发现ping不通 - 解决方案
在容器运行时启动使用 --link 指定容器名连接
- 探究容器网络
结论 :–link 原理就是在容器的/etc/hosts中配置了连接目标的ip,其只能单向连接,我们真实开发不建议使用 --link
查看所有的docker网路模式
自定义mynet网络
- 命令 create
- 启动mynet网络的容器
-
结论
我们自定义的网路docker都已经帮我们维护好了对应的关系!! -
好处
redis :不同的集群使用不同的网路,保证集群的安全和健康
mysql:不同的集群使用不同的网路,保证集群的安全和健康
思考
- 重新运行容器
- 测试是否能ping通
解决方案
- 创建网络
- 编写redis集群节点配置
- 运行六个redis容器(其余三个自行运行)
- 创建集群
- 测试是否创建成功
主要是记录了docker的入门的一些基本操作,笔记也是跟着狂神视频敲的,后面会继续学习docker的一些高端操作。