Docker
# Docker
总结:
# Docker与虚拟机
Docker把应用所需要的依赖,函数库甚至操作系统函数库都
一并打包,当应用运行时可以直接调用本地的函数库和内核(也就是linux操作系统内核)交互,那样就不用管是什么系统应用了,这样就形成了跨系统的运行了。
虚拟机:使用Hypervisor技术模拟出一个计算机的各种硬件,在模拟的计算机上安装各种操作系统,然后安装各种应用。当应用执行时,它会以为自己在一台真的电脑上,它会先调用内置的操作系统,然后操作系统和Hypervisor进行交互,然后再把信息传递给外部的操作系统,然后外部操作系统在去操作真实硬件。这样子性能和docker比是会差一点的(docker是直接调用操作系统内核的)。
总结:
# 镜像和容器
# Docker和DockerHub
# Docker架构
总结:
# Docker镜像操作练习
将镜像保存: docker save -o redis.tar redis:latest(-o 代表输出)
希望将这个镜像加载回来 先删除这个镜像
用tar包加载回来
又回来了
# Docker基本操作-容器
一步到位 docker exec -it mr redis-cli (进入一个容器执行一个命令)
# 数据卷
我们利用docker创建了一个新的数据卷html那么docker一定会在这个指定的目录下创建一个真实目录 然后每一个数据卷都和真实目录进行映射
容器在创建的时候可以使用数据卷
这里通过Volumes可以实现容器中的数据和宿主机中真实位置的文件双向绑定
假如容器删了 但是只要挂载的数据卷没删以后的新容器也挂载在这个数据卷上的话以前的数据就还是能用的
# 操作数据卷
案例:
特别要注意的是Mountpoint(挂载点)
删除数据卷
指定删除
总结:
# 挂载数据卷
这个时候我们想知道它挂载的目录在哪里
这说明已经挂载在宿主机的这个位置上了
修改index.html
这样子的话我们就可以在高级编辑器里面修改了
这说明启动指定数据卷的时候 不存在数据卷的时候docker也会自动创建
总结:
# 宿主机目录直接挂载到容器
mkdir(-p多级创建目录)
到这所有的准备工作都完成了
到官网上查看一下运行容器的命令(-e是环境变量)
这里官网的还差了端口和数据卷的挂载我们对它进行改造
-p(容器内端口:宿主机端口) -d(后台运行)--name(容器名指定)
这里我们查看官方文档再继续编辑
数据卷挂载方式对比
宿主机目录挂载优势我自己创建的所以定位很方便 但是需要自己管理
容器内目录挂载优势是自动化 但是不容易定位
总结:
# Dockerfile自定义镜像
我们以后写的微服务代码需要自己制作镜像
# 镜像结构
- 镜像是将应用程序及其需要的系统函数库 环境 配置 依赖打包而成。
我们拿mysql镜像举例
总结:
# 自定义镜像
# 什么是Dockerfile
将课前资料上传到虚拟机里面
这里我们使用dockerfile创建这个镜像
-t(意思是tag) 后面的空格+"."意思是告诉Dockerfile在哪里 因为这里的Dockerfile和当前目录是同级的所以我们直接用一个"."来告知位置
这里它就是在逐步的执行我们的指令了
到这里就完成了
但是我们发现上面这么多的部分实际上都是在安装jdk 构建我们自己的项目的步骤就下面一点点 那么我们是不是可以在一个用上面步骤创建的镜像的基础上使用dockerfile创建自己的镜像呢
这里我们基于java:8-alpine来写dockerfile 这下就非常简单了
总结: