Docker 新手心得

本贴最后更新于 1740 天前,其中的信息可能已经时移世改

说实话,我之前对于 Docker 的印象并不算太好,觉得这又是一个赶时髦的技术,过不了多久热度就会过去的。不过这学期选了一门企业级服务器导论的课中讲到了关于 Docker 的内容,而且现在 Solo 也大力推荐使用 Docker 进行部署,让我感觉不了解一点关于它的知识好像不太合适。于是就学习了一些相关的内容,并做了一些简单的实践。

首先,我一开始只知道 Docker 是把不同的软件隔离在不同的容器中运行,但是并不知道这样的意义何在。我觉得从我们个人计算机的使用角度来看,不同的软件在操作系统中同时运行并没有什么问题啊,就算是我在阿里云(算是服务器了)里面部署的网站,也是一堆软件直接装在一个操作系统上,运行也非常正常,为啥还要专门装到 Docker 里面隔离开来,简直就是莫名其妙嘛。之后在企业级服务器上老师讲了企业级应用的部署发展史,才终于明白 Docker 的意义。课上老师说到最早的时候企业级应用在服务器中的部署和个人计算机中应用的运行差不多,都是一大堆软件同时运行在一个操作系统上。但是后来有人发现这样非常不安全,一但黑客攻破了其中一个软件,他就有可能从这个软件出发获取到整个操作系统的权限,从而控制服务器上的所有软件。而且全部运行在一个操作系统上对于资源的分配也很成问题,有可能一个无关紧要的程序占用了过多的资源,导致另一个重要的程序没法运行了。另外,一个程序崩溃了可能导致整个电脑死机,从而影响到其他程序。于是就出现了虚拟化技术,VMware 就是最典型的例子,它能够实现在一台电脑上同时运行多个虚拟的操作系统,一个操作系统只运行一个程序,这样就大大提高了安全性,就算攻破一个软件也只能获取到那一个虚拟操作系统的权限,而且可以非常方便地管理不同的操作系统分配到的资源大小,就算一个虚拟机死机了也不影响其他虚拟机。但是这个技术也存在一个问题,就是为了运行一个程序需要安装一整个操作系统,而操作系统本身也会占用不少资源,这样就造成了资源的大量浪费。于是就又出现了 Docker 这种技术,也就是容器化的技术。我对 Docker 的理解还不全,尝试说一下,如果有问题欢迎大家指出。Docker 本身充当了应用程序的运行环境,在 Docker 之上运行了各个容器,这些容器相互之间应用了特殊的机制实现了高级别的隔离,就算一个容器崩溃了也不会影响到其他容器。同时因为不需要运行一个个完整的操作系统,因此它和虚拟机相比节省了大量的资源。另外,Docker 安装应用是通过一种特殊的方式即镜像安装,能够做到开箱即用,不需要关注各种乱七八糟的配置,也就是说只要在开发机的 Docker 中能成功运行的镜像,换到另一台机器的 Docker 中就一定能成功运行,而不会因为 jdk 版本或者数据库版本等依赖问题导致无法运行。这个概念有点类似 Java 虚拟机的广告,即“一次编译,到处运行”,但它比 Java 虚拟机做到了更高的层面,任何语言开发的应用只要打包成 Docker 镜像就能到处运行。

下面讲一下如何安装 Docker 并且部署一个 nginx 程序。

先说 Windows 系统。如果使用的是 Win10 以前的版本或者 Win10 家庭版等不支持 Hyper-V 的版本,那么需要通过 Docker Toolbox 来使用 Docker,下载地址:https://github.com/docker/toolbox/releases 。如果是 Win10 专业版及以上版本,那么直接下载 Docker Desktop 即可,下载地址:https://hub.docker.com/?overlay=onboarding 。下载安装完成之后桌面会出现 Docker 的图标,双击即可,这里双击了之后并不会有弹出窗口,但是在右下角托盘图标里面会有一个 Docker is starting 的图标出现。等到图标的提示变成 Docker is running 就代表启动完成了。不过 Windows 环境下的 docker 不太靠谱,很可能卡在 starting 就不动了。

再来说说 Linux 系统。通过 yum install docker 命令就可以直接安装 Docker,非常方便。安装完成后输入 service docker start 就可以让 Docker 运行起来。

