🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
#Docker:组合 ###定义服务 vi docker-compose.yml ``` version: '2' services: phoenix: image: nginx ports: - "8080:80" dragon: image: nginx ports: - "8081:80" ``` ###启动服务 ``` // 启动服务 docker-compose up // 通过浏览器访问 http://192.168.99.100:8080/ http://192.168.99.100:8081/ // 回到终端,这里会显示容器里面的一些日志,每条日志的前面会标注一下这个日志来自哪一个服务容器,ctrl+c可以停止它们,这些服务我们可以让它在后台去运行 docker-compose up -d // 查看一下正在运行的容器 docker ps ``` ###服务的生命周期 ``` // 查看应用的服务 docker-compose ps // 停止phoenix服务 docker-compose stop phoenix // 停止所有在docker-compose.yml文件中定义的服务 docker-compose stop // 重新启动phoenix服务 docker-compose start phoenix // 启动所有服务 docker-compose start // 查看服务的日志 docker-compose logs // 持续跟踪服务日志的变化 docker-compose logs -f // 登录到phoenix服务容器中 docker-compose exec phoenix bash // 要删除应用的服务需要先把它们都停止掉 docker-compose stop // 删除所有服务的容器 docker-compose rm // 注意rm不会删除掉创建的网络还有数据卷 docker network ls // 这里的ninghaodocker_default就是我们的应用创建一个网络 // 如果想要删除所有的这些东西的话,可以使用 docker-compose down docker network ls ``` ###网络 网络决定了服务之间还有外界跟服务之间怎么样去进行沟通,在执行docker-compose up的时候,docker会给我们创建一个默认的网络,所有的服务也会属于这个默认的网络,服务跟服务之间可以使用服务的名字进行相互的通信,我们也可以创建自己的网络,然后让指定的服务加入到我们自己创建的这些网络里面,那么这样的话属于这个网络的服务之间可以进行通信,网络以外的服务就不能够去跟它们进行通信了, 这样的话会对这个服务有一个隔离的作用,让应用更安全一些 ``` docker-compose up -d docker-compose exec phoenix bash ping dragon exit docker-compose exec dragon bash ping phoenix ``` ###定义网络 ``` version: '2' services: phoenix: image: nginx ports: - "8080:80" networks: - "fairyland" dragon: image: nginx ports: - "8081:80" networks: - "fairyland" monkey: image: nginx ports: - "8082:80" networks: - "default" networks: fairyland: driver: bridge ``` ``` // 重新启动服务 docker-compose up -d docker-compose exec phoenix bash ping dragon ping monkey // dragon能ping通,monkey不能ping通 ``` ###命名的数据卷 ``` version: '2' services: phoenix: image: nginx ports: - "8080:80" networks: - "fairyland" volumes: - nest:/mnt dragon: image: nginx ports: - "8081:80" networks: - "fairyland" volumes: - nest:/mnt monkey: image: nginx ports: - "8082:80" networks: - "default" networks: fairyland: driver: bridge volumes: nest: driver: local ``` ``` docker-compose up -d docker-compose exec phoenix bash cd /mnt touch phoenix_data_1 ls exit docker-compose exec dragon bash cd /mnt ls ``` ###指定位置的数据卷 docker-compose.yml ``` version: '2' services: phoenix: image: nginx ports: - "8080:80" networks: - "fairyland" volumes: - nest:/mnt - ./app/web:/usr/share/nginx/html dragon: image: nginx ports: - "8081:80" networks: - "fairyland" volumes: - nest:/mnt - ./app/web:/usr/share/nginx/html monkey: image: nginx ports: - "8082:80" networks: - "default" networks: fairyland: driver: bridge volumes: nest: driver: local ``` ![](https://box.kancloud.cn/e27ddbbc13c1f2474cbe21027368f8ee_856x667.png) index.html ``` <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Hello Docker</title> </head> <body> Hello Docker! </body> </html> ``` ![](https://box.kancloud.cn/46a2ba1a6a38dd3f34f23f76ffd256c8_740x263.png) ``` docker-compose up -d ``` ![](https://box.kancloud.cn/2e362195b446504867d1613ae57b182a_961x212.png) .env 用来解决上面的报错 ``` COMPOSE_CONVERT_WINDOWS_PATHS=1 ``` 浏览器访问 http://192.168.99.100:8080/ 和 http://192.168.99.100:8081/ ![](https://box.kancloud.cn/9e98dd2e79e281abbb36bc800fa62ce2_439x110.png) ![](https://box.kancloud.cn/5de1e77137289f14b220c65d67dc5496_430x107.png) 注意:指定位置的数据卷需要在C:\Users目录下,因为VirtualBox只对这个目录有访问权限 ![](https://box.kancloud.cn/a953e3f5e2495a3b0d61f3477b81ebfc_768x572.png)