源码下载 [本节源码](https://dockertips.readthedocs.io/en/latest/_downloads/d08ec3fdb5d57a37e2ee3915bbee687f/compose-scale-example-1.zip)

环境清理

删除所有容器和镜像

  1. $ docker container rm -f $(docker container ps -aq)
  2. $ docker system prune -a -f

启动

下载源码,进入源码目录

  1. $ docker-compose pull
  2. $ docker-compose build
  3. $ docker-compose up -d
  4. Creating network "compose-scale-example_default" with the default driver
  5. Creating compose-scale-example_flask_1 ... done
  6. Creating compose-scale-example_client_1 ... done
  7. Creating compose-scale-example_redis-server_1 ... done
  8. $ docker-compose ps
  9. Name Command State Ports
  10. ----------------------------------------------------------------------------------------
  11. compose-scale-example_client_1 sh -c while true; do sleep ... Up
  12. compose-scale-example_flask_1 flask run -h 0.0.0.0 Up 5000/tcp
  13. compose-scale-example_redis-server_1 docker-entrypoint.sh redis ... Up 6379/tcp

水平扩展 scale

  1. $ docker-compose up -d --scale flask=3
  2. compose-scale-example_client_1 is up-to-date
  3. compose-scale-example_redis-server_1 is up-to-date
  4. Creating compose-scale-example_flask_2 ... done
  5. Creating compose-scale-example_flask_3 ... done
  6. $ docker-compose ps
  7. Name Command State Ports
  8. ----------------------------------------------------------------------------------------
  9. compose-scale-example_client_1 sh -c while true; do sleep ... Up
  10. compose-scale-example_flask_1 flask run -h 0.0.0.0 Up 5000/tcp
  11. compose-scale-example_flask_2 flask run -h 0.0.0.0 Up 5000/tcp
  12. compose-scale-example_flask_3 flask run -h 0.0.0.0 Up 5000/tcp
  13. compose-scale-example_redis-server_1 docker-entrypoint.sh redis ... Up 6379/tcp

负载均衡

  • 进入其中一个容器ping flask会进行DNS解析的负载均衡,每次取第一个实例(ip)返回
    九、Docker-Compose-水平扩展与负载均衡 - 图1
  • 访问5000端口运行程序也有负载均衡
    九、Docker-Compose-水平扩展与负载均衡 - 图2

    添加 nginx

    源码下载 [源码更新](https://dockertips.readthedocs.io/en/latest/_downloads/15ef8ef4c424aefda9ce24c71698051d/compose-scale-example-2.zip)