docker学习笔记 ---每特教育
简介与概述
1.Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
2. Docker的主要目标是‘build ,ship and run any app,anywhere’,也就是说通过对应用程序组件的封装,分发,部署,运行等生命周期的管理。使用户的app(可以是一个web应用程序或者数据库应用等)及其运行环境能够做到‘一次封装,到处运行’。
3.Linux容器技术的出现解决了这个问题。而docker就是基于他的基础上发展过来的。将应用运行到docker容器上面,而docker容器在任何操作系统上都是一致的,这就是实现跨平台跨服务器。只需要一次配置好环境,换到别的机子上就可以一键部署好,大大简化了操作。
4.容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
5.Docker 从 17.03 版本之后分为 CE(Community Edition: 社区版) 和 EE(Enterprise Edition: 企业版),我们用社区版就可以了
Docker实际上就是一个虚拟化轻量级linux服务器,可以解决我们在开发环境中运行配置问题。
为什么要使用
Docker:虚拟化容器技术
Docker主要解决我们开发环境配置迁移的问题。
1.我们现在开发了一个javaweb项目,需要依赖很多环境配置 比如:Tomcat、JDK环境、Nginx、Redis环境等。
2.本地需要安装这些环境Tomcat、JDK环境、Nginx、Redis环境等,在打war包给运维部署在linux服务器,运维人员也需要在linux服务器上安装Tomcat、JDK环境、Nginx、Redis环境。
3.但是有时候可能会发生这些问题:我在本地运行环境没有问题,但是打包到Linux服务器运行总是遇到很多错误,大多数由于一些版本冲突影响。
4.所以在这时候我们就可以使用docker部署和安装软件就非常方便,直接将该springboot项目制作成一个镜像文件,镜像文件中包含jdk版本 tomcat版本信息 直接部署linux即可,减少依赖冲突概率。
看看linux安装mysql
linux下在线安装mysql(完整版)_pgpg8.0com-CSDN博客 在不同的linux内核中安装
Mysql很容易发生版本冲突的问题。
在对比docker安装mysql
docker pull mysql:5.7
docker create --name mysql3308 -e MYSQL_ROOT_PASSWORD=root -p 3308:3306 mysql:5.7
docker最终解决了运行环境配置中的问题。
---镜像文件底层封装好了
使用docker的好处
1.简化配置 安装创建非常的方便
2.代码流水线(Code Pipeline)管理 传统项目部署可能需要经过很多环节,
容易产生版本的依赖冲突问题,Docker给应用提供了一个从开发到上线均一致的环境,让代码的流水线变得简单不少
3.Devops 开发与运维一体化减少沟通的成本 (docker或者是k8s实现)
4.虚拟技术 快速部署
5.弹性扩容
应用场景
1.Web 应用的自动化打包和发布。
2.自动化测试和持续集成、发布。
3.在服务型环境中部署和调整数据库或其他的后台应用。
4.从头编译或者扩展现有的 OpenShift 或 Cloud Foundry 平台来搭建自己的 PaaS 环境。
架构设计原理
三大核心要素:
1.仓库:--专门存放我们的镜像文件,类似于 腾讯管家软件市场、APP软件市场
2.镜像:---类似于安装包,描述运行所需要的环境配置和依赖
Redis镜像、Tomcat镜像
方式来源:
A.Springboot项目(自己创建一个镜像文件)
B.DOCKER hub 仓库下载
3.容器:---运行我们的镜像文件,自己独立的ip和网络信息 虚拟化出一个轻量级的liunx操作系统精简版本
容器: 容器就是镜像运行的实例,容器状态分为:初创建、运行、停止、暂停、
删除, 一个镜像可以创建多个不同的容器。
每个镜像文件都有自己独立ip信息---轻量级的linux服务器 虚拟化
比如:镜像就是类 容器就是实例对象
仓库: 仓库可以简单理解为,专门存储镜像文件仓库, 类似于 谷歌手机市场,统一在
谷歌手机市场下载开发者的安装包。
Docker 公开仓库地址: Docker hub
Docker官方仓库:https://hub.docker.com/ ----访问比较慢
宿主机:当前win7操作系统
cs架构,先是docker pull 发送请求,先检查有没有镜像文件,没有就去DOCKER hub 仓库下载再缓存在本地
Docker pull 从远程docker 官方仓库下载 镜像,到本地,在使用容器运行该镜像。
注意的是:docker官方镜像仓库地址部署在国外,下载镜像可能比较慢,建议配置国内加速镜像
1.需要制作镜像文件(springboot项目)------类似于开发者开发安装应用程序打包
2.需要将我们制作好的镜像文件提交到docker仓库中-----开发者将自己的app应用程序发布安卓手机助手中。
3.本地需要拉去我们docker仓库中下载镜像文件,在交给我们容器运行---用户从app市场中下载安装包运行。
1.在需要制作镜像文件,将该镜像文件发布到docker仓库
docker仓库 dockerhub ----谷歌安卓手机市场 国内加速镜像
阿里云、网易、科大()----360、小米、华为。
1.从docker仓库下载镜像文件-----用户从手机市场中,下载软件。
2.docker运行镜像文件----容器---独立ip访问信息-----端口号码映射
容器与虚拟机的区别
win10 操作系统安装一个虚拟机VMware 虚拟出linux系统
但是VMware开机需要一分钟至少
什么是虚拟机:在一台物理机器上,利用虚拟化技术,虚拟出来多个操作系统,每个操作系统之间是隔离的。
从下到上理解上图:
最下面的一层就是物理机,可以是服务器,设置是一台个人电脑;
电脑上需要安装操作系统,比如我们安装了win10的操作系统;
再往上就是虚拟机软件了,比如我们常用的VirtualBox、VMWare,它们的作用是模拟计算机硬件;
继续向上,就是虚拟机模拟出来的操作系统了;
在虚拟的操作系统中,安装所需的软件、组件等。比如我们需要在虚拟操作系统中安装JDK、Tomcat等;
最后就是具体的应用了,例如部署到Tomcat中。
Docker :Docker是开源的应用容器引擎
依然从下往上看:
最下面两层,概念同上。
往上,可以看做Docker容器的管理器。
依赖和应用都被打包成了Docker镜像。例如,JDK、Tomcat、应用都被打包在了一起,运行在Docker容器里,容器和容器间是隔离的。
但是docker就运行在liunx系统上
可以在liunx系统上运行多个容器,每个容器都有自己的ip、网络
区别:
1.从两者的架构图上看,虚拟机是在硬件级别进行虚拟化,模拟硬件搭建操作系统;而Docker是在操作系统的层面虚拟化,复用操作系统,运行Docker容器。
2.Docker的速度很快,秒级,而虚拟机的速度通常要按分钟计算。
3.Docker所用的资源更少,性能更高。同样一个物理机器,Docker运行的镜像数量远多于虚拟机的数量。
4.虚拟机实现了操作系统之间的隔离,Docker是进程之间的隔离,虚拟机隔离级别更高、安全性方面也更强。
5.虚拟机和Docker各有优势,不存在谁替代掉谁的问题,很多企业都采用物理机上做虚拟机,虚拟机中跑Docker的方式。