天煜科技网站建设,企业公示信息查询系统 江苏,视频网站搭建源码,腾讯企业邮箱登录入口免费版目录
1.初识Docker
1.1.什么是Docker
1.1.1.应用部署的环境问题
1.1.2.Docker解决依赖兼容问题
1.1.3.Docker解决操作系统环境差异
1.1.4.小结
1.2.Docker和虚拟机的区别
1.3.Docker架构
1.3.1.镜像和容器
1.3.2.DockerHub
1.3.3.Docker架构
1.3.4.小结
1.4.安装D…目录
1.初识Docker
1.1.什么是Docker
1.1.1.应用部署的环境问题
1.1.2.Docker解决依赖兼容问题
1.1.3.Docker解决操作系统环境差异
1.1.4.小结
1.2.Docker和虚拟机的区别
1.3.Docker架构
1.3.1.镜像和容器
1.3.2.DockerHub
1.3.3.Docker架构
1.3.4.小结
1.4.安装Docker
2.Docker的基本操作
2.1.镜像操作
2.1.1.镜像名称
2.1.2.镜像命令
2.1.3.案例1-拉取、查看镜像
2.1.4.案例2-保存、导入镜像
2.1.5.练习
1.初识Docker
1.1.什么是Docker
微服务虽然具备各种各样的优势但服务的拆分通用给部署带来了很大的麻烦。 分布式系统中依赖的组件非常多不同组件之间部署时往往会产生一些冲突。 在数百上千台服务中重复部署环境不一定一致会遇到各种问题 1.1.1.应用部署的环境问题
大型项目组件较多运行环境也较为复杂部署时会碰到一些问题 依赖关系复杂容易出现兼容性问题 开发、测试、生产环境有差异 例如一个项目中部署时需要依赖于node.js、Redis、RabbitMQ、MySQL等这些服务部署时所需要的函数库、依赖项各不相同甚至会有冲突。给部署带来了极大的困难。 1.1.2.Docker解决依赖兼容问题
而Docker确巧妙的解决了这些问题Docker是如何实现的呢
Docker为了解决依赖的兼容问题的采用了两个手段 将应用的Libs函数库、Deps依赖、配置与应用一起打包 将每个应用放到一个隔离容器去运行避免互相干扰 这样打包好的应用包中既包含应用本身也保护应用所需要的Libs、Deps无需再操作系统上安装这些自然就不存在不同应用之间的兼容问题了。 虽然解决了不同应用的兼容问题但是开发、测试等环境会存在差异操作系统版本也会有差异怎么解决这些问题呢 1.1.3.Docker解决操作系统环境差异
要解决不同操作系统环境差异问题必须先了解操作系统结构。以一个Ubuntu操作系统为例结构如下 结构包括 计算机硬件例如CPU、内存、磁盘等 系统内核所有Linux发行版的内核都是Linux例如CentOS、Ubuntu、Fedora等。内核可以与计算机硬件交互对外提供内核指令用于操作计算机硬件。 系统应用操作系统本身提供的应用、函数库。这些函数库是对内核指令的封装使用更加方便。 应用于计算机交互的流程如下
1应用调用操作系统应用函数库实现各种功能
2系统函数库是对内核指令集的封装会调用内核指令
3内核指令操作计算机硬件 Ubuntu和CentOSpringBoot都是基于Linux内核无非是系统应用不同提供的函数库有差异 此时如果将一个Ubuntu版本的MySQL应用安装到CentOS系统MySQL在调用Ubuntu函数库时会发现找不到或者不匹配就会报错了 Docker如何解决不同系统环境的问题 Docker将用户程序与所需要调用的系统(比如Ubuntu)函数库一起打包 Docker运行到不同操作系统时直接基于打包的函数库借助于操作系统的Linux内核来运行
如图 1.1.4.小结 Docker如何解决大型项目依赖关系复杂不同组件依赖的兼容性问题 Docker允许开发中将应用、依赖、函数库、配置一起打包形成可移植镜像 Docker应用运行在容器中使用沙箱机制相互隔离 Docker如何解决开发、测试、生产环境有差异的问题 Docker镜像中包含完整运行环境包括系统函数库仅依赖系统的Linux内核因此可以在任意Linux操作系统上运行 Docker是一个快速交付应用、运行应用的技术具备下列优势 可以将程序及其依赖、运行环境一起打包为一个镜像可以迁移到任意Linux操作系统 运行时利用沙箱机制形成隔离容器各个应用互不干扰 启动、移除都可以通过一行命令完成方便快捷 1.2.Docker和虚拟机的区别
Docker可以让一个应用在任何操作系统中非常方便的运行。而以前我们接触的虚拟机也能在一个操作系统中运行另外一个操作系统保护系统中的任何应用。 两者有什么差异呢 虚拟机virtual machine是在操作系统中模拟硬件设备然后运行另一个操作系统比如在 Windows 系统里面运行 Ubuntu 系统这样就可以运行任意的Ubuntu应用了。
Docker仅仅是封装函数库并没有模拟完整的操作系统如图 对比来看 小结
Docker和虚拟机的差异 docker是一个系统进程虚拟机是在操作系统中的操作系统 docker体积小、启动速度快、性能好虚拟机体积大、启动速度慢、性能一般 1.3.Docker架构 1.3.1.镜像和容器
Docker中有几个重要的概念
镜像ImageDocker将应用程序及其所需的依赖、函数库、环境、配置等文件打包在一起称为镜像。
容器Container镜像中的应用程序运行后形成的进程就是容器只是Docker会给容器进程做隔离对外不可见。 一切应用最终都是代码组成都是硬盘中的一个个的字节形成的文件。只有运行时才会加载到内存形成进程。 而镜像就是把一个应用在硬盘上的文件、及其运行环境、部分系统函数库文件一起打包形成的文件包。这个文件包是只读的。
容器呢就是将这些文件中编写的程序、函数加载到内存中允许形成进程只不过要隔离起来。因此一个镜像可以启动多次形成多个容器进程。 例如你下载了一个QQ如果我们将QQ在磁盘上的运行文件及其运行的操作系统依赖打包形成QQ镜像。然后你可以启动多次双开、甚至三开QQ跟多个妹子聊天。 1.3.2.DockerHub
开源应用程序非常多打包这些应用往往是重复的劳动。为了避免这些重复劳动人们就会将自己打包的应用镜像例如Redis、MySQL镜像放到网络上共享使用就像GitHub的代码共享一样。 DockerHubDockerHub是一个官方的Docker镜像的托管平台。这样的平台称为Docker Registry。 国内也有类似于DockerHub 的公开服务比如 网易云镜像服务、阿里云镜像库等。 我们一方面可以将自己的镜像共享到DockerHub另一方面也可以从DockerHub拉取镜像 1.3.3.Docker架构
我们要使用Docker来操作镜像、容器就必须要安装Docker。
Docker是一个CS架构的程序由两部分组成 服务端(server)Docker守护进程负责处理Docker指令管理镜像、容器等 客户端(client)通过命令或RestAPI向Docker服务端发送指令。可以在本地或远程向服务端发送指令。 如图 1.3.4.小结 镜像 将应用程序及其依赖、环境、配置打包在一起
容器 镜像运行起来就是容器一个镜像可以运行多个容器
Docker结构 服务端接收命令或远程请求操作镜像或容器 客户端发送命令或者请求到Docker服务端
DockerHub 一个镜像托管的服务器类似的还有阿里云镜像服务统称为DockerRegistry 1.4.安装Docker
企业部署一般都是采用Linux操作系统而其中又数CentOS发行版占比最多因此我们在CentOS下安装Docker。参考课前资料中的文档 2.Docker的基本操作
2.1.镜像操作 2.1.1.镜像名称
首先来看下镜像的名称组成 镜名称一般分两部分组成[repository]:[tag]。 在没有指定tag时默认是latest代表最新版本的镜像
如图 这里的mysql就是repository5.7就是tag合一起就是镜像名称代表5.7版本的MySQL镜像。 2.1.2.镜像命令
常见的镜像操作命令如图 2.1.3.案例1-拉取、查看镜像
需求从DockerHub中拉取一个nginx镜像并查看
1首先去镜像仓库搜索nginx镜像比如DockerHub: 2根据查看到的镜像名称拉取自己需要的镜像通过命令docker pull nginx 3通过命令docker images 查看拉取到的镜像 2.1.4.案例2-保存、导入镜像
需求利用docker save将nginx镜像导出磁盘然后再通过load加载回来
1利用docker xx --help命令查看docker save和docker load的语法
例如查看save命令用法可以输入命令
docker save --help
结果 命令格式
docker save -o [保存的目标文件名称] [镜像名称] 2使用docker save导出镜像到磁盘
运行命令
docker save -o nginx.tar nginx:latest
结果如图 3使用docker load加载镜像
先删除本地的nginx镜像
docker rmi nginx:latest 然后运行命令加载本地文件
docker load -i nginx.tar
结果 2.1.5.练习
需求去DockerHub搜索并拉取一个Redis镜像
目标
1去DockerHub搜索Redis镜像
2查看Redis镜像的名称和版本
3利用docker pull命令拉取镜像
4利用docker save命令将 redis:latest打包为一个redis.tar包
5利用docker rmi 删除本地的redis:latest
6利用docker load 重新加载 redis.tar文件 我的博客即将同步至腾讯云开发者社区邀请大家一同入驻https://cloud.tencent.com/developer/support-plan?invite_code214l1c26zd28k