当前位置: 首页 > news >正文

微服务自动化docker-compose

一、docker-compose介绍


Docker Compose是一个用来定义和运行多个复杂应用的Docker编排工具。例如,一个使用Docker容器的微服务项目,通常由多个容器应用组成。那么部署时如何快速启动各个微服务呢,一个个手动启动?假如有上百个微服务呢,显然不现实,那么使用Docker Compose编排工具便可快速启动容器。

Compose 通过一个配置文件来管理多个Docker容器,在配置文件中,所有的容器通过services来定义,然后使用docker-compose脚本来启动,停止和重启应用,和应用中的服务以及所有依赖服务的容器,非常适合组合使用多个容器进行开发的场景。

二、docker-compose简介及基础概念


docker-compose项目是docker官方的开源项目, 负责实现对docker容器集群的快速编排。

docker-compose将所管理的容器分为三层, 分别是工程(project),服务(service)以及容器(containner)

docker-compose运行目录下的所有文件(docker-compose.yml文件、extends文件或环境变量等)组成一个工程,如无特殊指定,工程名即为当前目录名。
一个工程当中,可以包含多个服务,每个服务中定义了容器运行的镜像、参数、依赖。
一个服务中可以包括多个容器实例,docker-compose并没有解决负载均衡的问题。因此需要借助其他工具实现服务发现及负载均衡,比如consul。
docker-compose的工程配置文件默认为docker-compose.yml。可以通过环境变量COMPOSE_FILE -f 参数自定义配置文件,其自定义多个有依赖关系的服务及每个人服务运行的容器。 

三、为什么要使用docker-compose


我们知道,一个单独的容器项目,我们很容易可以使用一个Dockerfile模板文件。在工作中,经常会碰到需要多个容器相互配合的微服务项目来完成某项任务的情况,例如要实现一个web项目,除了web服务容器本身,往往还需要再加上后端的数据库服务容器,负载均衡容器等基础服务,还有多个微服务项目需要启动,单独手动启动肯定会相当繁琐,那么docker-compose就应运而生了。

compose允许用户通过一个单独docker-compose.yml模板文件(YAML格式)来定义一组相关联的应用容器为一个项目(project),然后操作这个项目(project)即可对所有容器进行高效操作了。

docker-compose项目由pypthon编写,调用docker服务提供的API来对容器进行管理,因此, 只要所操作的平台支持docker-API,就可以在其上利用conpose来进行编排管理。

简单来说:就是来管理多个容器的,定义启动顺序的,合理编排,方便管理。

docker-compose将所管理的容器分为3层结构:

project1一个微服务项目
serviceN由N个微服务组成
containerN而每个微服务又由N个节点组成

docker-compose.yml组成一个project,project里包括多个service,每个service定义了容器运行的镜像(或构建镜像)

四、安装docker-compose

1.安装docker-compose

#下载docker-compose文件
curl -L https://github.com/docker/compose/releases/download/1.21.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose#将文件复制到/usr/local/bin环境变量下面
mv docker-compose /usr/local/bin#给他一个执行权限
chmod +x /usr/local/bin/docker-compose#查看是否安装成功
docker-compose -version

2.卸载docker-compose

# 卸载docker-compose
rm  /usr/local/bin/docker-compose

五、使用docker-compose编排springboot项目

1.创建docker-compose目录

mkdir ~/docker-compose
cd  ~/docker-compose

 2.编写docker-compose.yml文件

version: "3"
services:redis:image: redis:alpineports:- "6379"networks:- frontenddeploy:replicas: 2update_config:parallelism: 2delay: 10srestart_policy:condition: on-failuredb:image: postgres:9.4volumes:- db-data:/var/lib/postgresql/datanetworks:- backenddeploy:placement:constraints: [node.role == manager]vote:image: dockersamples/examplevotingapp_vote:beforeports:- 5000:80networks:- frontenddepends_on:- redisdeploy:replicas: 2update_config:parallelism: 2restart_policy:condition: on-failureresult:image: dockersamples/examplevotingapp_result:beforeports:- 5001:80networks:- backenddepends_on:- dbdeploy:replicas: 1update_config:parallelism: 2delay: 10srestart_policy:condition: on-failureworker:image: dockersamples/examplevotingapp_workernetworks:- frontend- backenddeploy:mode: replicatedreplicas: 1labels: [APP=VOTING]restart_policy:condition: on-failuredelay: 10smax_attempts: 3window: 120splacement:constraints: [node.role == manager]visualizer:image: dockersamples/visualizer:stableports:- "8080:8080"stop_grace_period: 1m30svolumes:- "/var/run/docker.sock:/var/run/docker.sock"deploy:placement:constraints: [node.role == manager]networks:frontend:backend:volumes:db-data:

可以看到,在docker-compose.yml文件中我们可以在services目录下定义多个容器服务,当启动我们的docker-compose时,services下的服务会依次启动。

3.启动docker-compose

docker-compose -f docker-compose.yaml up -d  //-f调用文件。-d:开启守护进程

六、docker-compose.yml文件配置常用字段及说明 

七、Docker-compose常用命令 

查看版本信息

docker-compose -v

构建并启动容器

