人们只有在经历过诸多痛苦之后,才会相信这“缘分”的存在。
而所有的“缘分”,只不过是事物发展的必然结果罢了。

前言

在生产环境配置日益复杂的今天,一套统一的、可移植的环境可能是很多从业人员梦寐以求的。所谓“需求引领市场”,在需求的催动下,解决方案的诞生也只是时间问题而已。

开发测试的苦

    1. 搭环境
    1. 换电脑
    1. 写文档
    1. 搞适配

所有程序代码的执行都需要依赖于具体的系统环境,所以,在项目开发之初,搭建相应的开发环境是必不可少的步骤。任何不以环境为根据的代码开发都是耍流氓。

如果是一开始就跟着项目走的话,那还好,至少环境都是逐步完善过来的。但要是中途加入的话,遇到复杂项目,那就别提了,说多了都是泪,光一个环境搭建都能搞得你腰酸背痛外加腿抽筋。

本人亲历:在项目做到一大半的时候,被借调去支援其他项目,历时大概三个月左右。回来后的状况可以用一句话来概括——一顿操作猛如虎,一看结果二百五!啥?!单点登录?时候加的?PG库,怎么来的…配!配!配!当项目终于能正常跑起来的时候,我脑海中只有一个念头:项目别三月,见面不相识!

哎,听说最近有种新技术挺火的…试问你能忍得了这诱惑?我只相信,没有不喜欢“偷腥”的程序猿,忍得住才怪了(手动白眼)。又到了搭环境的时候了,左手npm,右手brew,还有什么搞不定的,“偷腥”成功的成就感那是相当爆棚啊!

等等,先别急着兴奋,骚年!我且问你两个问题:

- 1. 你主机中现在装了多少包?
- 2. 有同事要跟你协同开发,你怎么给他搭建出一个跟你这一模一样的环境?

嘿,我这主机中各种各样的包和服务都有,具体数目我都数不过来(一脸嘚瑟样)!至于协同开发,那还不简单,我写一个文档,只要按照文档一步步走下去,保证能配置出来!再或者,我配置一个虚拟机,有谁需要开发环境,我只要给他拷出一份虚拟机镜像不就完了。

嗯,我且不怀疑你永远能及时更新文档的毅力,也不质疑有些公司的电脑配置,在运行虚拟机之后,除了卡顿不知道还能干啥…我只想问你:你不觉得你主机目前的状态有点类似于“大杂烩”吗?说好的程序猿的条理性呢?有了条理,我们至少还能当斑马(搬码),没了条理,那只能作一团乱麻了!

运维管理的累

  1. 易出错
  2. 不一致
  3. 启动杂
  4. 效率低

作为运维人员,最常听到的一句话是什么?要我来说,绝对是“在我这里好好的,到你那里怎么就不行了呢?”最常说的一句话是什么?我想大概或许也是这句吧。

累死累活、加班加点地才搞定了部署的问题,还没来得及歇一口气,又有新的补丁包发过来了。得,还得拼命!

很多运维人员的真实写照大概是:不是在调环境,就是在调环境的路上。

出路

由于各种各样的原因,我们常常会把一件脑力活给干成体力活。愉悦感成就感没了不说,还得搭上黑眼圈和“地中海”。

直到这时,我们或许会感慨:还是”CV 大法“好!

古话说:穷则变,变则通。人啊,只有被逼到一定地步了,才会想着去改变,寻找出路,安逸的环境基本不可能滋养出”思变“的野心和欲望。眼看这体力跟不上了,头顶的光芒越发耀眼了,就知道该到了寻求改变的时候了。

那到底有没有”一次配置,终生受益“的解决方案呢?

虚拟机

首先,最容易想到的和接触最多的非虚拟机莫属。

虚拟机(virtual machine)就是带环境安装的一种解决方案。它可以在一种操作系统里面运行另一种操作系统,比如在 Windows 系统里面运行 Linux 系统。应用程序对此毫无感知,因为虚拟机看上去跟真实系统一模一样,而对于底层系统来说,虚拟机就是一个普通文件,不需要了就删掉,对其他部分毫无影响。

虽然用户可以通过虚拟机还原软件的原始环境。但是,这个方案有几个缺点。

(1)资源占用多

虚拟机会独占一部分内存和硬盘空间。它运行的时候,其他程序就不能使用这些资源了。哪怕虚拟机里面的应用程序,真正使用的内存只有 1MB,虚拟机依然需要几百 MB 的内存才能运行。

(2)冗余步骤多

虚拟机是完整的操作系统,一些系统级别的操作步骤,往往无法跳过,比如用户登录。

(3)启动慢

启动操作系统需要多久,启动虚拟机就需要多久。可能要等几分钟,应用程序才能真正运行。

既然虚拟机存在这么多缺点,那还有没有更好的解决方案呢?还真有,那就是 Docker 技术。

一念缘起,我与 Docker 的故事从此开始……

初识 Docker

就因为这样一个念头,我懵懵懂懂的走进了 Docker 的世界。

Docker 是什么?

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux 或Windows 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。总结一下就是:

  • Docker 是一个开源的软件部署解决方案;
  • Docker 也是轻量级的应用容器框架;
  • Docker 可以打包、发布、运行任何的应用。

Docker 的组成

一个完整的 Docker 由以下几个部分组成:

  1. DockerClient客户端
  2. Docker Daemon守护进程
  3. Docker Image镜像
  4. DockerContainer容器

Docker 的作用

Docker 的主要用途,目前有三大类。

**(1)提供一次性的环境。**比如,本地测试他人的软件、持续集成的时候提供单元测试和构建的环境。

**(2)提供弹性的云服务。**因为 Docker 容器可以随开随关,很适合动态扩容和缩容。

**(3)组建微服务架构。**通过多个容器,一台机器可以跑多个服务,因此在本机就可以模拟出微服务架构。

总结

以上就是我和 Docker “结识”的过程,以及对 Docker 的简单认知,也欢迎大家分享自己和 Docker 结缘的过程。

~
本文完,感谢阅读!

~

学习有趣的知识,结识有趣的朋友,塑造有趣的灵魂!

大家好,我是〖编程三昧〗的作者 隐逸王,我的公众号是『编程三昧』,欢迎关注,希望大家多多指教!

你来,怀揣期望,我有墨香相迎! 你归,无论得失,唯以余韵相赠!

知识与技能并重,内力和外功兼修,理论和实践两手都要抓、两手都要硬!

Docker 系列 _ 01_ 一念缘起相关推荐

  1. 调音台docker教程_威联通Docker教程 篇二:三分钟安装精美的音乐播放器 MusicPlayer!Container Station系列教程!...

    威联通Docker教程 篇二:三分钟安装精美的音乐播放器 MusicPlayer!Container Station系列教程! 2020-04-15 11:01:02 67点赞 529收藏 47评论 ...

  2. Docker系列 七. Docker 安装Jenkins

    Docker系列 七. Docker 安装Jenkins Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集 ...

  3. Docker系列五~docker安装php-fpm

    Docker系列五 docker安装php-fpm 访问PHP镜像库地址: https://hub.docker.com/_/php?tab=tags 选择合适的版本 php-fpm镜像主要是提供ph ...

  4. 自己动手写Docker系列 -- 5.7实现通过容器制作镜像

    简介 在上篇中我们实现了rm命令,删除存在的容器,本篇中,将完善之前的文件系统隔离,实现容器与容器之间的文件系统隔离 源码说明 同时放到了Gitee和Github上,都可进行获取 Gitee: htt ...

  5. Docker系列 搭建个人云盘服务nextcloud

    转自我的个人博客https://blognas.hwb0307.com.欢迎关注! 前言 虽然我们前面介绍了图床之类的Docker应用,但其实云盘服务才是更加贴近大众生活的Docker应用. Next ...

  6. Docker系列 WordPress系列 国服最强博客看板娘没有之一

    转自我的个人博客https://blognas.hwb0307.com.欢迎关注! 前言 在<Docker系列 WordPress系列 特效>教程中,你应该已经学会怎么使用一个CDN看板娘 ...

  7. Docker系列 六. Docker 安装 Redis

    Docker 安装 Redis Redis 是一个开源的使用 ANSI C 语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value 的 NoSQL 数据库,并提供多种语言的 API . ...

  8. Docker系列 四.Docker部署SpringBoot

    四.Docker部署SpringBoot 环境&工具: 阿里云轻量级服务器.CentOS 7系统.FinalShell(其他连接客户端也可以).IDEA 1. 创建springboot项目 这 ...

  9. Docker系列 二. Docker 安装 Nginx

    Docker 安装 Nginx Nginx 是一个高性能的 HTTP 和反向代理 web 服务器,同时也提供了 IMAP/POP3/SMTP 服务 . 1.查看可用的 Nginx 版本 访问 Ngin ...

最新文章

  1. Ubuntu 16.04.1 LTS上安装电源管理系统TLP
  2. C++对象赋值的四种方式
  3. 不关闭seLinux解决vsftpd服务本地用户不能登录问题(500 OOPS: cannot change directory:/home/***
  4. 密码学基础知识(十)查缺补漏(缺)
  5. android开发之EditText默认hint字体大小
  6. AtCoder Regular Contest 120 C - Swaps 2 线段树模拟
  7. MongoDB学习2——Windows 使用mongo连接数据库
  8. C# WinForm中获取当前程序运行目录的方法
  9. AI算法连载13:统计之数据预处理特征工程
  10. 七种寻址方式(32位地址的寻址方式)
  11. win32开发(对话框启动)
  12. linux 引导原理 pdf,linux深度开发原理.pdf
  13. vue pc移动两个html,vue一套代码适应移动端,pc端
  14. nero 刻录一张4g的服务器系统盘大概需要多长时间,刻录系统盘(如何刻录系统盘) 狸窝用户有福了:nero刻录系统盘...
  15. python不定长参数_Python可变长参数
  16. c语言网络时间校准,c语言如何建时间校准来和电脑一致?
  17. 餐厅点菜c语言程序代码,餐馆点菜系统C语言源代码.pdf
  18. 为什么VS2019的解决方案资源管理器中的文件名和文件夹名里的下划线不显示?
  19. 美国计算机专业大学排名世界,美国计算机专业大学排名TOP10
  20. C语言中表示输出类型的格式字符

热门文章

  1. 【分布式】缓存穿透、缓存雪崩,缓存击穿解决方案
  2. Field ‘id‘ doesn‘t have a default value错误解决方法
  3. SQL内部连接3个表?
  4. g90舵机怎么一直在抖_抖音怎么带货?这样做抖音号,抖音小白也能月入10w
  5. 如何进入bios设置U盘启动,u盘安装系统设置启动项的方法
  6. ros开发增加clion常用模板及初始化配置(六)
  7. ros自定义service消息.srv文件中增加自定义.msg消息
  8. 重定向linux编译,linux重定向 - 悟性的个人页面 - OSCHINA - 中文开源技术交流社区...
  9. 如何用c++画图_画图教室 | 绘制Mapping第一步:美团搜索火锅串串香...认真的!...
  10. 怎么调试内存溢出的c++代码_使用jvisualvm排查一次内存溢出(OOM)过程