Docker 新手心得

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

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

    495 引用 • 931 回帖
  • NGINX

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

    315 引用 • 547 回帖 • 1 关注

相关帖子

欢迎来到这里!

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

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

    有道理,新年快乐 😄

推荐标签 标签

  • sts
    2 引用 • 2 回帖 • 230 关注
  • 知乎

    知乎是网络问答社区,连接各行各业的用户。用户分享着彼此的知识、经验和见解,为中文互联网源源不断地提供多种多样的信息。

    10 引用 • 66 回帖
  • 机器学习

    机器学习(Machine Learning)是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。

    83 引用 • 37 回帖
  • 招聘

    哪里都缺人,哪里都不缺人。

    188 引用 • 1057 回帖
  • 开源中国

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

    7 引用 • 86 回帖
  • V2Ray
    1 引用 • 15 回帖 • 1 关注
  • 思源笔记

    思源笔记是一款隐私优先的个人知识管理系统,支持完全离线使用,同时也支持端到端加密同步。

    融合块、大纲和双向链接,重构你的思维。

    25438 引用 • 105216 回帖
  • Postman

    Postman 是一款简单好用的 HTTP API 调试工具。

    4 引用 • 3 回帖 • 3 关注
  • Eclipse

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

    76 引用 • 258 回帖 • 628 关注
  • Quicker

    Quicker 您的指尖工具箱!操作更少,收获更多!

    37 引用 • 157 回帖
  • Gzip

    gzip (GNU zip)是 GNU 自由软件的文件压缩程序。我们在 Linux 中经常会用到后缀为 .gz 的文件,它们就是 Gzip 格式的。现今已经成为互联网上使用非常普遍的一种数据压缩格式,或者说一种文件格式。

    9 引用 • 12 回帖 • 166 关注
  • CloudFoundry

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

    5 引用 • 18 回帖 • 181 关注
  • Sillot

    Insights(注意当前设置 master 为默认分支)

    汐洛彖夲肜矩阵(Sillot T☳Converbenk Matrix),致力于服务智慧新彖乄,具有彖乄驱动、极致优雅、开发者友好的特点。其中汐洛绞架(Sillot-Gibbet)基于自思源笔记(siyuan-note),前身是思源笔记汐洛版(更早是思源笔记汐洛分支),是智慧新录乄终端(多端融合,移动端优先)。

    主仓库地址:Hi-Windom/Sillot

    文档地址:sillot.db.sc.cn

    注意事项:

    1. ⚠️ 汐洛仍在早期开发阶段,尚不稳定
    2. ⚠️ 汐洛并非面向普通用户设计,使用前请了解风险
    3. ⚠️ 汐洛绞架基于思源笔记,开发者尽最大努力与思源笔记保持兼容,但无法实现 100% 兼容
    29 引用 • 25 回帖 • 117 关注
  • Wide

    Wide 是一款基于 Web 的 Go 语言 IDE。通过浏览器就可以进行 Go 开发,并有代码自动完成、查看表达式、编译反馈、Lint、实时结果输出等功能。

    欢迎访问我们运维的实例: https://wide.b3log.org

    30 引用 • 218 回帖 • 636 关注
  • FFmpeg

    FFmpeg 是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。

    23 引用 • 32 回帖 • 1 关注
  • 反馈

    Communication channel for makers and users.

    121 引用 • 907 回帖 • 273 关注
  • 分享

    有什么新发现就分享给大家吧!

    248 引用 • 1794 回帖
  • LaTeX

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

    12 引用 • 54 回帖 • 8 关注
  • GitHub

    GitHub 于 2008 年上线,目前,除了 Git 代码仓库托管及基本的 Web 管理界面以外,还提供了订阅、讨论组、文本渲染、在线文件编辑器、协作图谱(报表)、代码片段分享(Gist)等功能。正因为这些功能所提供的便利,又经过长期的积累,GitHub 的用户活跃度很高,在开源世界里享有深远的声望,并形成了社交化编程文化(Social Coding)。

    210 引用 • 2040 回帖
  • 黑曜石

    黑曜石是一款强大的知识库工具,支持本地 Markdown 文件编辑,支持双向链接和关系图。

    A second brain, for you, forever.

    24 引用 • 241 回帖
  • Flume

    Flume 是一套分布式的、可靠的,可用于有效地收集、聚合和搬运大量日志数据的服务架构。

    9 引用 • 6 回帖 • 655 关注
  • MyBatis

    MyBatis 本是 Apache 软件基金会 的一个开源项目 iBatis,2010 年这个项目由 Apache 软件基金会迁移到了 google code,并且改名为 MyBatis ,2013 年 11 月再次迁移到了 GitHub。

    173 引用 • 414 回帖 • 363 关注
  • JVM

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

    180 引用 • 120 回帖
  • InfluxDB

    InfluxDB 是一个开源的没有外部依赖的时间序列数据库。适用于记录度量,事件及实时分析。

    2 引用 • 91 关注
  • 博客

    记录并分享人生的经历。

    273 引用 • 2388 回帖
  • Ubuntu

    Ubuntu(友帮拓、优般图、乌班图)是一个以桌面应用为主的 Linux 操作系统,其名称来自非洲南部祖鲁语或豪萨语的“ubuntu”一词,意思是“人性”、“我的存在是因为大家的存在”,是非洲传统的一种价值观,类似华人社会的“仁爱”思想。Ubuntu 的目标在于为一般用户提供一个最新的、同时又相当稳定的主要由自由软件构建而成的操作系统。

    127 引用 • 169 回帖
  • etcd

    etcd 是一个分布式、高可用的 key-value 数据存储,专门用于在分布式系统中保存关键数据。

    6 引用 • 26 回帖 • 544 关注