前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Compose和Swarm

Compose和Swarm

作者头像
丁D
发布2022-08-12 21:50:20
3970
发布2022-08-12 21:50:20
举报
文章被收录于专栏:老铁丁D老铁丁D

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文件

代码语言:javascript
复制
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 来挂载代码目录,这样做当代码改变不用重新构建镜像。

代码语言:javascript
复制
//使用下面命令来一次性运行docker-compose定义的容器 
docker-compose up 

常用命令

代码语言:javascript
复制
//在后台运行 
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 文件;;

代码语言:javascript
复制
//可以使用-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网络

代码语言:javascript
复制
networks: 
default: 
external: 
name: my-pre-existing-network 

Docker-Swarm

Docker-Swarm是一个docker集群管理工具,有了它整个集群就能协同工作。可以跨节点;

常用命令

代码语言:javascript
复制
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 删除服务 

安装swarm

创建集群 设置manager节点 加入集群 部署服务 负载均衡 新增实例 路由 docker stack deploy

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-04-23 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Docker-Compose
    • helloworld
      • 常用命令
        • 多个yam文件
          • 启动顺序
            • 网络模块
            • Docker-Swarm
              • 常用命令
                • 安装swarm
                相关产品与服务
                容器服务
                腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档