代码编织梦想

一.为什么要有Docker

1.一个软件从开发到部署的问题 : 运行环境和配置

2.软件是否可以带环境安装 : 安装时将开发的环境一模一样的复制过来

一款产品从开发到上线,从操作系统,到运行环境,再到应用配置
作为开发 + 运维之间的协作我们需要关心很多东西,这也是很多互联网公司都不得不面对的问题
特别是各种版本的迭代之后,不同版本环境的兼容,对运维人员都是考验
"Docker"之所以发展如此迅速,也是因为它对此给出了一个标准化的解决方案

二.什么是Docker

  • 基于 Go 语言实现的云开源项目
  • docker是一个开源的软件部署解决方案
🎅示例1
你在金鱼店的鱼缸里买一条小金鱼回去,养在家里的盆子里,那么小金鱼有可能水土不服XX,如果你把连鱼带缸的买回去就不会出现这种情况了,因为生存环境没有改变

🎅夸张示例2
如果我们搬家,一般是把家具之类的一件一件的搬到新房子里去,然后到新房子里有重新布置,"Docker"的理念就是直接把房子铲起来放置到新的住址,那么里面的配置都不用动了,直接可以入住
  • 解决了运行环境配置问题软件容器, 方便持续集成并有助于整体发布的容器虚拟化技术

ps : docker理念:一次构建处处运行

三.Docker能做什么

1.运行环境的配置

  • 只需要一次配置好环境,换到别的机子上就可以一键部署好,大大简化了操作

2.虚拟机技术

  • 在一个操作系统之上运行 / 安装另一种操作系统
  • 应用程序, 操作系统和硬件三者之间的关系不变
🎅缺点
1. 资源占用多
2. 冗余步骤多
3. 启动慢(分钟级)

3.容器虚拟化技术

  • 不是模拟一个完整的操作系统, 他是将软件运行所需要的所有资源打包到一个隔离的容器
  • 只需要软件工作所需要的库资源和设置
  • 因此系统变得高效轻量, 且能保证任何环境中软件都能始终如一的运行

容器虚拟化技术

4.虚拟机技术与容器虚拟化技术

  • 不同之处
🎅传统虚拟技术:
	🔰虚拟出一堆硬件, 运行一个完整的操作系统
	🔰然后在该系统上再运行一系列的应用程序

🎅容器虚拟化技术:
    🔰容器内的应用进程直接运行在宿主的内核, 容器内没有机子的内核
    🔰并且没有进行硬件的虚拟,因此更轻便 (只包含业务所需要的环境:"docker"基础镜像就"170M")
    🔰每个容器之间相互隔离, 每个容器都有自己的文件系统, 容器之间不会相互影响, 能区分计算资源

5.底层原理

  • Docker是怎么工作的
Docker是一个Client-Server结构的系统
Docker守护进程运行在主机上,然后通过Socket连接从客户端访问,
守护进程从客户端接受命令并管理运行在主机上的容器
容器,就是一个运行时的环境
  • 为什么 Docker 比 VM 快
🔰docker有着比虚拟机更少的抽象层
由于docker不需要Hypervisor实现硬件资源虚拟化,运行在docker容器上的程序直接使用的都是实际物理机的硬件资源
因此在CPU、内存利用率上docker将会在效率上有明显优势

🔰docker利用的是宿主机的内核,而不像虚拟机在宿主机上再运行一个内核
因此当新建一个容器时,docker不需要和虚拟机一样重新加载这个操作系统内核
进而避免寻找、加载操作系统内核比较费时费资源的过程

🔰当新建个虚拟机时,虚拟机软件需要加载Centos,这个新建过程是"分钟级别的"
docker由于直接利用宿主机的操作系统,则省略了这个个过程因此新建一个docker容器只需要"几秒钟"

6.开发和运维问题解决

Docker理念 :一次构建处处运行

  • 更快的应用交付和部署
🎅传统的应用开发完成后,需要提供一堆安装程序和配置说明文档,安装部署后需根据配置文档进行繁杂的配置才能正常运行

🎅Docker化之后只需要交付少量容器镜像文件,在正式生产环境加载镜像并运行即可,应用安装配置在镜像里已经内置好,大大节省部署配置和测试验证时间
  • 更便捷的升级和扩缩容
🎅随着微服务架构和Docker的发展,大量的应用会通过微服务方式架构,应用的开发构建将变成搭乐高积木一样,每个"Docker容"器将变成一块"积木""应用的升级将变得非常容易"

🎅当现有的容器不足以支撑业务处理时,可通过镜像运行"新的容器进行快速扩容",使应用系统的扩容从原先的天级变成分钟级甚至秒级
  • 更简单的系统运维
