希望长大对我而言,是可以做更多想做的事,而不是被迫做更多不想做的事...... 首页 Compose和Swarm 丁D 学无止境 2019-04-23 17:38 2648已阅读 Compose Machine Swarm 摘要Docker-Compose是一个工具可以一次性运行/停止多个容器。 Docker-Swarm是一个docker集群管理工具。 #Docker-Compose Docker-Compose是一个工具可以一次性运行/停止多个容器。使用一个yam文件来配置我们的应用程序。 docker-compose.yml文件主要分为3部分version,services,network,最主要的是services,network。 **version **值为1,2,3 3能兼容2的功能,1没人用,所以使用3。 **services **用来定义服务,每一个服务对应一个容器。 **network **用来设置网络,容器与容器的交互。 ###helloworld 定义docker-compose.yml文件 ```js 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 来挂载代码目录,这样做当代码改变不用重新构建镜像。 ```js //使用下面命令来一次性运行docker-compose定义的容器 docker-compose up ``` ###常用命令 ```js //在后台运行 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 ``` ###多个yam文件 没有新增,有的覆盖。 docker-compose 命令默认使用的配置文件是当前目录中的 docker-compose.yml 文件;; ```js //可以使用-f来指定文件。 docker-compose -f docker-compose-dev.yml up ``` ```js //我们可以添加多个 -f 选项,docker-compose 会自动合并它们,当然也会根据先后顺序把一些重复的配置项覆盖掉 $ docker-compose -f docker-compose-base.yml -f docker-compose-dev.yml ``` ```js //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 地址](https://github.com/vishnubob/wait-for-it) 3.可以将服务分成两个docker-compose文件,分别启动,两者使用同一个网络。 ###网络模块 该模块不能支持version为1的,只能支持2及2以上。 默认情况下compose会默认生成一个网络(名:工程名/目录名),所有的service都会加入这个网络中,这样就可以相互通信。 注意:当我们重新 **docker-compose up**旧的容器会被干掉,会重新生成新的容器,并且ip地址发生改变,但是名字没变。 **两个yml文件的容器通信??**两种 1.加入同一网络 2.使用links **加入已存在的网络 **如下面不会创建新默认网络,会直接加入my-pre-existing-network网络 ```js networks: default: external: name: my-pre-existing-network ``` #Docker-Swarm Docker-Swarm是一个docker集群管理工具,有了它整个集群就能协同工作。可以跨节点; ###常用命令 ```js docker swarm init --advertise-addr 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 删除服务 ``` ###安装swarm 创建集群 设置manager节点 加入集群 部署服务 负载均衡 新增实例 路由 docker stack deploy 很赞哦! (2) 上一篇:Jenkins+GitLab+Ansible 下一篇:k8s初识 目录 点击排行 Elasticsearch6.3.2之x-pack redis哨兵 2019-07-09 22:05 Redis+Twemproxy+HAProxy+Keepalived 2019-07-12 17:20 GC优化策略和相关实践案例 2019-10-10 10:54 JVM垃圾回收器 2019-10-10 10:23 标签云 Java Spring MVC Mybatis Ansible Elasticsearch Redis Hive Docker Kubernetes RocketMQ Jenkins Nginx 友情链接 郑晓博客 佛布朗斯基 凉风有信 MarkHoo's Blog 冰洛博客 南实博客 Rui | 丁D Java研发工程师 生活可以用「没办法」三个字概括。但别人的没办法是「腿长,没办法」、「长得好看,没办法」、「有才华,没办法」。而你的没办法,是真的没办法。 请作者喝咖啡