上面头Q提升单机性能Q下面箭_(d)(x)提升隔离?/div>
但换个角度看Q进E比容器性能更好Q容器性能比虚拟机性能更佳。原因很单,隔离性更高,在每一个上下文中就需要运行更多的东西Q从而拖慢速度。选择一个隔L的q程Q实际就是决定你对要q行q程的信L多少的过E?- 它会(x)不会(x)d扰其他的q程Q如q行的进E都是自q亲儿子,那你对他们会(x)有一个很高的信Q度,对他们用最的隔离Q运行在一个进E中p了。如果是SAPQ那么你很可能需要尽可能高的隔离性:(x)电(sh)脑装在封存在子里,l在火箭上发到月球?nbsp;
Docker另一个很好的Ҏ(gu)是Q容器可以作Z个整体交付。他们不?x)像虚拟机那么臃ѝ这大大的提高了部v的简易度。在q个微服务流行的世界里,你可以很Ҏ(gu)你的服务捆在一P用镜像来发布。你甚至可以build的结果指定成一个Docker镜像?nbsp;
Docker会(x)怎样改变软g开发和部v的过E仍然有待观察。尽我觉得Docker是一U带有破坏性的技术,但媄(jing)响还在几q之后才?x)到来。虽然我?x)认为Docker?x)让很多pȝ理员丢掉工作,但是实际上Docker却会(x)改变他们的工作。每个h现在都需要一点变革,赶上时代的脚步?nbsp;
又扯q了Q说说OSX上的Docker?nbsp;
l心的你可能注意刎ͼ我之前说Docker是运行在Linux内核之上的。然而OSX没有Linux内核Q那怎么q行Docker呢。ؓ(f)了解册个问题,我们需要用虚拟机来q行Docker。我们可以用一个叫boot2docker的工h做这件事情,但是最q被docker-machine取代了?nbsp;
我的Z有一个比较老的DockerQ但是我觉得惌试Docker ComposeQ因为我q行着很多的服务。Docker Compose能让很多的容器协作v来运行一个整体的环境。ؓ(f)了遵循保证隔L务的宗旨Q每一个服务都q行在单独的容器中。因而,一个典型的web应用中,可以把web服务器运行在一个容器里面,数据库运行在另外一个容器里面,然后q些容器可以攑֜同一个机器上?nbsp;
我从Docker官网上下载了安装包,q且跟着安装指南
http://docs.docker.com/mac/step_one/安装。装好Docker后,我让docker-machine在Virtual Box上创Z新的虚拟机?nbsp;
一L(fng)h很顺利,然后启动随处可见的hello-world镜像?nbsp;
很惊讶这个镜像的q不完全Q完全没有发CQ何一个地Ҏ(gu)“hello world”的输出。然而好在,不是每一个Docker镜像都实现地q般草率。这个hello world的例子比较无聊,看看能不能找到更加有意思的。我们想从容器中服务一个页面,我打用NginxQ已l有一个现成的Nginx的容器了Q因此我创徏了个新的Dockerfile。Dockerfile包含了一pd如何指导Docker从一pd镜像中创建出一个容器的指o(h)。这里提到的容器包含以下内容Q?nbsp;
- FROM nginx
- COPY *.html /usr/share/nginx/html/
W一行设|了我们容器的基镜像。第二行本地的带有html后缀的文件拷贝到Nginx容器中WEB服务器的目录里。ؓ(f)了用这个Dockerfile文gQ我们需要创Z个Docker的镜像:(x)
- /tmp/nginx$ docker build -t nginx_test .
- Sending build context to Docker daemon 3.072 kB
- Step 0 : FROM nginx
- latest: Pulling from library/nginx
- 843e2bded498: Pull complete
- 8c00acfb0175: Pull complete
- 426ac73b867e: Pull complete
- d6c6bbd63f57: Pull complete
- 4ac684e3f295: Pull complete
- 91391bd3c4d3: Pull complete
- b4587525ed53: Pull complete
- 0240288f5187: Pull complete
- 28c109ec1572: Pull complete
- 063d51552dac: Pull complete
- d8a70839d961: Pull complete
- ceab60537ad2: Pull complete
- Digest: sha256:9d0768452fe8f43c23292d24ec0fbd0ce06c98f776a084623d62ee12c4b7d58c
- Status: Downloaded newer image for nginx:latest
- ---> ceab60537ad2
- Step 1 : COPY *.html /usr/share/nginx/html/
- ---> ce25a968717f
- Removing intermediate container c45b9eb73bc7
- Successfully built ce25a968717f
Docker build命o(h)开始将拉取已经构徏好的Nginx容器。然后将我们的文件拷贝到容器里面Qƈ且显C容器的hash|q让它们很容易L认。要q行q个容器我们可以q行Q?nbsp;
- /tmp/nginx$ docker run --name simple_html -d -p 3001:80 -p 3002:443 nginx_test
q条命o(h)让Dockerq行nginxtest的容器,q且取名为simple_html?d选项是ؓ(f)了让Docker在后台运行这条命令,q且最l?p选项是ؓ(f)了{发端口,q里需要将本地?001端口映射到容器的80端口 - x常的web服务器端口。现在我们可以连接到web服务上了。如果我们打开chromeQ访问localhost:3001׃(x)看到Q?nbsp;
居然不行Q问题在于Docker没有意识到自p行在虚拟机的环境里面Q因此我们需要将vm的端口映到我们本地机器上:(x)
- Docker container:80 -> vm host:3001 -> OSX:3001
q个从虚拟机理器里面可以轻杄搞定Q?nbsp;
现在我们可以看到面了:(x)
q就是我们放在容器中的文件。好极了Q现在我准备好尝试更复杂一点的容器了?nbsp;
脓(chung)士:(x) 我注意到在虚拟机里面同时q行的运行Docker?x)整个让pȝhang住。我怀疑同时跑两个虚拟工具可能让某个地方卡住生了冲突的结果。我怿docker-machine的ƈ行的支持正在在积极的解决中,0.5版本可能?x)看到。直到这之前Q你可以参考:(x)
http://kb.parallels.com/en/123356q且看看Q?a target="_blank" style="color: #006699;">https://github.com/Parallels/docker-machine中对docker-machine的fork版本?nbsp;
原文链接Q?a target="_blank" style="color: #006699;">Yet another intro to docker Q翻译:(x)钟最?校对Q宋喻)(j) 译文来自Q?a target="_blank" style="color: #006699;">DockOne.io