docker-compose安装使用总结

大纲

  • 简介
  • 编排与部署
  • 安装与使用
  • docker-compose 工作流程
  • docker-compose.yml 模板文件配置说明
  • docker-compose 命令说明

简介

docker Compose(https://docs.docker.com/compose/)

它是一个用于定义和运行多容器Docker 应用程序的命令行工具。
使用 Docker Compose,你可以在 YAML 文件中定义要运行的服务,然后通过 docker-compose 命令来启动服务。

docker-compose 中的核心概念就是 service, 每一个容器定义为一个service

docker-compose作用

  • 1构建Docker镜像
  • 2启动容器化的应用及服务 (多服务的快速编排
  • 3启动完整的服务系统
  • 4管理系统中的单个服务的状态
  • 5服务伸缩
  • 6查看生成服务的容器的收集日志

编排与部署

编排 (orchestration)【窝颗死催新】

基于被部署对象**(多个)**之间的耦合关系(及某一个对象必须依赖其他对象部署完成后才能部署) 以及对象
之间的环境依赖(需要在同一个网络环境中),定制部署流程中的各个动作的执行顺序

部署 (deployment)

将对象在对应的机器上初始化,配置启动

编排侧重的是多个有依赖关系的服务的集合部署

安装与使用

docker-compose 就是一个脚本文件,只需要下载对应的脚本并对其赋予可执行权限即可

下载地址: https://github.com/docker/compose/releases

安装

1 下载docker-compose (可能网络原因无法下载)

curl -L https://github.com/docker/compose/releases/download/1.18.0/docker-compose-uname -s-uname -m -o /usr/local/bin/docker-compose

2 配置提示 (可能网络原因无法下载)

mkdir -pv ~/.local/share/bash-completion/completions/
curl -L https://raw.githubusercontent.com/docker/compose/1.18.0/contrib/completion/bash/docker-compose -o ~/.local/share/bash-completion/completions/

注意: 可能下载超时可以使用百度云盘上的docker-compose (版本1.18.0)放置在 /usr/local/bin下即可

3 给docker-compose执行权限

chmod +x /usr/local/bin/docker-compose 给docker-compose执行权限

4 验证安装结果

docker-compose --version 测试安装是否成功,成功的话打印出docker-compose的版本信息

在这里插入图片描述

快速使用
docker-compose -f compose.yml up -d 后台运行
docker-compose -f compose.yml up -d

docker-compose up 本质是docker-compose logs -f,它会收集所有容器的日志输出直到退出命令,或者容器都停止运行。
docker-compose up -d 以后台的方式运行容器。不会在终端上打印运行日志

docker-compose 工作流程

https://docs.docker.com/compose/networking/

当运行docker-compose up命令时,会做一下事情:

  • 1 创建一个名为xxx_default 的network
  • 2 根据配置创建container 加入xxx_default network 并且hostname为配置的container 名称

默认情况下docker-compose会建立一个默认的网络,名称为docker-compose.yml所在目录名称小写形式加上“_default”

在这里插入图片描述

每个service的container会加入这个default网络并且能够被这个网络上的其他container访问到,hostname就是container的name,通过这个hostname可以发现container

例如

services: 
  web:
    image: xxx
    port:
      - 80:80
  db:
    image: mysql
    prots:
      3306:3306    

web container内的进程可以使用mysql://db:5432访问db服务。 宿主机上的程序可以使用mysql://{DOCKER_IP}:8001 访问db服务。

docker-compose.yml 模板文件配置说明

在这里插入图片描述
在这里插入图片描述

link

常用的关键参数,可以让编排的服务之间的网络联通,注意程序中需要使用link name访问

user-service:
  ...
goods-service: 
  ...
order-service:          
links: 
  - user-service 【服务名称】  
  - goods-service:gdService 【服务名称】:【服务名称别名】

程序内不同服务间请求访问

UserEntity user = r.getForObject("http://user-service:5588/getUserEntityById?id=1", UserEntity.class);
GoodsEntity goods = r.getForObject("http://goods-service:5599/getGoodsEntityById?id=34", GoodsEntity.class);
		
UserEntity user = r.getForObject("http://usService:5588/getUserEntityById?id=1", UserEntity.class);
GoodsEntity goods = r.getForObject("http://gdService:5599/getGoodsEntityById?id=34", GoodsEntity.class);
			

volume | volume_from

volume 常用的关键参数 , 实现容器内部文件夹与主机文件夹的挂载
volumes_from允许您从另一个服务或容器挂载所有数据或卷,则必须指定访问级别

port 暴露端口

用于配置服务暴露的端口

ports:
  #容器内的端口 与 主机端口映射   
  - 9000:9000
  # 暴露多个端口 如下容器12201到12210的端口与主机12201到12210映射
  - 12201-12210:12201-12210
  # 如果加一个/ 表示支持协议 tcp 或 udp
  - 12201:12201/udp

depends_on

配置服务依赖关系,启动时先启动依赖的服务,注意配置在需要有依赖的服务上

graylog:
 depends_on:
  - mongodb
  - elasticsearch

network

可以指定编排服务中的网络,用于网络隔离

使用方式network

  • 1 配置在外层
  • 2 服务内
# 与services: 同级外层
networks: 
   #网络的名字,可以自定义定 如果是default 着替换默认的网络
   #还可以配置ip
   # external: 使用external来使用指定已经存在的网络
   #   name: bridge2
   mynetwork1: 
      driver: bridge
   mynetwork2:
      driver: bridge
      
services:  
   user-service:   
      #服务内配置网络 使用外层定义好的网络
      networks:
         - mynetwork1
         - mynetwork2
      #配置网络后 容器内使用ip访问可以
      #但是如果想使用服务名http://gdService:5577 访问还需要配置link   
      links: 
         - goods-service:gdService   
         
   goods-service:
       #服务内配置网络 使用外层定义好的网络
       networks:
         - mynetwork1   
   
   order-service:   
      #服务内配置网络 使用外层定义好的网络
      networks:
         - mynetwork2 
      links: 
         - user-service:usService     
         - goods-service:gdService             

使用docker network ls 查看出创建的网络

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tta5ZTD1-1674899460672)(4.5.png)]

基于上面的配置

  • user-service 与 order-service 在一个网络中可以互通
  • user-service 与 goods-service 在一个网络中可以互通
  • goods-service 与 order-service 不在一个网络中 无法通信

dns

可以自定义DNS服务器

dns: 8.8.8.8
dns:
  - 9.9.9.9
  - 8.8.8.8

extends

docker-compose 命令说明

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PMYHhGIE-1674899460673)(5.1.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-w9yfVzNI-1674899460673)(5.2.png)]

up
up是最重要的一个语句,可以创建镜像,创建服务,启动服务 (初始的时候必用)

docker-compose -f use-dockerfile.yml up  前台启动
docker-compose -f use-dockerfile.yml up  -d 后台启动

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JcELc1Ae-1674899460673)(4.0.png)]

ps
查看项目中的容器

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-h3rHYpbO-1674899460674)(4.2.png)]

stop start restart
停止 起动 重启 服务项

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5Qf21OnV-1674899460674)(4.4.png)]

down 停止服务栈
注意down后就无法使用 start restart命令了

docker-compose -f use-dockerfile.yml down

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2ZI2oDGh-1674899460675)(4.1.png)]

logs 打印容器组日志

docker-compose -f use-dockerfile.yml logs -f  打印容器组的日志
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

寂寞的4角钱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值