2016-02-29 68 views
2

我正在使用bash脚本启动一个带有两个码头集装箱的虚拟网络。这感觉是史前的。是否有一些工具可以旋转这样一个整体上下&显示其当前状态,还是必须自己照顾?管理一组没有汗水的码头集装箱

docker-compose如果docker文档中docker-compose是自包含的还是与swarm绑定的,并且组合定义文件的权威示例以及启动和停止集合的命令将非常有用,这是不清楚的。

E.g.这里是一个bash脚本将会做什么来定义/启动两个相互关联的容器的应用程序,不用说这个脚本不能帮助管理其生命周期,而不仅仅是启动一次。

docker network create --driver bridge FooAppNet 
docker run --rm --net=FooAppNet --name=component1 -p 9000:9000 component1-image 
docker run --rm --net=FooAppNet --name=component2 component2-image 
在这个例子中

此外,容器component1暴露端口9000到主机,并且其包含的应用程序具有它在它的配置文件硬连线,以消耗由它的名字的component2服务(以下共同搬运工联网实践依靠在docker networks' internal DNS)。

+1

可能最好从Docker Compose开始。你可以独立于Swarm使用它。 –

回答

3

对于你给的例子,下面的泊坞撰写文件会给你想要的东西:

component1: 
    image: component1-image 
    net: FooAppNet 
    container_name: component1 
    ports: 
    - "9000:9000" 
component2: 
    image: component2-image 
    net: FooAppNet 
    container_name: component2 

如果这些信息存储在一个docker-compose.yml文件,然后运行docker-compose up -d它将创建/启动/重新启动您的容器并将它们分配给您的网络。

-d标志以分离模式运行容器,并防止在启动容器时将日志输出打印到终端窗口。您仍然可以通过docker logs -f ...与其他任何容器一样获得日志。

然后,您可以使用docker-compose downdocker-compose restart等来控制集合的生命周期。顺便说一下,using variables可以使定义文件变得更加灵活。

请参阅以下有关使用由docker撰写自动启动的网络的评论。

+0

单独运行'docker network create --driver bridge'使它成为一切,好吧,不是独立的。 (双关语意)。还发布了关于后者的关键部分[现在是一个单独的问题](http://stackoverflow.com/questions/35708873/how-do-you-define-a-network-in-a-version-2-docker-compose -definition文件)。 – matanster

+0

为了享受通过撰写为项目创建的默认网络,还需要从配置中删除上面的'net:'行。总之,请看这里 - https://docs.docker.com/compose/networking/ – matanster