我对 Docker 很陌生,但已经开始考虑生产设置,因此在使用 Docker Swarm 时需要解决数据持久性的挑战。我决定从创建我的部署基础设施开始(TeamCity 用于构建,NuGet 加上“注册表”[ https://hub.docker.com/_/registry/]用于存储图像)。
我从 TeamCity 开始。显然,这需要数据持久性才能工作。我可以在带有 EBS 驱动器的容器中运行 TeamCity,一切看起来都运行良好 - TeamCity 正在完成设置步骤,我的 TeamCity 驱动器出现在 AWS EBS 中,但随后工作节点 TeamCity 被分配到关闭并且安装过程停止。
以下是我要遵循的所有步骤:
第 1 阶段 - 机器设置:
- 为 master 创建一个 AWS 实例
- 为工作人员创建两个 AWS 实例
- 都是 64 位 Ubuntu t2.mircro 实例
- 为方便起见创建三个弹性IP,并分配给上述机器。
- 使用这个在所有节点上安装 Docker:https ://docs.docker.com/install/linux/docker-ce/ubuntu/
- 使用这个在所有节点上安装 Docker Machine:https ://docs.docker.com/machine/install-machine/
- 使用此在所有节点上安装 Docker Compose:https ://docs.docker.com/compose/install/
第 2 阶段 - 在 Master 上配置 Docker Remote:
$ sudo docker run -p 2375:2375 --rm -d -v /var/run/docker.sock:/var/run/docker.sock jarkt/docker-remote-api
第 3 阶段 - 在所有机器上安装 rexray/ebs 插件:
$ sudo docker plugin install --grant-all-permissions rexray/ebs REXRAY_PREEMPT=true EBS_ACCESSKEY=XXX EBS_SECRETKEY=YYY
[我从 AWS 中提取了 XXX 和 YYY 的正确值]
我使用以下方法进行测试:
$ sudo docker volume create --driver=rexray/ebs --name=delete --opt=size=2
$ sudo docker 卷 rm 删除
所有三个节点都能够毫无问题地在 AWS EBS 中创建和删除驱动器。
第 4 阶段 - 设置 swarm:
在主服务器上运行:
$ sudo docker swarm init --advertise-addr eth0:2377
这给出了在每个工作人员上运行的命令,如下所示:
$ sudo docker swarm join --token XXX 1.2.3.4:2377
这些在工作机器上执行得很好。
第 5 阶段 - 在我的本地计算机上使用 Remote Powershell 设置可视化:
$ $env:DOCKER_HOST="{master IP address}:2375"
$ docker stack deploy --with-registry-auth -c viz.yml viz
viz.yml 看起来像这样:
version: '3.1'
services:
viz:
image: dockersamples/visualizer
volumes:
- "/var/run/docker.sock:/var/run/docker.sock"
ports:
- "8080:8080"
deploy:
placement:
constraints:
- node.role==manager
- 这很好用,让我可以想象我的群体。
第 6 阶段 - 在我的本地计算机上使用远程 Powershell 安装 TeamCity:
$ docker stack deploy --with-registry-auth -c docker-compose.yml infra
docker-compose.yml 看起来像这样:
version: '3'
services:
teamcity:
image: jetbrains/teamcity-server:2017.1.2
volumes:
- teamcity-server-datadir:/data/teamcity_server/datadir
- teamcity-server-logs:/opt/teamcity/logs
ports:
- "80:8111"
volumes:
teamcity-server-datadir:
driver: rexray/ebs
teamcity-server-logs:
driver: rexray/ebs
[将 NGINX 合并为代理是我待办事项列表的后续步骤。]
我可以看到所需的驱动器都出现在 AWS EBS 中,并且容器出现在我的 swarm 可视化中。
但是,在 TeamCity 中看到进度屏幕一段时间后,包含 TeamCity 实例的工作机器会关闭,并且该过程会突然结束。
我不知道下一步该做什么。我什至不确定在哪里寻找日志。
任何帮助都感激不尽!
干杯,
史蒂夫。