docker compose swarm
1.Docker Compose简介
Dockerfile build run 手动操作,单个容器!
微服务,100个微服务,依赖关系。
Docker Compose 来轻松高效的管理容器,定义运行多个容器。
Compose 是用于定义和运行多容器 Docker 应用程序的工具。使用 Compose,您可以使用 YAML 文件来配置应用程序的服务。然后,使用单个命令,从配置中创建并启动所有服务。若要了解有关“撰写”的所有功能的详细信息,请参阅功能列表。
编写工作在所有环境中:生产、过渡、开发、测试以及 CI 工作流。您可以在常见用例中了解有关每个案例的更多信息。
使用撰写基本上是一个三步过程:
-
使用 定义应用的环境,以便可以在任何位置复制它。
Dockerfile
保证项目在任何地方可以运行 -
定义组成应用的服务,以便它们可以在隔离的环境中一起运行。
docker-compose.yml
-
运行后,Docker 撰写命令将启动并运行整个应用。或者,您可以使用 docker 组合二进制文件运行。
docker compose up
docker-compose up
A 看起来像这样:docker-compose.yml
-
作用:批量容器编排 启动项目
Compose是Docker官方的开源项目,需要安装!
Dockerfile让程序在任何地方运行。web服务、redis、mysql、nginx… 多个容器。 run
compose安装
存储库安装
apt-get update
apt-get install docker-compose-plugin
二进制安装
# 官网提供 (没有下载成功)
curl -L "https://github.com/docker/compose/releases/download/1.26.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# 国内地址
curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.5/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
将可执行权限应用于二进制文件:
chmod +x /usr/local/bin/docker-compose
验证
[root@shuju bin]# docker compose version
docker: 'compose' is not a docker command.
See 'docker --help'
[root@shuju bin]# docker-compose version
docker-compose version 1.25.5, build 8a1c60f6
docker-py version: 4.1.0
CPython version: 3.7.5
OpenSSL version: OpenSSL 1.1.0l 10 Sep 2019
开始使用 Docker Compose
在此页面上,您将构建一个在 Docker Compose 上运行的简单 Python Web 应用程序。该应用程序使用 Flask 框架,并在 Redis 中维护一个命中计数器。
不需要安装Python或Redis,因为两者都是由Docker镜像提供的
第 1 步:设置
定义应用程序依赖项。
1、为项目创建一个目录:
mkdir composetest
cd composetest
2、创建一个在项目目录中调用的文件,并将其粘贴到:app.py
import time
import redis
from flask import Flask
app = Flask(__name__)
cache = redis.Redis(host='redis', port=6379)
def get_hit_count():
retries = 5
while True:
try:
return cache.incr('hits')
except redis.exceptions.ConnectionError as exc:
if retries == 0:
raise exc
retries -= 1
time.sleep(0.5)
@app.route('/')
def hello():
count = get_hit_count()
return 'Hello World! I have been seen {} times.\n'.format(count)
步骤 2:创建 Docker 文件
在此步骤中,您将编写一个用于构建 Docker 映像的 Docker 文件。该映像包含 Python 应用程序所需的所有依赖项,包括 Python 本身。
在项目目录中,创建一个名为并粘贴以下内容的文件:Dockerfile
# syntax=docker/dockerfile:1
FROM python:3.7-alpine
WORKDIR /code
ENV FLASK_APP=app.py
ENV FLASK_RUN_HOST=0.0.0.0
RUN apk add --no-cache gcc musl-dev linux-headers
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
EXPOSE 5000
COPY . .
CMD ["flask", "run"]
这告诉 Docker:
从 Python 3.7 映像开始构建映像。
将工作目录设置为 。/code
设置命令使用的环境变量。flask
安装 gcc 和其他依赖项
复制并安装 Python 依赖项。requirements.txt
将元数据添加到映像,以描述容器正在侦听端口 5000
将项目中的当前目录复制到映像中的工作目录。.
.
将容器的默认命令设置为 。flask run
步骤 3:在撰写文件中🔗定义服务
创建一个在项目目录中调用的文件,然后粘贴以下内容:docker-compose.yml
version: "3.9"
services:
web:
build: .
ports:
- "8000:5000"
redis:
image: "redis:alpine"
此撰写文件定义了两个服务:和 。web
redis
步骤 4:使用撰写🔗构建和运行应用
1、从项目目录中,通过运行 启动应用程序。docker-compose up
加-d后台启动
j必须在.yml文件所在的目录下执行
步骤 5:编辑撰写文件以添加绑定装载🔗
在项目目录中进行编辑,为服务添加绑定挂载:docker-compose.yml
web
version: "3.9"
services:
web:
build: .
ports:
- "8000:5000"
volumes:
- .:/code
environment:
FLASK_ENV: development
redis:
image: "redis:alpine"
步骤 6:使用撰写🔗重新生成并运行应用
docker-compose up
停止服务
docker-compose down 或者ctrl c
[root@shuju ~]# docker-compose down #得在yaml文件所在路径运行
ERROR:
Can't find a suitable configuration file in this directory or any
parent. Are you in the right directory?
Supported filenames: docker-compose.yml, docker-compose.yaml
cd /usr/local/bin/composetest
docker-compose down
yaml 规则
官方文档
Compose file version 3 reference | Docker Documentation
yaml文件大致分为三层
1.版本
2.服务
3.公共配置
version: "" # 版本
service: # 服务
web:
# 服务配置
depens_on: #启动是要有顺序的 依赖于 redis 先启动redis在启动web
- redis
redis:
# 服务配置
# 其他配置
volumes:
network:
configs:
secrets:
开源项目 wordpress
官方文档
Quickstart: Compose and WordPress | Docker Documentation
创建一个项目的文件夹
mkdir my_wordpress
cd my_wordpress
创建一个启动博客的文件和一个具有卷装载以实现数据持久性的单独实例:docker-compose.yml
version: "3.3"
services:
db:
image: mysql:5.7
volumes:
- db_data:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: somewordpress
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
wordpress:
depends_on:
- db
image: wordpress:latest
volumes:
- wordpress_data:/var/www/html
ports:
- "8000:80"
restart: always
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress
WORDPRESS_DB_NAME: wordpress
volumes:
db_data: {}
wordpress_data: {}
文件目录下执行docker-compose up -d #加-d 后台启动
根据提示安装workpress
如果项目出现了问题要重新部署
docker-compose up --built
Docker Swarm
管理节点
工作节点
1. 集群搭建
初始化管理面节点,返回一个令牌。
docker swarm init --advertise-addr <ip> (主节点leader 也是管理节点)
1
root@zyt-vm:/# docker swarm init --advertise-addr 192.168.115.223
Swarm initialized: current node (2xj8pq1u8slt2n4c5nu51ycyv) is now a manager.
To add a worker to this swarm, run the following command:
docker swarm join --token SWMTKN-1-4mklb4sv4t71dekk68l63ornj9rk7bdmgeqh6msdtm6onndjp9-275jjg5fwfz5ps8n59b39hkuk 192.168.204.128:2377
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
其他节点加入
# 工作节点加入
docker swarm join-token worker # 获取令牌
docker swarm join --token SWMTKN-1-4mklb4sv4t71dekk68l63ornj9rk7bdmgeqh6msdtm6onndjp9-275jjg5fwfz5ps8n59b39hkuk 192.168.204.128:2377
# 管理节点加入
docker swarm join-token manager # 获取令牌
docker swarm join --token SWMTKN-1-4mklb4sv4t71dekk68l63ornj9rk7bdmgeqh6msdtm6onndjp9-275jjg5fwfz5ps8n59b39hkuk 192.168.204.128:2377
# 查看节点状态 只有manager节点才可用
docker node ls
离开集群
docker swarm leave
Raft协议
Raft协议:保证大多数节点存活,集群才可以使用。高可用!(管理节点>=3,管理存活节点>1)管理节点最好是大于三的奇数(四个和三个效果一样 挂两个都不可用)
也就是 存活管理节点数>死亡管理节点数
动态扩缩容
docker service --help
# 创建启动服务
docker service create -p 8080:80 --name myNginx nginx
# 查看服务
docker service ls
docker service ps myNginx
docker service inspect 服务名 #查看服务详细信息
# 动态扩缩容(更新副本数量)
docker service update --replicas 3 myNginx # 方式一(--replicas 3 有三个副本)
docker service scale myNginx=1 # 方式二
# 移除服务
docker service rm myNginx
swarm集群上的docker在不通机器上实际网络是一个 ingress网络 是一个特殊的Overlay网络
Docker Stack
docker stack --help
deploy Deploy a new stack or update an existing stack
ls List stacks
ps List the tasks in the stack
rm Remove one or more stacks
services List the services in the stack
# 单机部署
docker-compose up -d wordpress.yaml
# 集群部署
docker stack deploy wordpress.yaml
Docker Secret
secret 存在swarm manager 节点raft database里面;
secret 可以assign给一个service,这个service就能看到这个secret; 给服务设密码
docker secret --help
create Create a secret from a file or STDIN as content 从文件或标准输入创建secret
inspect Display detailed information on one or more secrets 查看secret详细信息
ls List secrets 查看secret列表
rm Remove one or more secrets 删除secret
Docker Config
通过 docker config 来管理集群中的配置文件,这样的方式也更加通用。
docker config --help
create Create a config from a file or STDIN 从文件或标准输入创建config
inspect Display detailed information on one or more configs 查看config详细信息
ls List configs 查看config列表
rm Remove one or more configs 删除config
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)