使用 docker 进行部署
Deploying with docker
我刚开始使用 docker 进行部署。实际上,我 运行 在 docker 容器内的计算机中 运行ning 我的 django 应用程序,它在 运行 端口 localhost:8080 上成功 运行ning。然后我将代码拉到远程服务器并开始 docker-compose up,应用程序也在那里成功 运行ning。我想问的是,如何借助服务器的IP地址查看应用程序?例如,如果 ip 地址是 123.45.67.89,我认为该应用程序应该 运行ning 在 123.45.67.89:8080 中,但它不在那里 运行。如何访问远程服务器容器中的应用 运行ning?
P.S。我没用过nginx,要不要用?
docker-compose.yml
从技术上讲,它应该按照你的方式工作,但可能是8080端口没有对外开放。
您可以更改 docker-compose.yml
文件中的端口映射:
ports:
- "80":"8080"
然后您可以从 123.45.67.89 访问您的应用程序,无需指定任何端口,因为 80 是默认端口。如果它不起作用,请仔细检查 IP 地址和您的防火墙规则。
但是,使用 Nginx 几乎总是一个好主意,因为您使用的本地 Web 服务器尚未准备好生产(功能和安全方面)。我不会在这里解释如何实现 Nginx,因为它有点跑题,而且有很多可用的资源,但是当你在远程服务器上部署时,你应该认真考虑它。
这个问题的答案在很大程度上取决于您托管生产应用程序的位置,以及它为您提供开箱即用的服务类型。
一般来说,生产服务器通常有一些反向代理或应用程序负载平衡器位于容器化应用程序的前面。
由于您是从 docker 开始的,并且我假设这是个人或小型应用程序,因此我可以推荐以下内容:
- 如果您在托管服务提供商方面比较灵活,请尝试 Digital Ocean。它们对开发人员非常友好,并且具有成本效益,至少在一定规模之前是这样。
- 使用自动 docker nginx-proxy。这个工具可以让你在你的
docker-compose.yml
文件中添加几行,并神奇地获得一个配置好的 nginx 代理,而无需对 nginx 一无所知。
我正在使用这种方法将多个个人网站部署到一个低成本的服务器上。
示例 docker-compose.yml
可能如下所示:
services:
nginx:
image: nginxproxy/nginx-proxy
ports: ["${PORT:-80}:80"]
restart: always
volumes:
- /var/run/docker.sock:/tmp/docker.sock:ro
environment:
DEFAULT_HOST: www.yoursite.com
app:
depends_on: [nginx]
restart: always
image: your/image
environment:
VIRTUAL_HOST: myapp.localhost,www.yoursite.com
这基本上告诉 nginx-proxy 在 http://myapp.localhost and http://www.yoursite.com.
上为您的应用程序提供服务
当然,您需要将您的域 DNS 指向您的数字海洋 IP。
我刚开始使用 docker 进行部署。实际上,我 运行 在 docker 容器内的计算机中 运行ning 我的 django 应用程序,它在 运行 端口 localhost:8080 上成功 运行ning。然后我将代码拉到远程服务器并开始 docker-compose up,应用程序也在那里成功 运行ning。我想问的是,如何借助服务器的IP地址查看应用程序?例如,如果 ip 地址是 123.45.67.89,我认为该应用程序应该 运行ning 在 123.45.67.89:8080 中,但它不在那里 运行。如何访问远程服务器容器中的应用 运行ning?
P.S。我没用过nginx,要不要用?
docker-compose.yml
从技术上讲,它应该按照你的方式工作,但可能是8080端口没有对外开放。
您可以更改 docker-compose.yml
文件中的端口映射:
ports:
- "80":"8080"
然后您可以从 123.45.67.89 访问您的应用程序,无需指定任何端口,因为 80 是默认端口。如果它不起作用,请仔细检查 IP 地址和您的防火墙规则。
但是,使用 Nginx 几乎总是一个好主意,因为您使用的本地 Web 服务器尚未准备好生产(功能和安全方面)。我不会在这里解释如何实现 Nginx,因为它有点跑题,而且有很多可用的资源,但是当你在远程服务器上部署时,你应该认真考虑它。
这个问题的答案在很大程度上取决于您托管生产应用程序的位置,以及它为您提供开箱即用的服务类型。
一般来说,生产服务器通常有一些反向代理或应用程序负载平衡器位于容器化应用程序的前面。
由于您是从 docker 开始的,并且我假设这是个人或小型应用程序,因此我可以推荐以下内容:
- 如果您在托管服务提供商方面比较灵活,请尝试 Digital Ocean。它们对开发人员非常友好,并且具有成本效益,至少在一定规模之前是这样。
- 使用自动 docker nginx-proxy。这个工具可以让你在你的
docker-compose.yml
文件中添加几行,并神奇地获得一个配置好的 nginx 代理,而无需对 nginx 一无所知。
我正在使用这种方法将多个个人网站部署到一个低成本的服务器上。
示例 docker-compose.yml
可能如下所示:
services:
nginx:
image: nginxproxy/nginx-proxy
ports: ["${PORT:-80}:80"]
restart: always
volumes:
- /var/run/docker.sock:/tmp/docker.sock:ro
environment:
DEFAULT_HOST: www.yoursite.com
app:
depends_on: [nginx]
restart: always
image: your/image
environment:
VIRTUAL_HOST: myapp.localhost,www.yoursite.com
这基本上告诉 nginx-proxy 在 http://myapp.localhost and http://www.yoursite.com.
上为您的应用程序提供服务当然,您需要将您的域 DNS 指向您的数字海洋 IP。