仅用于应用程序二进制文件的Docker容器

我想每个应用程序发布存储为某种容器,然后有几个“服务器”容器(DB,Web服务器)。 这些容器之间的合作如何工作?

我可以想象在应用程序的“应用程序”容器中定义一些音量。 二进制文件将被存储,然后将此卷文件夹用作“服务器”容器中的Web服务器的部署目录。

更新应用程序版本的过程将如何工作? 我怎样才能“绑定”多个二进制文件与一个“服务器”容器?

更一般地说,我可以想象部署这样的“部署一些版本releasecontainer serv1,serv2,serv3”,也许docker不是适当的工具,我会需要一些更多的抽象pipe理像Swarm,Kubernate等,但重点创build应用程序二进制作为生态系统已知的自给自足的只读实体

也许你需要一个docker-compose来让你的容器在虚拟networking上交互(但你仍然可以共享资源和卷)。 我会在这里发表一个简单的例子。

docker构成如下:

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文件,比方说我的docker-compose.yml。 要运行它,你必须在terminal上input:

docker-compose -f path / to / compose / my-docker-compose.yml up -d

当然,图像应该已经build好了。