Jer*_*oen 21 linux ubuntu lxc docker
我想运行一个托管一个简单的Web应用程序的docker容器,但是我不明白如何设计/运行图像作为服务器.例如:
docker run -d -p 80:80 ubuntu:14.04 /bin/bash
Run Code Online (Sandbox Code Playgroud)
这将启动并立即关闭容器.相反,我们可以以交互方式启动它:
docker run -i -p 80:80 ubuntu:14.04 /bin/bash
Run Code Online (Sandbox Code Playgroud)
这有效,但现在我必须为每个正在运行的容器打开交互式shell吗?我宁愿启动它并让它在后台运行.黑客将使用永不返回的命令:
docker run -d -p 80:80 {image} tail -F /var/log/kern.log
Run Code Online (Sandbox Code Playgroud)
但是现在我再也无法连接到shell,以检查应用程序正在执行的操作.
有没有办法在后台启动容器(就像我们为vm所做的那样),允许从主机附加/分离shell?还是我完全忽略了这一点?
Ben*_*ley 21
最后一个参数docker run
是在容器中运行的命令.当你运行时docker run -d -p 80:80 ubuntu:14.04 /bin/bash
,你正在bash
容器中运行,仅此而已.实际上,您希望在容器中运行Web应用程序并使该容器保持活动状态,因此您应该这样做docker run -d -p 80:80 ubuntu:14.04 /path/to/yourapp
.
但是您的应用程序可能依赖于某些配置才能运行.如果它从环境变量中读取其配置,则可以使用-e key=value
参数docker run
.如果您的应用程序需要配置文件,则应该首先使用a Dockerfile
来设置配置.
本文提供了在容器中运行节点应用程序的完整示例.
小智 8
docker的用户倾向于假设容器是一个完整的VM,而docker设计概念更侧重于最优的容器化而不是模仿容器内的VM.
两者都是正确的,但是一些实现细节在开始时并不容易熟悉.我试图以一种更容易理解的方式总结一些实现差异.
SSH将是进入Linux VM(或容器)的最直接的方式,但是许多dockerized模板没有安装ssh服务器.我相信这是因为容器的优化和安全原因.
如果开箱即用,docker attach可以很方便.但是在编写时它并不稳定 - https://github.com/docker/docker/issues/8521.可能与SSH设置相关联,但不确定何时完全修复.
Docker在https://blog.docker.com/2014/06/why-you-dont-need-to-run-sshd-in-docker/推荐的一些替代方案(或某些意义上的最佳实践)
这种做法基本上将可变元素从容器中分离出来并将它们映射到docker主机中的某些位置,以便可以从容器外部操作和/或持久化它们.在生产环境中可能是一个很好的做法,但是当更多与docker相关的项目围绕开发和暂存环境时,这不是现在.
"docker exec -it {container id} bash"cloud是非常方便实用的工具,可以进入机器.
一些基础知识
归档时间: |
|
查看次数: |
38243 次 |
最近记录: |