|
@@ -9,43 +9,24 @@ Still, Compose and Swarm can be useful in a “batch processing” scenario (whe
|
|
|
|
|
|
|
|
A number of things need to happen before full integration is achieved, which are documented below.
|
|
A number of things need to happen before full integration is achieved, which are documented below.
|
|
|
|
|
|
|
|
-Re-deploying containers with `docker-compose up`
|
|
|
|
|
-------------------------------------------------
|
|
|
|
|
-
|
|
|
|
|
-Repeated invocations of `docker-compose up` will not work reliably when used against a Swarm cluster because of an under-the-hood design problem; [this will be fixed](https://github.com/docker/fig/pull/972) in the next version of Compose. For now, containers must be completely removed and re-created:
|
|
|
|
|
-
|
|
|
|
|
- $ docker-compose kill
|
|
|
|
|
- $ docker-compose rm --force
|
|
|
|
|
- $ docker-compose up
|
|
|
|
|
-
|
|
|
|
|
Links and networking
|
|
Links and networking
|
|
|
--------------------
|
|
--------------------
|
|
|
|
|
|
|
|
The primary thing stopping multi-container apps from working seamlessly on Swarm is getting them to talk to one another: enabling private communication between containers on different hosts hasn’t been solved in a non-hacky way.
|
|
The primary thing stopping multi-container apps from working seamlessly on Swarm is getting them to talk to one another: enabling private communication between containers on different hosts hasn’t been solved in a non-hacky way.
|
|
|
|
|
|
|
|
-Long-term, networking is [getting overhauled](https://github.com/docker/docker/issues/9983) in such a way that it’ll fit the multi-host model much better. For now, containers on different hosts cannot be linked. In the next version of Compose, linked services will be automatically scheduled on the same host; for now, this must be done manually (see “Co-scheduling containers” below).
|
|
|
|
|
-
|
|
|
|
|
-`volumes_from` and `net: container`
|
|
|
|
|
------------------------------------
|
|
|
|
|
-
|
|
|
|
|
-For containers to share volumes or a network namespace, they must be scheduled on the same host - this is, after all, inherent to how both volumes and network namespaces work. In the next version of Compose, this co-scheduling will be automatic whenever `volumes_from` or `net: "container:..."` is specified; for now, containers which share volumes or a network namespace must be co-scheduled manually (see “Co-scheduling containers” below).
|
|
|
|
|
-
|
|
|
|
|
-Co-scheduling containers
|
|
|
|
|
-------------------------
|
|
|
|
|
-
|
|
|
|
|
-For now, containers can be manually scheduled on the same host using Swarm’s [affinity filters](https://github.com/docker/swarm/blob/master/scheduler/filter/README.md#affinity-filter). Here’s a simple example:
|
|
|
|
|
|
|
+Long-term, networking is [getting overhauled](https://github.com/docker/docker/issues/9983) in such a way that it’ll fit the multi-host model much better. For now, **linked containers are automatically scheduled on the same host**.
|
|
|
|
|
|
|
|
-```yaml
|
|
|
|
|
-web:
|
|
|
|
|
- image: my-web-image
|
|
|
|
|
- links: ["db"]
|
|
|
|
|
- environment:
|
|
|
|
|
- - "affinity:container==myproject_db_*"
|
|
|
|
|
-db:
|
|
|
|
|
- image: postgres
|
|
|
|
|
-```
|
|
|
|
|
|
|
+Building
|
|
|
|
|
+--------
|
|
|
|
|
|
|
|
-Here, we express an affinity filter on all web containers, saying that each one must run alongside a container whose name begins with `myproject_db_`.
|
|
|
|
|
|
|
+`docker build` against a Swarm cluster is not implemented, so for now the `build` option will not work - you will need to manually build your service's image, push it somewhere and use `image` to instruct Compose to pull it. Here's an example using the Docker Hub:
|
|
|
|
|
|
|
|
-- `myproject` is the common prefix Compose gives to all containers in your project, which is either generated from the name of the current directory or specified with `-p` or the `DOCKER_COMPOSE_PROJECT_NAME` environment variable.
|
|
|
|
|
-- `*` is a wildcard, which works just like filename wildcards in a Unix shell.
|
|
|
|
|
|
|
+ $ docker build -t myusername/web .
|
|
|
|
|
+ $ docker push myusername/web
|
|
|
|
|
+ $ cat docker-compose.yml
|
|
|
|
|
+ web:
|
|
|
|
|
+ image: myusername/web
|
|
|
|
|
+ links: ["db"]
|
|
|
|
|
+ db:
|
|
|
|
|
+ image: postgres
|
|
|
|
|
+ $ docker-compose up -d
|