docker swarm中django项目的卷装载代码,以便跨swarm中的所有节点创建容器
我试图在Digital Ocean上实现跨越3个节点(节点1(管理者)、节点2(工作者)、节点3(工作者))的docker swarm。 我有两个django服务器(python映像)在容器中运行,还有一个postgresDb容器 因为代码在node1中,我在node1中绑定挂载了一个目录。这两个django容器仅在node1中创建 对于postgres容器,我可以附加一个卷(即卷装载),因此postgres容器分布在3个节点上 我认为主要的问题是因为代码在node1中,我在node1中硬编码ie绑定挂载目录路径,这些django容器没有在其他节点中创建,而对于postgres容器,因为我使用的是一个卷,它的容器分布在节点上 是否有一种变通方法,可以将每个django服务器的代码目录进行卷绑定,或者将所有代码复制到一个卷中?但这似乎效率不高,而且随着代码库的增长,这可能需要很多时间 下面我提到了我的docker-stack.yml文件,其中的注释提到了我上面提到的内容:docker swarm中django项目的卷装载代码,以便跨swarm中的所有节点创建容器,docker,docker-compose,docker-swarm,docker-volume,Docker,Docker Compose,Docker Swarm,Docker Volume,我试图在Digital Ocean上实现跨越3个节点(节点1(管理者)、节点2(工作者)、节点3(工作者))的docker swarm。 我有两个django服务器(python映像)在容器中运行,还有一个postgresDb容器 因为代码在node1中,我在node1中绑定挂载了一个目录。这两个django容器仅在node1中创建 对于postgres容器,我可以附加一个卷(即卷装载),因此postgres容器分布在3个节点上 我认为主要的问题是因为代码在node1中,我在node1中硬编码i
version: "3"
services:
tatkal_website:
image: sourabhkondapaka/tatkal_website
restart: on-failure
deploy:
replicas: 3
update_config:
parallelism: 2
delay: 10s
links:
- "tatkal_booking_service:bookingService"
networks:
- net
ports:
- 8000:8000
volumes:
- ./WebSite/:/home/project/ # Bind mounting ./Website (django server directory)
depends_on:
- db
command: >
sh -c "python3 manage.py makemigrations && python3 manage.py migrate && python3 manage.py runserver 0.0.0.0:8000"
tatkal_booking_service:
image: sourabhkondapaka/tatkal_booking_service
restart: on-failure
ports:
- 8001:8000
volumes:
- ./Booking_Service/:/home/project/ #Bind mounting ./Booking_Service (django serverdirectory)
networks:
- net
deploy:
replicas: 3
update_config:
parallelism: 2
delay: 10s
depends_on:
- db
command: >
sh -c "python3 manage.py makemigrations && python3 manage.py migrate && python3 manage.py runserver 0.0.0.0:8000"
db:
image: sourabhkondapaka/tatkal_postgres_db
restart: on-failure
networks:
- net
deploy:
replicas: 4
update_config:
parallelism: 2
delay: 10s
ports:
- 7890:5432
volumes:
- data:/var/lib/postgresql/data # Volume mounted postgres container. So no issues.
visualizer:
image: dockersamples/visualizer:stable
ports:
- "8080:8080"
stop_grace_period: 1m30s
volumes:
- "/var/run/docker.sock:/var/run/docker.sock"
deploy:
placement:
constraints: [node.role == manager]
networks:
net:
volumes:
data:
您应该将应用程序代码构建到图像中,而不是试图将其绑定到图像中;这既是一种最佳做法,也避免了您遇到的问题。但这可能会导致容器尺寸过大,对吗?我只在图像超过1 GB左右时遇到过图像“太大”的问题。一个典型的基于Python的Web应用程序,如果不尝试包含机器学习模型,就不会有问题。谢谢你的努力。我发现的另一种方法是将所有代码复制到docker卷中,并将该卷装载到.yml文件中,而不是绑定装载。但在这种情况下,docker由于某种原因无法找到复制到卷中的任何文件。参考链接: