南山做网站哪家专业,为什么网站后台google登陆不了 firefox可以,wordpress登录界面源码,微信公众号免费开通什么是Docker#xff1f;
docker官网
简介与概述 Docker 是一个开源的应用容器引擎#xff0c;基于 Go 语言 并遵从 Apache2.0 协议开源。 Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中#xff0c;然后发布到任何流行的 Linux 机器上#x…什么是Docker
docker官网
简介与概述 Docker 是一个开源的应用容器引擎基于 Go 语言 并遵从 Apache2.0 协议开源。 Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中然后发布到任何流行的 Linux 机器上也可以实现虚拟化。 Docker的主要目标是‘build ship and run any appanywhere’也就是说通过对应用程序组件的封装分发部署运行等生命周期的管理。使用户的app可以是一个web应用程序或者数据库应用等及其运行环境能够做到‘一次封装到处运行’。 Linux容器技术的出现解决了这个问题。而docker就是基于他的基础上发展过来的。将应用运行到docker容器上面而docker容器在任何操作系统上都是一致的这就是实现跨平台跨服务器。只需要一次配置好环境换到别的机子上就可以一键部署好大大简化了操作。 容器是完全使用沙箱机制相互之间不会有任何接口类似 iPhone 的 app,更重要的是容器性能开销极低。 Docker 从 17.03 版本之后分为 CECommunity Edition: 社区版 和 EEEnterprise Edition: 企业版我们用社区版就可以了。 Docker实际上就是一个虚拟化轻量级linux服务器可以解决我们在开发环境中运行配置问题。
为什么需要使用docker
Docker虚拟化容器技术 Docker主要解决我们开发环境配置迁移的问题。 我们现在开发了一个javaweb项目需要依赖很多环境配置 比如Tomcat、JDK环境、Nginx、Redis环境等。 本地需要安装这些环境Tomcat、JDK环境、Nginx、Redis环境等在打war包给运维部署在linux服务器运维人员也需要在linux服务器上安装Tomcat、JDK环境、Nginx、Redis环境。 但是有时候可能会发生这些问题我在本地运行环境没有问题但是打包到Linux服务器运行总是遇到很多错误大多数由于一些版本冲突影响。 所以在这时候我们就可以使用docker部署和安装软件就非常方便直接将该springboot项目制作成一个镜像文件镜像文件中包含jdk版本 tomcat版本信息 直接部署linux即可减少依赖冲突概率。
使用docker的好处
简化配置 安装创建非常的方便代码流水线Code Pipeline管理 传统项目部署可能需要经过很多环节容易产生版本的依赖冲突问题Docker给应用提供了一个从开发到上线均一致的环境让代码的流水线变得简单不少Devops 开发与运维一体化减少沟通的成本 docker或者是k8s实现虚拟技术 快速部署弹性扩容
应用场景
Web 应用的自动化打包和发布。自动化测试和持续集成、发布。在服务型环境中部署和调整数据库或其他的后台应用。从头编译或者扩展现有的 OpenShift 或 Cloud Foundry 平台来搭建自己的 PaaS 环境
容器与虚拟机区别
虚拟机 在一台物理机器上利用虚拟化技术虚拟出来多个操作系统每个操作系统之间是隔离的。 从下到上理解上图
最下面的一层就是物理机可以是服务器设置是一台个人电脑电脑上需要安装操作系统比如我们安装了win10的操作系统再往上就是虚拟机软件了比如我们常用的VirtualBox、VMWare它们的作用是模拟计算机硬件继续向上就是虚拟机模拟出来的操作系统了在虚拟的操作系统中安装所需的软件、组件等。比如我们需要在虚拟操作系统中安装JDK、Tomcat等最后就是具体的应用了例如部署到Tomcat中。
Docker Docker是开源的应用容器引擎 依然从下往上看
最下面两层概念同上。往上可以看做Docker容器的管理器。依赖和应用都被打包成了Docker镜像。例如JDK、Tomcat、应用都被打包在了一起运行在Docker容器里容器和容器间是隔离的。
Docker和虚拟机的区别
从两者的架构图上看虚拟机是在硬件级别进行虚拟化模拟硬件搭建操作系统而Docker是在操作系统的层面虚拟化复用操作系统运行Docker容器。Docker的速度很快秒级而虚拟机的速度通常要按分钟计算。Docker所用的资源更少性能更高。同样一个物理机器Docker运行的镜像数量远多于虚拟机的数量。虚拟机实现了操作系统之间的隔离Docker是进程之间的隔离虚拟机隔离级别更高、安全性方面也更强。虚拟机和Docker各有优势不存在谁替代掉谁的问题很多企业都采用物理机上做虚拟机虚拟机中跑Docker的方式。
特性Docker虚拟机启动速度秒级分钟级别硬盘使用一般为MB一般GB性能接近原生弱于系统支持量单机支持上千个容器一般几十个隔离性完全隔离完全隔离
Docker快速入门
镜像文件
简单理解为就是一个安装包里面包含容器所需要运行的的基础文件和配置信息比如redis镜像、mysql镜像等。
镜像的来源方式
自己做镜像 比如自己开发微服务项目拉取别人制作好的镜像 例如 nginx、mysql、redis等。
容器
容器就是镜像运行的实例容器状态分为初创建、运行、停止、暂停、删除 一个镜像可以创建多个不同的容器。
每个镜像文件都有自己独立ip信息—轻量级的linux服务器 虚拟化
比如镜像就是类 容器就是实例对象
仓库
仓库可以简单理解为专门存储镜像文件仓库 类似于谷歌手机市场统一在谷歌手机市场下载开发者的安装包。
Docker 公开仓库地址 Docker hub hub
Docker常用命令
docker --help 帮助命令docker -version 查看版本信息docker images 查看本地images 镜像缓存REPOSITORY 存储库名称Tag 镜像的标签 不写版本号码 默认下载最新latest镜像IMAGE ID 镜像idCREATED 创建时间SIZE 大小
docker images -a
docker images -q ---只显示镜像的id
docker images --digests ---显示镜像的摘要信息
docker images --no-trunc ---显示完整镜像信息docker rmi 镜像id 删除镜像文件根据id
docker rmi -f hello-world 删除镜像文件根据名称docker search mysql 在仓库里面查找mysql镜像docker pull mysql 默认拉取最新版本的mysqllatest代表最新的版本
docker run 镜像名
docker ps 查看正在运行的容器
docker ps -a 查看运行和已经运行关闭的容器所有
docker stop 容器id 关闭容器
docker start 容器id 启动容器
docker rm 容器id 删除容器
# 查看容器信息
docker ps 获取到容器id
docker inspect 1e07cc5cc78d 查看容器信息
docker运行镜像命令详解 docker run -i保持容器一直运行 -t给容器一个伪终端 -d(后台运行不直接进入容器) –nametomcat9.2给启动容器起名字 -p 8080:8080(宿主:docker容器) tomcat:9.2(启动的容器) 【参数】(加入容器初始化命令)
docker run -dit --name 镜像名 -d -p 端口:端口 镜像名从打包到运行再到停止删除流程
先docker ps查看
然后docker stop 停止
然后docker rm 删除
然后docker images 查看镜像
docker rmi 删除镜像
上传文件 jar包
然后docker build -t 自定义镜像名字 . #后面有逗号
然后运行镜像 #通过 -it 启动的容器有两个特点 一创建就进入容器 exit退出容器 容器就会停止运行 ---交互式容器
#通过 -id 创建的容器 docker exec -it tomcat9.2--name起的名称进入容器 exit退出容器 容器不会停止运行 ---守护式容器docker exec 参数 进入容器docker run 运行原理
docker run mysql
简单描述首先会先从本地获取获取mysql镜像文件如果本地没有该镜像文件则会去阿里云仓库查找该镜像文件如果阿里云仓库也没有该镜像文件则会报错找不到镜像文件。
获取到镜像文件之后直接运行。
详细描述
docker在本机缓存中 mysql镜像文件如果本地存在该镜像文件则以该镜像文件作为模板在容器中运行。如果本地缓存中没有mysql镜像文件 则会从dockerhub 或者加速镜像中查找如果查找不到的话则返回错误找不到该镜像。如果能够查找到该镜像则以该镜像作为模板运行。
每个容器都有自己独立的网络 ip信息 运行成功 就是一个轻量级linux操作系统
进入容器中
# 首先使用下面的命令查看容器IDCONTAINER ID
docker ps -a
# 然后用下面的命令进入容器就可以使用bash命令浏览容器里的文件
docker exec -it [CONTAINER ID] bash
# 有的镜像没有bash命令可以用对应的shell比如sh
docker exec -it [CONTAINER ID] shDocker 镜像原理
镜像是什么
镜像加载的原理 Linux文件系统由bootfs和rootfs两部分组成
bootfs包含bootloader引导加载程序和 kernel内核rootfs root文件系统包含的就是典型 Linux 系统中的/dev/proc/bin/etc等标准目录和文件 不同的linux发行版bootfs基本一样而rootfs不同如ubuntucentos等
Docker镜像底层实际上是有多个不同的联合文件系统组成的 最底层bootfs并使用宿主机的bootfs-复用 第二层root文件系统rootfs,称为base image Union fs 然后再往上可以叠加其他的镜像文件 统一文件系统Union File System技术能够将不同的层整合成一个文件系统为这些层提供了一个统一的视角隐藏多层的存在我们看来只是存在一个文件系统。 因为当我们安装的tomcat镜像大小是600多MB时是因为里面还包含了jdk和centos的镜像而centos镜像复用了宿主机的bootfs 下载的只有rootfs 所以小很多 因为tomcat - jdk父镜像-centos 所以整个向外暴露就是600MB 镜像只读 当从一个镜像启动容器时 docker会在镜像上面加载一个可读可写的文件系统作为容器运行。
Docker Commit
主要作用根据当前容器制作为镜像文件
如
从docker hub中下载一个tomcat8镜像文件运行tomcat8镜像文件 在tomcat的webapps 目录中新增 test文件夹 index.html将当前容器内容根据模板制作为镜像文件
docker commit 提交容器副本使之成为一个新的镜像 命令
docker commit -m“提交的描述信息” -a“作者名” 容器ID 要创建的目标镜像名:[标签名]操作
安装一个tomcat8
docker run -p 8081:8080 tomcat:8进入容器 docker exec -it 3a06b4c779a8 bash 打开文件夹 cd webapps 新建文件夹 mkdir test 新建文件 touch index.html 向文件里面追加内容 echo test Docker Commit index.html 构建镜像 docker commit -mtest Docker Commit -atujr 3a06b4c779a8 test-Docker-Commit:1.0 运行新镜像 docker run -p 8088:8080 test-Docker-Commit:1.0
Docker数据卷
数据卷就是宿主机上的一个文件或目录 当容器目录和数据卷宿主机目录绑定双方修改会立即同步操作一个数据卷可以被多个容器同时挂载
数据卷作用 容器数据的持久化外部机器和容器间接通信容器之间数据交换使用 -v命令。
数据卷添加的方式
容器内与宿主机实现数据的共享 数据卷–添加两种方式
直接命令形式添加 docker run -it -v 宿主机绝对路径目录 : 容器内目录 镜像文件名称Dockerfile方式添加
Docker运行底层原理
首先启动docker systemctl start dockerDocker是一个CS架构的系统docker守护进程运行在主机上然后通过socket连接从客户端访问守护进程从客户端接收命令管理运行在主机上的容器。
ps aux | grep dockerDockerFile 解析
一个镜像文件到底是如何创建
dockerfile 描述出镜像文件需要的一些依赖配置和环境变量 执行命令我们将dockerfile 文件打包成一个镜像文件直接使用我们的容器运行到该镜像文件。
需要手动编写一个dockerfile文件将该dockerfile docker build 自定义成一个镜像文件docker run 运行容器
下一篇单独讲解DockerFile
Docker Compose
Docker Compose 容器编排技术
为什么需要使用Docker Compose
现在我们有一个springboot项目需要依赖Redis、mysql5.7、nginx。如果使用docker原生部署的话则需要安装Redis、mysql5、nginx容器在才可以启动我们springboot项目这样的话部署项的流程非常复杂所以需要引入我们的Docker compose实现容器编排技术。
基本的概念
Docker-Compose项目是Docker官方的开源项目负责实现对Docker容器集群的快速编排。
Docker-Compose将所管理的容器分为三层分别是工程project服务service以及容器container。
开发一个springboot项目—大工程
依赖mysql依赖redis依赖zk等等。 需要在docker-compose.yml 配置项目工程依赖环境配置
Docker-Compose运行目录下的所有文件docker-compose.ymlextends文件或环境变量文件等组成一个工程若无特殊指定工程名即为当前目录名。一个工程当中可包含多个服务每个服务中定义了容器运行的镜像参数依赖。一个服务当中可包括多个容器实例但是Docker-Compose并没有解决负载均衡的问题因此需要借助其它工具实现服务发现及负载均衡。
Docker-Compose的工程配置文件默认为docker-compose.yml可通过环境变量COMPOSE_FILE或-f参数自定义配置文件其定义了多个有依赖关系的服务及每个服务运行的容器。
Compose 中有两个重要的概念
服务 (service) 一个应用的容器实际上可以包括若干运行相同镜像的容器实例。项目 (project) 由一组关联的应用容器组成的一个完整业务单元在 docker-compose.yml 文件中定义。 一个项目可以由多个服务容器关联而成Compose 面向项目进行管理通过子命令对项目中的一组容器进行便捷地生命周期管理。
Compose 项目由 Python 编写实现上调用了 Docker 服务提供的 API 来对容器进行管理。因此只要所操作的平台支持 Docker API就可以在其上利用 Compose 来进行编排管理。
Docker-Compose分成两层
项目层 springboot项目依赖于我们的mysql、redis、nginx等 一个项目是由多个容器组成的。服务层 运行一个镜像的实例
Docker可视化工具使用
Portainer
Portainer是一款Docker可视化管理工具允许我们在网页中方便的查看和管理Docker容器。
要使用Portainer很简单运行下面两条命令即可。这些命令会创建一个Portainer专用的卷然后在8000和9000端口创建容器并运行
docker run -d -p 9000:9000 --nameportainer --restartalways -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer