🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
上面已经将原本在一个容器中运行的服务分拆到多个容器,每个容器只运行单一服务。这样一来容器之间需要能互相通信。Docker容器间通讯的方法有两种,一种是像上文这样将容器端口绑定到一个本地端口,通过端口通讯。另一种则是通过Docker提供的[Linking功能](https://docs.docker.com/userguide/dockerlinks/),在开发环境下,通过Linking通信更加灵活,也能避免端口占用引起的一些问题,比如可以通过下面的方式将Nginx和PHP链接起来: ~~~ docker run -p 9000:9000 -v ~/opt:/opt --name php -it eva/php docker run -p 80:80 -v ~/opt:/opt -it --link php:php eva/nginx ~~~ 在一般的PHP项目中,Nginx需要链接PHP,而PHP又需要链接MySQL,Redis等。为了让容器间互相链接更加容易管理,Docker官方推荐使用[Docker-Compose](https://docs.docker.com/compose/)完成这些操作。 用一行指令完成安装 ~~~ pip install -U docker-compose ~~~ 然后在Docker项目的根目录下准备一个docker-compose.yml文件,内容为: ~~~ nginx: build: ./nginx ports: - "80:80" links: - "php" volumes: - ~/opt:/opt php: build: ./php ports: - "9000:9000" links: - "mysql" - "redis" volumes: - ~/opt:/opt mysql: build: ./mysql ports: - "3306:3306" volumes: - ~/opt/data/mysql:/var/lib/mysql environment: MYSQL_ROOT_PASSWORD: 123456 redis: build: ./redis ports: - "6379:6379" ~~~ 然后运行`docker-compose up`,就完成了所有的端口绑定、挂载、链接操作。