🎅应用容器化运行后,生产环境运行的应用可与开发、测试环境的应用"高度一致",容器会将应用程序相关的环境和状态完全封装起来,不会因为底层基础架构和操作系统的不一致性给应用带来影响,产生新的BUG

🎅当出现程序异常时,也可以通过测试环境的相同容器进行快速定位和修复
  • 更高效的计算资源利用
🎅Docker是内核级虚拟化,其不像传统的虚拟化技术一样需要额外的Hypervisor支持,所以在一台物理机上"可以运行很多个容器实例",可大大"提升物理服务器的CPU和内存的利用率"

四.容器的基本组成

1.结构图

Docker结构图

3.镜像 : image

  • 一个只读模板, 一个镜像可以创建出来很多个容器
  • 相当于Python当中类与对象的概念,一个类可以实例化出来许多的 obj

4.容器 : container

  • 独立运行的一个或一组应用, 是由镜像实例化出来的
  • 可以把它看成是一个迷你版的Linux环境, 基础镜像170M (我们装的一般4个多G)
  • 它可以被启动、开始、停止、删除。每个容器都是相互隔离的

5.仓库 : repository

  • 集中存放镜像文件的场所
  • 仓库有两种区分
🎅仓库注册服务器:
	🔰存放着多个仓库
	
🎅仓库:
    🔰 每个仓库包含多个镜像,每个镜像有不同的标签('tag':类似于版本号)
    🔰仓库分为公开仓库(Public)和私有仓库(Private)两种形式
    🔰最大的公开仓库是 "Docker Hub:(https://hub.docker.com/)"

6.总结

  • Docker 本身是一个容器运行载体或称之为管理引擎
  • image 文件生成的容器实例,本身也是一个文件,称为镜像文件
  • 同一个 image 文件,可以生成多个同时运行的容器实例
  • 一个容器运行一种服务,当我们需要的时候,就可以通过docker客户端创建一个对应的运行实例,也就是我们的容器
  • 至于仓库,就是放了一堆镜像的地方,我们可以把镜像发布到仓库中,需要的时候从仓库中拉下来就可以了

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接: https://blog.csdn.net/songhaixing2/article/details/111098472

Dockers 安装-爱代码爱编程

CentOS 7 安装 Docker 官方中文安装参考手册:https://docs.docker-cn.com/engine/installation/linux/docker-ce/centos/#prerequisites 一.先确定是否 Centos 7及以上的版本 cat /etc/redhat-release 二.查看是否 ping

解决Error: failed to normalize chaincode path: ‘go list‘ failed with: goChaincode packaging has failed-爱代码爱编程

问题出现在fabric网络里面使用network.sh创建频道后,在频道里面启动链码时出错 一.关于package的下载,第一个原因是go版本的问题 由于我的ubuntu环境使用默认的sudo apt install golang安装的go环境,版本是1.6的,由于版本过低,目前的一些下载依赖已经不支持,所以要升级golang的版本。升级的方法可以参考的下

WIN10下配置swoole&php7.4的docker镜像流程及资料聚合-爱代码爱编程

前言 在实际编程过程中,经常会遇到线上线下环境不一致,团队中各成员环境有差异的问题,而这些问题通常会占有大量的调试时间,所以如何将环境也像程序代码一样进行配置控制,保证各个环境下的程序运行预期一致。同时,也为了考虑线上灾备相关操作,进行了相关的技术选型,目前成熟的容器化可以提供有效的解决方案,目前我们选择的是docker方案。 以下记录相关操作流程和参考

Dockerfile构建-爱代码爱编程

一.什么是 Dockerfile Dockerfile 是用来构建 Docker 镜像的构建文件, 是由一系列的命令和参数构成的脚本通过指令的方式构建镜像二.构建Dockerfile步骤 编写 Dockerfile 文件docker built 构建镜像docker run 创建容器三.Dockfile 文件的注意事项 每条保留字指令都必须是大写字母

Docker 网络-爱代码爱编程

一.网络基础 Docker 使用到的与 Linux 网络有关的技术分别有:网络名称空间、Veth、Iptables、网桥、路由 1.什么是网络名称空间 为了支持网络协议栈的多个实例,Linux 在网络协议栈中引入了网络名称空间(Network Namespace)这些独立的协议栈被隔离到不同的命名空间中处于不同的命名空间的网络协议栈是完全隔离的,彼此

docker新手入门指南-爱代码爱编程

很多新手可能对docker感觉比较神秘,其实这个类似与一个maven容器,但是比它更加强大,可以支持把一整套环境都打成包放到仓库,其他人如果有安装docker的话,可以直接通过网络连接你仓库镜像,拉下来直接可以运行。 下面我整理下如何在windows 10下安装docker的步骤。 1、安装 Hyper-V 如果是部分的家庭版,可能没这个插件;以下是