我只有一个小型 Web 项目要通过 Docker 运行,并且只有一台机器无法使用虚拟化,而且我也并不真正需要虚拟化。我想知道如何使用 Docker 将应用程序部署到 VPS 而不会造成任何停机。
目前,我只是使用存储库并使用 docker-compose 创建 docker 容器(包括通过特定 .yaml 文件进行生产的一些配置)。
我想最好是使用 Swarm,但我认为这是不可能的,因为我只能使用一台机器。
我对 Docker Compose 和容器链接有一些经验。在非 swarm 环境中,您可以使用其名称轻松地从容器连接web到容器db_mysql(例如,在 PHP 中,我可以将 MySQL 连接配置为:
$dsn = 'mysql:host=db_mysql;
我很难理解它如何在 Swarm 模式下与 Docker 一起工作,特别是考虑到“副本”和“负载平衡”机制。
假设我有 5 台不同的 Docker 机器,每台机器都有不同的公共 IP,参与 Swarm。我还有一个web服务和一个db在这 5 台不同机器上复制的服务(每台机器 1 个实例)。
我的问题是:如何制作 5 个web容器中的任何一个,与 5 个容器中的任何一个进行通信,db_mysql而不强制这些web容器了解任何 Docker Machine 公共 IP 或这些容器位于 Swarm 中的事实?
Docker 配置和容器环境变量设置似乎都实现了相同的目标。特别是当考虑要设置的环境变量可以从文件(env_file)中获取时。
docker config 相对于为容器设置环境变量有什么好处?
在我最初尝试将基于 docker-swarm 的 Traefik 安装从 1.7 迁移到 2.0 时,我发现 traefik.toml 配置文件中默认静态指定的 SSL 配置被忽略,并且启用调试后,我的 docker 日志显示了许多类似的消息:
time="2019-11-06T20:26:30Z" level=debug msg="No default certificate, generating one"
Run Code Online (Sandbox Code Playgroud) 给定撰写文件
version: '3.8'
services:
whoami1:
image: containous/whoami
depends_on:
- whoami2
whoami2:
image: containous/whoami
Run Code Online (Sandbox Code Playgroud)
当部署到 docker swarmdocker stack deploy -c docker-compose.yaml test
服务时whoami1,whoami2似乎以随机顺序启动并忽略depends_on条件。
docker stack deploy -c docker-compose.yaml test
Creating network test_default
Creating service test_whoami1
Creating service test_whoami2
Run Code Online (Sandbox Code Playgroud)
docker swarm 是否支持通过依赖项进行服务启动排序?
我的服务器上有很多容器,我需要通过名称(而不是IP)访问所有容器。当然,我可以通过 IP 地址 ping 容器。问题是我无法通过主机名或名称对它们执行 ping 操作。
另外,我不使用 docker-compose。我使用 docker file 和 docker Restapi
我有一个 Django 项目。我正在考虑在部署到 Elastic Beanstalk 之前向其中添加 Docker。我对 Django 和 Docker 非常陌生,想了解在将 Django 应用程序部署到 Elastic Beanstalk 时使用 Docker 有哪些好处。谢谢!
django amazon-web-services docker amazon-elastic-beanstalk docker-swarm
我最近开始使用 vue js 工作,在尝试使用 docker ucp 中的 docker 容器部署的 vuejs 应用程序中进行运行时 url 注入时,我遇到了 window.ENV 和 window._env。我阅读了有关 process.env 的信息,以便在应用程序中使用环境变量。但不确定 window.ENV 或 window._env 或 process.env 有什么不同?在此先感谢您的帮助!!
我正在使用Jenkins(1.573)和Swarm插件(2.0):https : //wiki.jenkins-ci.org/display/JENKINS/Swarm+Plugin。
从http://maven.jenkins-ci.org/content/repositories/releases/org/jenkins-ci/plugins/swarm-client/2.0/下载了jar
我已经在Jenkins(主机)中安装了插件,并且从其中一台Linux机器(我想用作从机)中下载了具有依赖项2.0的swarm客户端jar并运行了以下命令:
注意:
$ p变量中存储了密码。
可以正常使用模式(而不是独占模式)。
$ java -jar swarm-client-2.0-jar-with-dependencies.jar -name“`hostname -a`_01” -fsroot“`pwd` /`hostname -a`_01” -master http://jenkins_server.yo .company.com:8081 -disableSslVerification-用户名c123456-密码$ p-说明“主机名-a”-执行程序5-标签“ ANSIBLE_CENTOS CENTOS”-模式“独占”-重试3
Discovering Jenkins master
Dec 03, 2015 3:52:58 PM org.apache.commons.httpclient.HttpMethodBase getResponseBody
WARNING: Going to buffer response body of large or unknown size. Using getResponseBodyAsStream instead is recommended.
Attempting to connect to http://jenkins_server.yo.company.com:8081/ 1229493c-3bd5-4cf4-9210-3392089f2ee2 with ID 1893f0ea
Could not obtain CSRF crumb. Response code: 404
Dec 03, 2015 3:53:01 PM hudson.remoting.jnlp.Main createEngine …Run Code Online (Sandbox Code Playgroud) 我使用docker-machine创建了3个vm:
docker-machine create -d virtualbox manager1
docker-machine create -d virtualbox worker1
docker-machine create -d virtualbox worker2
Run Code Online (Sandbox Code Playgroud)
这些是他们的IP:
docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
manager - virtualbox Running tcp://192.168.99.102:2376 v1.12.6
worker1 - virtualbox Running tcp://192.168.99.100:2376 v1.13.0-rc5
worker2 - virtualbox Running tcp://192.168.99.101:2376 v1.13.0-rc5
Run Code Online (Sandbox Code Playgroud)
然后 docker-machine ssh manager1
和:
docker swarm init --advertise-addr 192.168.99.102:2377
Run Code Online (Sandbox Code Playgroud)
然后worker1和worker2加入到swarm中.
现在我创建了一个覆盖网络:
docker network create -d overlay skynet
Run Code Online (Sandbox Code Playgroud)
并在全局模式下部署服务(节点的1个任务):
VM_IP:SERVICE_PORT[R
节点实际上有1个容器(任务).
现在,我想直接访问我的虚拟主机..或者,至少,我想直接浏览我的服务容器,因为我想用nginx开发我的服务负载均衡器.为此,在我的nginx conf文件中,我想指向一个特定的服务集合器(即现在我在全局模式下有3个节点(1个管理员和2个工作者),所以我有3个任务在运行 - > i我想选择这3个容器中的一个.我怎样才能做到这一点?
[编辑]:我可以指向我的swarm节点,只需浏览到VM_IP:SERVICE_PORT,即:
192.168.99.102:8200
但仍有内部负载平衡.我在想,如果我指向一个特定的swarm节点,我将在该特定节点内使用容器.但是现在没什么.
docker-swarm ×10
docker ×8
django ×1
docker-stack ×1
https ×1
jenkins ×1
katacoda ×1
master-slave ×1
nginx ×1
production ×1
slave ×1
traefik ×1
virtualbox ×1
vue.js ×1