Docker 新手心得

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

说实话,我之前对于 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 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的操作系统上。容器完全使用沙箱机制,几乎没有性能开销,可以很容易地在机器和数据中心中运行。

    477 引用 • 901 回帖
  • NGINX

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

    311 引用 • 546 回帖 • 33 关注

相关帖子

欢迎来到这里!

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

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

    有道理,新年快乐 😄

推荐标签 标签

  • GitBook

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

    3 引用 • 8 回帖
  • FlowUs

    FlowUs.息流 个人及团队的新一代生产力工具。

    让复杂的信息管理更轻松、自由、充满创意。

    1 引用
  • Swift

    Swift 是苹果于 2014 年 WWDC(苹果开发者大会)发布的开发语言,可与 Objective-C 共同运行于 Mac OS 和 iOS 平台,用于搭建基于苹果平台的应用程序。

    34 引用 • 37 回帖 • 497 关注
  • PostgreSQL

    PostgreSQL 是一款功能强大的企业级数据库系统,在 BSD 开源许可证下发布。

    22 引用 • 22 回帖 • 1 关注
  • JRebel

    JRebel 是一款 Java 虚拟机插件,它使得 Java 程序员能在不进行重部署的情况下,即时看到代码的改变对一个应用程序带来的影响。

    26 引用 • 78 回帖 • 623 关注
  • LaTeX

    LaTeX(音译“拉泰赫”)是一种基于 ΤΕΧ 的排版系统,由美国计算机学家莱斯利·兰伯特(Leslie Lamport)在 20 世纪 80 年代初期开发,利用这种格式,即使使用者没有排版和程序设计的知识也可以充分发挥由 TeX 所提供的强大功能,能在几天,甚至几小时内生成很多具有书籍质量的印刷品。对于生成复杂表格和数学公式,这一点表现得尤为突出。因此它非常适用于生成高印刷质量的科技和数学类文档。

    9 引用 • 32 回帖 • 161 关注
  • 支付宝

    支付宝是全球领先的独立第三方支付平台,致力于为广大用户提供安全快速的电子支付/网上支付/安全支付/手机支付体验,及转账收款/水电煤缴费/信用卡还款/AA 收款等生活服务应用。

    29 引用 • 347 回帖 • 1 关注
  • CloudFoundry

    Cloud Foundry 是 VMware 推出的业界第一个开源 PaaS 云平台,它支持多种框架、语言、运行时环境、云平台及应用服务,使开发人员能够在几秒钟内进行应用程序的部署和扩展,无需担心任何基础架构的问题。

    5 引用 • 18 回帖 • 154 关注
  • Telegram

    Telegram 是一个非盈利性、基于云端的即时消息服务。它提供了支持各大操作系统平台的开源的客户端,也提供了很多强大的 APIs 给开发者创建自己的客户端和机器人。

    5 引用 • 35 回帖
  • Sym

    Sym 是一款用 Java 实现的现代化社区(论坛/BBS/社交网络/博客)系统平台。

    下一代的社区系统,为未来而构建

    523 引用 • 4581 回帖 • 694 关注
  • 钉钉

    钉钉,专为中国企业打造的免费沟通协同多端平台, 阿里巴巴出品。

    15 引用 • 67 回帖 • 369 关注
  • 游戏

    沉迷游戏伤身,强撸灰飞烟灭。

    169 引用 • 799 回帖 • 3 关注
  • Caddy

    Caddy 是一款默认自动启用 HTTPS 的 HTTP/2 Web 服务器。

    10 引用 • 54 回帖 • 127 关注
  • 导航

    各种网址链接、内容导航。

    37 引用 • 168 回帖 • 1 关注
  • DNSPod

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

    6 引用 • 26 回帖 • 521 关注
  • Openfire

    Openfire 是开源的、基于可拓展通讯和表示协议 (XMPP)、采用 Java 编程语言开发的实时协作服务器。Openfire 的效率很高,单台服务器可支持上万并发用户。

    6 引用 • 7 回帖 • 87 关注
  • Ngui

    Ngui 是一个 GUI 的排版显示引擎和跨平台的 GUI 应用程序开发框架,基于
    Node.js / OpenGL。目标是在此基础上开发 GUI 应用程序可拥有开发 WEB 应用般简单与速度同时兼顾 Native 应用程序的性能与体验。

    7 引用 • 9 回帖 • 345 关注
  • 设计模式

    设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。

    198 引用 • 120 回帖
  • 开源中国

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

    7 引用 • 86 回帖
  • Google

    Google(Google Inc.,NASDAQ:GOOG)是一家美国上市公司(公有股份公司),于 1998 年 9 月 7 日以私有股份公司的形式创立,设计并管理一个互联网搜索引擎。Google 公司的总部称作“Googleplex”,它位于加利福尼亚山景城。Google 目前被公认为是全球规模最大的搜索引擎,它提供了简单易用的免费服务。不作恶(Don't be evil)是谷歌公司的一项非正式的公司口号。

    49 引用 • 192 回帖
  • 博客

    记录并分享人生的经历。

    270 引用 • 2386 回帖
  • Vditor

    Vditor 是一款浏览器端的 Markdown 编辑器,支持所见即所得、即时渲染(类似 Typora)和分屏预览模式。它使用 TypeScript 实现,支持原生 JavaScript、Vue、React 和 Angular。

    314 引用 • 1667 回帖 • 3 关注
  • 锤子科技

    锤子科技(Smartisan)成立于 2012 年 5 月,是一家制造移动互联网终端设备的公司,公司的使命是用完美主义的工匠精神,打造用户体验一流的数码消费类产品(智能手机为主),改善人们的生活质量。

    4 引用 • 31 回帖 • 6 关注
  • JVM

    JVM(Java Virtual Machine)Java 虚拟机是一个微型操作系统,有自己的硬件构架体系,还有相应的指令系统。能够识别 Java 独特的 .class 文件(字节码),能够将这些文件中的信息读取出来,使得 Java 程序只需要生成 Java 虚拟机上的字节码后就能在不同操作系统平台上进行运行。

    180 引用 • 120 回帖
  • 前端

    前端技术一般分为前端设计和前端开发,前端设计可以理解为网站的视觉设计,前端开发则是网站的前台代码实现,包括 HTML、CSS 以及 JavaScript 等。

    247 引用 • 1347 回帖 • 1 关注
  • Eclipse

    Eclipse 是一个开放源代码的、基于 Java 的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。

    75 引用 • 258 回帖 • 624 关注
  • 音乐

    你听到信仰的声音了么?

    59 引用 • 509 回帖