Docker-Compose是一个工具可以一次性运行/停止多个容器。使用一个yam文件来配置我们的应用程序。 docker-compose.yml文件主要分为3部分version,services,network,最主要的是services,network。 version 值为1,2,3 3能兼容2的功能,1没人用,所以使用3。 services 用来定义服务,每一个服务对应一个容器。 network 用来设置网络,容器与容器的交互。
定义docker-compose.yml文件
version: '3'
services:
web:
build: .
ports:
- "5000:5000"
volumes:
- .:/code
redis:
image: "redis:alpine"
如上面代码中: 1.定义两个容器web,redis,web容器使用build来指定镜像文件。通过Dockerfile文件来构建。 redis使用已经存在的镜像本地没有会去docker hub下载。 2.volumes 来挂载代码目录,这样做当代码改变不用重新构建镜像。
//使用下面命令来一次性运行docker-compose定义的容器
docker-compose up
//在后台运行
docker-compose up -d
//docker-compose ps 要带上文件不然默认docker-compose.yaml,不带文件会空
docker-compose ps
docker-compose run 命令允许你为你的应用程序运行一次性命令。例如,查看哪些环境变量可以用于 web 服务:
docker-compose run web env
如果你使用 docker-compose up -d 启动了 Compose,你可能希望在它们运行完成后停止服务
docker-compose stop
你可以停掉所有一切,使用 down 命令完全移除容器。传递 —volumes 还可以删除 Redis 容器中所使用的数据卷。
docker-compose down --volumes
没有新增,有的覆盖。 docker-compose 命令默认使用的配置文件是当前目录中的 docker-compose.yml 文件;;
//可以使用-f来指定文件。
docker-compose -f docker-compose-dev.yml up
//我们可以添加多个 -f 选项,docker-compose 会自动合并它们,当然也会根据先后顺序把一些重复的配置项覆盖掉
$ docker-compose -f docker-compose-base.yml -f docker-compose-dev.yml
//config不会真的执行。
docker-compose -f docker-compose-base.yml -f docker-compose-dev.yml config>ttt.yml
在实际开发过程中我们服务的启动往往是有一定的顺序的。但是docker-compose并不能保证服务的启动顺序。 我们可以使用depends_on来控制服务的启动顺序,比如本博客服务依赖数据库服务,所以可以控制数据库服务先启动,但是却不能确保数据库服务是否完成启动,所以博客服务可能出现依赖错误。
处理方案: 1.在博客服务代码中设计,启动后重试连接数据库,最终成功连接 2.同步等待,使用wait-for-it.sh或者其他shell脚本将当前服务启动阻塞,直到被依赖的服务加载完毕。 wait-for-it 地址 3.可以将服务分成两个docker-compose文件,分别启动,两者使用同一个网络。
该模块不能支持version为1的,只能支持2及2以上。
默认情况下compose会默认生成一个网络(名:工程名/目录名),所有的service都会加入这个网络中,这样就可以相互通信。 注意:当我们重新 docker-compose up旧的容器会被干掉,会重新生成新的容器,并且ip地址发生改变,但是名字没变。
两个yml文件的容器通信??两种 1.加入同一网络 2.使用links
加入已存在的网络 如下面不会创建新默认网络,会直接加入my-pre-existing-network网络
networks:
default:
external:
name: my-pre-existing-network
Docker-Swarm是一个docker集群管理工具,有了它整个集群就能协同工作。可以跨节点;
docker swarm init --advertise-addr <MANAGER1-IP>
docker info
docker node ls
docker node ps
docker service ls来查看运行的服务:
运行命令docker service inspect --pretty 来查看优化显示的服务详情
运行docker service ps 将查看到哪些节点在运行该服务实例:+
docker service scale 060zo3u0g3mj=3 改变服务的期望实例数:
docker service rm 060zo3u0g3mj 删除服务
创建集群 设置manager节点 加入集群 部署服务 负载均衡 新增实例 路由 docker stack deploy