docker-compose up

启动单个服务

docker-compose up 服务名称

后台启动服务

docker-compose up -d

停止和删除容器、网络、卷、镜像

docker-compose down

启动指定服务或启动所有服务

docker-compose start [服务名称]

停止指定服务或停止所有服务

docker-compose stop [服务名称]

列出所有运行容器

docker-compose ps

进入指定容器

docker-compose exe

删除所有(停止状态的)服务容器

docker-compose rm

参数:

-f:强制直接删除,包括非停止状态的容器

-v:删除容器所挂载的数据卷 

八.docker-compose 网络

指定网络模式

version: '3'
services:
nginx:
container_name: my-nginx
image: nginx
ports:
- 9999:80
volumes:
- /home/nginx/html:/usr/share/nginx/html
- /home/nginx/conf.d:/etc/nginx/conf.d
- /home/nginx/log:/var/log/nginx
restart: always
network_mode: "bridge"

写法 

network_mode:"bridge"
network_mode:"host"
network_mode:"none"
network_mode:"service:[service_name]"
network_mode:"container:[container name/id]"

引用外部已存在的网络

 

version: '3'
services:
nginx:
container_name: my-nginx
image: nginx
ports:
- 9999:80
volumes:
- /home/nginx/html:/etc/nginx/html
- /home/nginx/conf.d:/etc/nginx/conf.d
- /home/nginx/log:/var/log/nginx
restart: always
networks:
- test-net
networks:
test-net:
external:
name: mynet

自定义网络

version: '3'
services:
nginx:
container_name: my-nginx
image: nginx
ports:
- 9999:80
volumes:
- /home/nginx/html:/etc/nginx/html
- /home/nginx/conf.d:/etc/nginx/conf.d
- /home/nginx/log:/var/log/nginx
restart: always
networks:
test-net:
ipv4_address: 192.168.101.110
networks:
test-net:
driver: bridge
ipam:
config:
- subnet: 192.168.101.0/24
gateway: 192.168.101.1

相关文章:

  • 软件测试实习生的最后一天,四小时四场技术面试(三)
  • 基于uniapp封装的card容器 带左右侧两侧标题内容区域
  • 安卓adb
  • PHP开发日志 ━━ 不同方法判断某个数组中是否存在指定的键名,测试哪种方法效率高
  • 2024.01.09.Apple_UI_BUG
  • Android Retrofit使用详情
  • 行云部署成长之路 -- 慢 SQL 优化之旅 | 京东云技术团队
  • useContext
  • RetryTemplate
  • c# 人脸识别的思路
  • 【C++】取整函数ceil(),floor(),round()
  • vue computed计算不到数组或者对象的变化
  • 什么是云服务器ECS - 云服务器 ECS - 阿里云
  • zookeeper下载安装部署
  • C++学习笔记(三十四):c++ array
  • #Java异常处理
  • 【跃迁之路】【733天】程序员高效学习方法论探索系列(实验阶段490-2019.2.23)...
  • 2017届校招提前批面试回顾
  • CentOS 7 防火墙操作
  • CentOS7 安装JDK
  • Idea+maven+scala构建包并在spark on yarn 运行
  • Javascript Math对象和Date对象常用方法详解
  • JavaScript创建对象的四种方式
  • Java到底能干嘛?
  • java概述
  • MD5加密原理解析及OC版原理实现
  • Median of Two Sorted Arrays
  • python 装饰器(一)
  • react-native 安卓真机环境搭建
  • 百度小程序遇到的问题
  • 腾讯优测优分享 | 你是否体验过Android手机插入耳机后仍外放的尴尬?
  • 小程序 setData 学问多
  • 一个普通的 5 年iOS开发者的自我总结,以及5年开发经历和感想!
  • mysql面试题分组并合并列
  • 关于Kubernetes Dashboard漏洞CVE-2018-18264的修复公告
  • ​低代码平台的核心价值与优势
  • #pragma once
  • #pragma 指令
  • (14)学习笔记:动手深度学习(Pytorch神经网络基础)
  • (4)通过调用hadoop的java api实现本地文件上传到hadoop文件系统上
  • (ZT)薛涌:谈贫说富
  • (附源码)node.js知识分享网站 毕业设计 202038
  • (附源码)ssm旅游企业财务管理系统 毕业设计 102100
  • (原創) 系統分析和系統設計有什麼差別? (OO)
  • (终章)[图像识别]13.OpenCV案例 自定义训练集分类器物体检测
  • (转)Oracle 9i 数据库设计指引全集(1)
  • .CSS-hover 的解释
  • .net 7 上传文件踩坑
  • .net core 6 使用注解自动注入实例,无需构造注入 autowrite4net
  • .NET Core工程编译事件$(TargetDir)变量为空引发的思考
  • .NET Core日志内容详解,详解不同日志级别的区别和有关日志记录的实用工具和第三方库详解与示例
  • .NET:自动将请求参数绑定到ASPX、ASHX和MVC(菜鸟必看)
  • /etc/sudoer文件配置简析
  • @Transactional 竟也能解决分布式事务?
  • [ 常用工具篇 ] AntSword 蚁剑安装及使用详解