我有兴趣了解在我的服务器上为我的 Web 客户端使用 Docker 的完整概念。
理想情况下,我希望使用 apache、PHP、MySQL、电子邮件服务器、DNS 服务器、redis、memcached、imagemagick 等创建一个 docker,并拥有它,我可以简单地启动到客户端的新服务器并在几分钟内启动。
我在这里看到了这个 Apcache Docker https://hub.docker.com/r/eboraas/apache-php/
它说:
这是一个包含 SSL 和 PHP5 支持的 Apache 映像。为了有效地使用此映像,您需要安装:
/var/www 用于您的站点内容(例如使用“-v /home/jdoe/mysite/:/var/www/”)/var/log/apache2,可选,如果您想将日志文件明显地存储在容器之外 /etc /ssl,可选,如果您希望使用带有真实密钥的 SSL
更具体地说:
为您的网站内容挂载 /var/www
如果我理解正确,这是允许网站的外部文件夹/文件存在于 Docker 映像之外的服务器上,以便 Docker 基本上只是处理实际的服务器软件?
还有一些问题:
诸如用于添加域的 Apache Virtualhost 记录之类的东西是否存在于 docker 映像内部或其外部的服务器上并且是可编辑的?
我现在已经将 docker 用于我的许多应用程序。我已经到了我有大约十几个 dockerfile 的地步。我经常必须进行相同的更改或在多个 dockerfile 中包含某些内容 - 这意味着我必须在多个位置进行相同的更改。
可能解决此问题的方法是使用支持包含文件和变量的预处理器。这样我就可以在同一个文件中包含常见的东西(例如,包含 monit 和 supervisor 的一堆东西),并将这些文件包含在我的 Dockerfile 中。
Docker 构建本身不包括和变量替换,所以也许预处理器可以解决问题?我知道对于 CSS 有一堆预处理器,那么是否有一个通用的预处理器或一些可以使用 YAML 或 JSON 文件并写下 Docker 可以理解的东西的东西?
我已经安装了 CoreOS,它默认使用大小为 100GB 的环回设备,我很容易达到了这个限制。
我的第一个想法是使用 NFS 将所有图像放在我的 NAS 上,只需将其安装在/var/lib/docker目录顶部,但没有任何成功。
现在我找到了这篇文章,它看起来像 docker 以任何方式在任何类型的存储之上创建块设备,以便使用它的 CoW 快照,这可能就是为什么我在第一次拍摄时没有成功的原因只是安装 NFS 共享在图像目录的顶部。有点吓到我了 为什么不将纯 NFS 与存储的本机快照一起使用?我希望对这样做有很好的解释。无论如何,我需要做这件怪事。我是 docker 和 CoreOS 的新手,不知道如何正确执行此操作。所以问题是:如何挂载 NFS 共享并将其用于 CoreOS 上的所有映像?
我正在和工头一起玩(学习工头和码头工人),并想尝试码头工人的方法。
在任何地方都找不到它的 docker 文件。
当我从容器内启动容器时,如何找出哪个文件被执行?
我问的原因是我希望容器使用主机的两个网络接口,一个用于 Web-UI,另一个用于在单独的专用网络上分发 DHCP 和 DNS。
如果我执行附加了“bash”的容器,我可以将 dns 和 dhcp 代理网络的配置选项传递给它,但我失去了所有其他优点,即 SSL 证书、管理员凭据……
目前我正在使用 Docker 托管多个容器,并意识到有些容器似乎不断自行重新启动。
使用命令 docker ps -a 时,我看到列状态总是像“上升 5 分钟”或“上升 2 小时”,而在实际网站中,我看到容器自行重新启动时的停机时间,并且正在发生这种情况像每天多次。
我已经尝试使用 docker 日志并查找有关重新启动行为的文档,但到目前为止还没有找到原因。任何人都可以与我分享一些有关什么会触发 docker 容器重新启动的信息吗?当主机耗尽 RAM 时,它们会重新启动吗?有什么工具可以跟踪这种行为吗?
谢谢你的帮助..
我有一个流利的服务器,平均处理 1000 个请求/秒。该服务器由 32 个 CPU 组成。在这个服务器上运行着 32 个具有相同配置的 fluentd docker 容器。服务器的入口点是一个 nginx 作为负载均衡器,配置了循环算法并将其发送到不同的容器。容器和 nginx 都监听 24224/tcp。
该节点的输入是 6 个使用fluent-logger-csharp发送到 fluentd 服务器的C# 应用程序。因此,对于每个应用程序打开一个到 Fluentd 服务器的连接,由于流量较大,应用程序保持打开套接字。这导致 32 个 docker 中只有 6 个正在处理请求。
如何在不修改 C# 客户端的情况下更好地利用服务器利用率?
我有一个带有 RUN 指令的 Dockerfile 来修改 /etc/hosts 文件,但它不起作用。
FROM dockerhub.mydomain.com/sometag/java8
MAINTAINER itsme
ADD some-java-app.jar app.jar
ADD hosts tmp/
ENV PATH=/opt/java/bin:$PATH
RUN cat /tmp/hosts >> /etc/hosts
CMD ["java",\
"-Djava.security.egd=file:/dev/./urandom",\
"-jar",\
"/app.jar"]
Run Code Online (Sandbox Code Playgroud)
在hosts复制到 docker 镜像中的 /tmp 的文件中,还有一个额外的主机名和 IP。我想cat这样做/tmp/hosts,/etc/hosts但在构建图像后/etc/hosts未修改。
如何正确修改此文件?编辑:我正在尝试使用tee命令,但是当图像是构建内容时,/tmp/hosts它会回显到控制台,而不是/etc/hosts.
RUN bash -c 'cat /tmp/hosts | tee -a /etc/hosts'
Run Code Online (Sandbox Code Playgroud)
它在 Dockerfile 中看起来|或>>不起作用。
我无法理解部署使用 uwsgi/gunicorn 的 Django 项目的“正确”方法是什么(我还没有决定使用什么,可能是 uwsgi,因为它具有更好的性能和建议?)和 nginx 使用码头工人。
我看到有些人把所有东西都放在同一个容器里。我不是 docker 的专家,但容器应该只做一 (1) 件事。因此,拥有 Django + nginx 似乎是 2 而不是 1。
现在,我的部署想法是:
有没有其他方法可以做到?有没有更深入地介绍这种情况的教程。我需要一个可靠的产品,而不仅仅是在我的电脑上测试一些代码。
我将 nginx 设置为 docker 容器中的反向代理,以链接到容器外的站点。我有一个 vhost 配置设置如下(我尝试在家庭助理的位置之前添加 ^~ ):
server { # simple reverse-proxy
listen 80;
location / {
proxy_pass http://192.168.1.99:6789;
}
location ^~ /home-assistant {
proxy_pass http://192.168.1.99:8123/;
}
location /calibre-web/ {
proxy_pass http://192.168.1.99:8181/;
}
}
Run Code Online (Sandbox Code Playgroud)
对于 home-assistant 和 calibre-web 站点,页面都会加载,但我收到所有其他项目(图像、CSS 等)的 404 错误。 如果我尝试单击应用程序中的链接,它会将我链接到 192.168.1.99/file 而不是 192.168.1.99/site-folder/file。下面是日志中的一些记录(注意一个 200 响应和其他 404 响应)。我在这里做错了什么?在此先感谢您的帮助。
192.168.1.6 - randy [15/Aug/2016:03:15:42 +0000] "GET /frontend/panels/dev-template-0a099d4589636ed3038a3e9f020468a7.html HTTP/1.1" 404 199 "http://192.168.1.99/home-assistant/" "Mozilla/5.0 (X11; CrOS x86_64 8350.60.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.85 Safari/537.36"
192.168.1.6 - randy [15/Aug/2016:03:15:42 +0000] …Run Code Online (Sandbox Code Playgroud) 正如您在标题中已经读到的,我目前正在运行多个用作 git 服务器的 docker 容器,通常应该在端口 22 下运行。这显然不起作用,但我的请求如下。
在端口 22 上提供以下内容:
我知道我必须跨容器和帐户同步 ssh 密钥,但这不会是一个大问题,但我不知道是否可以构建重定向系统。
我的一种方法是使用ForceCommand,但我无法重定向使用的 SSH 密钥...
另一个想法是在端口 22 上运行一个小工具,它只是在所有 SSH 守护进程之间路由完整的请求,但我还没有(还?)找到这样的工具,不知道是否可以构建这样的工具出于安全原因。