Docker新手心得以及nginx在Docker中的部署

Posted aopstudio

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker新手心得以及nginx在Docker中的部署相关的知识,希望对你有一定的参考价值。

说实话,我之前对于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新手心得以及nginx在Docker中的部署的主要内容,如果未能解决你的问题,请参考以下文章

Docker + Consul + registrator实现服务发现及nginx反向代理

docker-compose命令及yaml文件

zTree的getChangeCheckedNodes()使用心得以及一次性获取zTree的所有节点

docker安装nginx及使用dockfile创建镜像和使用

nginx的docker-compose部署安装及配置

Docker Compose安装使用,及搭建nginx+php+mysql基础应用实例