我想将每个应用程序版本存储为某种容器,然后只有几个“服务器”容器(DB,Web服务器)。这些容器之间的合作如何运作?
我可以想象在应用程序的“app”容器中定义一些卷。将存储二进制文件,然后将此卷文件夹用作“服务器”容器中的Web服务器的部署目录。
更新应用程序版本的过程如何运作?如何用一个“服务器”容器“绑定”多个二进制文件?
更普遍的是,我可以想象像这样部署 “将some-version-releasecontainer部署到serv1,serv2,serv3”,也许docker不是正确的工具,我需要一些更抽象的管理,如Swarm,kubernate等。但重点是创建应用程序二进制文件 selfstanding ,生态系统已知的只读实体。
答案 0 :(得分:1)
也许您需要一个docker-compose来让您的容器在虚拟网络上进行交互(但您仍然可以共享资源和卷)。我将在这里发布一个简单的例子。
docker-compose如下:
version: '2'
services:
myapp_service1:
image: myapp_image1:latest
networks:
mynetwork:
aliases:
- myalias1
depends_on:
- mysql
expose:
- 8080
volumes:
- /opt/myapp/logs:/jboss-as-7.1.1.Final/logs
environment:
- "JAVA_OPTS=-Xms64m -Xmx128m -XX:MaxPermSize=128m -Djava.net.preferIPv4Stack=true"
- "db=mysql.myapp"
volumes_from:
- myapp_volume
myapp_service2:
image: myapp_image2:latest
networks:
mynetwork:
aliases:
- myalias2
depends_on:
- mysql
expose:
- 8080
volumes:
- /opt/myapp/logs:/jboss-as-7.1.1.Final/logs
environment:
- "JAVA_OPTS=-Xms64m -Xmx128m -XX:MaxPermSize=128m -Djava.net.preferIPv4Stack=true"
- "db=mysql.myapp"
volumes_from:
- myapp_volume
myapp_volume:
container_name: myapp_volume
image: myapp_volume_image:latest
mysql:
image: mysql
networks:
mynetwork:
aliases:
- mysql.myapp
expose:
- 3306
ports:
- "13306:3306"
volumes:
- /opt/myapp/mysql:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: root
networks:
mynetwork:
driver: bridge
这里有四个容器。前两个是共享相同卷的示例应用程序。卷定义在应用程序的正下方,最后我们有一个容器,它运行一个简单的MySql DB。
共享卷容器的Dockerfile就是那个:
FROM alpine
VOLUME /jboss-as-7.1.1.Final/mydir/config
CMD /bin/sh -c "while true; do sleep 1; done"
docker compose是一个yml文件,让我们说my-docker-compose.yml。要运行它,您必须在终端中键入:
docker-compose -f path / to / compose / my-docker-compose.yml up -d
当然,图像应该已经构建完毕。