安装完成之后可以尝试部署一个 nginx 上去。打开控制台输入 docker run -d --name mynginx -p 80:80 nginx 。这里面的参数的意思分别是:run 代表运行;-d 代表后台运行,即不输出交互信息;--name 代表新建容器的名字,mynginx 就是自己取的容器名;-p 代表容器和本机端口的映射,其中前一个 80 是本机的 80 端口,后一个 80 是容器的;最后面的 nginx 代表 Docker 中央镜像库中的 nginx 镜像。其实本来正规的方法是要先用 docker pull nginx 命令先把镜像拉到本地再 run 的,不过直接 run 它也会自动去拉下来。如果是本机部署的,打开浏览器输入 127.0.0.1 就可以看到 nginx 的初始化页面,如果是云服务器部署的话输入 IP 地址或域名就行。

  • Docker

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的操作系统上。容器完全使用沙箱机制,几乎没有性能开销,可以很容易地在机器和数据中心中运行。

    487 引用 • 908 回帖
  • NGINX

    NGINX 是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。 NGINX 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,第一个公开版本 0.1.0 发布于 2004 年 10 月 4 日。

    311 引用 • 546 回帖 • 4 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • T0UGH

    有道理,新年快乐 😄

推荐标签 标签

  • OAuth

    OAuth 协议为用户资源的授权提供了一个安全的、开放而又简易的标准。与以往的授权方式不同之处是 oAuth 的授权不会使第三方触及到用户的帐号信息(如用户名与密码),即第三方无需使用用户的用户名与密码就可以申请获得该用户资源的授权,因此 oAuth 是安全的。oAuth 是 Open Authorization 的简写。

    36 引用 • 103 回帖 • 10 关注
  • Lute

    Lute 是一款结构化的 Markdown 引擎,支持 Go 和 JavaScript。

    25 引用 • 191 回帖 • 21 关注
  • Pipe

    Pipe 是一款小而美的开源博客平台。Pipe 有着非常活跃的社区,可将文章作为帖子推送到社区,来自社区的回帖将作为博客评论进行联动(具体细节请浏览 B3log 构思 - 分布式社区网络)。

    这是一种全新的网络社区体验,让热爱记录和分享的你不再感到孤单!

    131 引用 • 1114 回帖 • 136 关注
  • 服务

    提供一个服务绝不仅仅是简单的把硬件和软件累加在一起,它包括了服务的可靠性、服务的标准化、以及对服务的监控、维护、技术支持等。

    41 引用 • 24 回帖 • 2 关注
  • DevOps

    DevOps(Development 和 Operations 的组合词)是一组过程、方法与系统的统称,用于促进开发(应用程序/软件工程)、技术运营和质量保障(QA)部门之间的沟通、协作与整合。

    45 引用 • 25 回帖 • 2 关注
  • 开源中国

    开源中国是目前中国最大的开源技术社区。传播开源的理念,推广开源项目,为 IT 开发者提供了一个发现、使用、并交流开源技术的平台。目前开源中国社区已收录超过两万款开源软件。

    7 引用 • 86 回帖
  • 正则表达式

    正则表达式(Regular Expression)使用单个字符串来描述、匹配一系列遵循某个句法规则的字符串。

    31 引用 • 94 回帖 • 1 关注
  • PWL

    组织简介

    用爱发电 (Programming With Love) 是一个以开源精神为核心的民间开源爱好者技术组织,“用爱发电”象征开源与贡献精神,加入组织,代表你将遵守组织的“个人开源爱好者”的各项条款。申请加入:用爱发电组织邀请帖
    用爱发电组织官网:https://programmingwithlove.stackoverflow.wiki/

    用爱发电组织的核心驱动力:

    • 遵守开源守则,体现开源&贡献精神:以分享为目的,拒绝非法牟利。
    • 自我保护:使用适当的 License 保护自己的原创作品。
    • 尊重他人:不以各种理由、各种漏洞进行未经允许的抄袭、散播、洩露;以礼相待,尊重所有对社区做出贡献的开发者;通过他人的分享习得知识,要留下足迹,表示感谢。
    • 热爱编程、热爱学习:加入组织,热爱编程是首当其要的。我们欢迎热爱讨论、分享、提问的朋友,也同样欢迎默默成就的朋友。
    • 倾听:正确并恳切对待、处理问题与建议,及时修复开源项目的 Bug ,及时与反馈者沟通。不抬杠、不无视、不辱骂。
    • 平视:不诋毁、轻视、嘲讽其他开发者,主动提出建议、施以帮助,以和谐为本。只要他人肯努力,你也可能会被昔日小看的人所超越,所以请保持谦虚。
    • 乐观且活跃:你的努力决定了你的高度。不要放弃,多年后回头俯瞰,才会发现自己已经成就往日所仰望的水平。积极地将项目开源,帮助他人学习、改进,自己也会获得相应的提升、成就与成就感。
    1 引用 • 487 回帖
  • TGIF

    Thank God It's Friday! 感谢老天,总算到星期五啦!

    287 引用 • 4484 回帖 • 660 关注
  • OkHttp

    OkHttp 是一款 HTTP & HTTP/2 客户端库,专为 Android 和 Java 应用打造。

    16 引用 • 6 回帖 • 53 关注
  • Scala

    Scala 是一门多范式的编程语言,集成面向对象编程和函数式编程的各种特性。

    13 引用 • 11 回帖 • 115 关注
  • golang

    Go 语言是 Google 推出的一种全新的编程语言,可以在不损失应用程序性能的情况下降低代码的复杂性。谷歌首席软件工程师罗布派克(Rob Pike)说:我们之所以开发 Go,是因为过去 10 多年间软件开发的难度令人沮丧。Go 是谷歌 2009 发布的第二款编程语言。

    497 引用 • 1386 回帖 • 324 关注
  • Gitea

    Gitea 是一个开源社区驱动的轻量级代码托管解决方案,后端采用 Go 编写,采用 MIT 许可证。

    4 引用 • 16 回帖 • 3 关注
  • Kubernetes

    Kubernetes 是 Google 开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理。

    109 引用 • 54 回帖
  • SQLServer

    SQL Server 是由 [微软] 开发和推广的关系数据库管理系统(DBMS),它最初是由 微软、Sybase 和 Ashton-Tate 三家公司共同开发的,并于 1988 年推出了第一个 OS/2 版本。

    19 引用 • 31 回帖
  • 微软

    微软是一家美国跨国科技公司,也是世界 PC 软件开发的先导,由比尔·盖茨与保罗·艾伦创办于 1975 年,公司总部设立在华盛顿州的雷德蒙德(Redmond,邻近西雅图)。以研发、制造、授权和提供广泛的电脑软件服务业务为主。

    8 引用 • 44 回帖 • 1 关注
  • 链书

    链书(Chainbook)是 B3log 开源社区提供的区块链纸质书交易平台,通过 B3T 实现共享激励与价值链。可将你的闲置书籍上架到链书,我们共同构建这个全新的交易平台,让闲置书籍继续发挥它的价值。

    链书社

    链书目前已经下线,也许以后还有计划重制上线。

    14 引用 • 257 回帖
  • GitBook

    GitBook 使您的团队可以轻松编写和维护高质量的文档。 分享知识,提高团队的工作效率,让用户满意。

    3 引用 • 8 回帖
  • 资讯

    资讯是用户因为及时地获得它并利用它而能够在相对短的时间内给自己带来价值的信息,资讯有时效性和地域性。

    54 引用 • 85 回帖
  • Electron

    Electron 基于 Chromium 和 Node.js,让你可以使用 HTML、CSS 和 JavaScript 构建应用。它是一个由 GitHub 及众多贡献者组成的活跃社区共同维护的开源项目,兼容 Mac、Windows 和 Linux,它构建的应用可在这三个操作系统上面运行。

    15 引用 • 136 回帖 • 10 关注
  • Shell

    Shell 脚本与 Windows/Dos 下的批处理相似,也就是用各类命令预先放入到一个文件中,方便一次性执行的一个程序文件,主要是方便管理员进行设置或者管理用的。但是它比 Windows 下的批处理更强大,比用其他编程程序编辑的程序效率更高,因为它使用了 Linux/Unix 下的命令。

    122 引用 • 73 回帖
  • SpaceVim

    SpaceVim 是一个社区驱动的模块化 vim/neovim 配置集合,以模块的方式组织管理插件以
    及相关配置,为不同的语言开发量身定制了相关的开发模块,该模块提供代码自动补全,
    语法检查、格式化、调试、REPL 等特性。用户仅需载入相关语言的模块即可得到一个开箱
    即用的 Vim-IDE。

    3 引用 • 31 回帖 • 83 关注
  • CSDN

    CSDN (Chinese Software Developer Network) 创立于 1999 年,是中国的 IT 社区和服务平台,为中国的软件开发者和 IT 从业者提供知识传播、职业发展、软件开发等全生命周期服务,满足他们在职业发展中学习及共享知识和信息、建立职业发展社交圈、通过软件开发实现技术商业化等刚性需求。

    14 引用 • 155 回帖
  • 程序员

    程序员是从事程序开发、程序维护的专业人员。

    546 引用 • 3531 回帖 • 1 关注
  • DNSPod

    DNSPod 建立于 2006 年 3 月份,是一款免费智能 DNS 产品。 DNSPod 可以为同时有电信、网通、教育网服务器的网站提供智能的解析,让电信用户访问电信的服务器,网通的用户访问网通的服务器,教育网的用户访问教育网的服务器,达到互联互通的效果。

    6 引用 • 26 回帖 • 519 关注
  • 服务器

    服务器,也称伺服器,是提供计算服务的设备。由于服务器需要响应服务请求,并进行处理,因此一般来说服务器应具备承担服务并且保障服务的能力。

    124 引用 • 580 回帖
  • 房星科技

    房星网,我们不和没有钱的程序员谈理想,我们要让程序员又有理想又有钱。我们有雄厚的房地产行业线下资源,遍布昆明全城的 100 家门店、四千地产经纪人是我们坚实的后盾。

    6 引用 • 141 回帖 • 565 关注