开发者社区> luckyharry4> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

第三口docker的感觉——docker compose

简介:
+关注继续查看

我们为什么需要docker compose呢?

现在大行其道的微服务架构,是由多个service组成的,在web应用中数据库也是必不可少的,那么这些组件就成了我一个项目的标配,那么我们如果把这一组映射到docker世界里去呢?docker-compose就可以作为这一组的体现。总结起来docker compose可以给我们带来的好处是:

  1. 避免了我们手动创建多个 dockerfile,多个image,多个容器。减少了我们的工作量。
  2. 启动停止删除可以被一次处理。

什么是docker compose呢?

其实就是一个docker的批处理工具。通过yml文件定义多容器的docker应用。

通过一条命令可以通过yml定义创建启动管理同属于一个"group"的容器。

Docker-compose.yml:

  • Services
  • Networks
  • Volumes
Services:

一个Services就相当于一个container,这个container可以从docker hub获取或者是dockerfile进行构建

我们在service中可以指定network和volume。

我们之前是这样启动docker 容器的如下:

docker run --network my-network -v postgre-data:/var/lib/postgresql/data postgres:9.4

这里启动了一个postgresql的数据库,那如果在docker compose中我们应该如何做呢?

services:
    postgre-db:
        image: postgresql:9.4
        volume: 
            - "postgre-data:/var/lib/postgresql/data"
        network: 
            - my-network

我们很明显的可以看出来他们之间一个对应的关系。

service它的直接孩子指定的是容器的名称,然后他的孩子分别是image,volume,network这些。

⚠️ 这是从docker hub获取下来的image,如果是通过自己的dockerfile该如何写呢?

services:
    my-docker:
        build: ./my-docker
        networks:
            - my-network

那很多人会奇怪了,这个"postgre-data"和"my-network"是从哪里来的呢?别急,我们看一下完整的docker compose的yaml:

services:
    postgre-db:
        image: postgresql:9.4
        volume:
            - "postgre-data:/var/lib/postgresql/data"
        network:
            - my-network

volumes:
    postgre-data

networks:
    my-network:
        driver: briage

这下子水落石出了,和services同级的地方,有定义volumes和networks。折合前面举例子的docker compose三要素正好对应上了。

更详细的docker-compose yaml文件的属性,可以参考https://docs.docker.com/compose/compose-file/

Docker compse 常用命令

Docker compose启动的命令为

docker-compose up

Docker compose 查看当前compose中运行的container

docker-compose ls

Docker compose 停掉所有运行的container

docker-compose stop

Docker compose 移除所有停止的container

docker-compse rm

Docker compose 停止并且移除servies,networks,volumes

docker-compose down

⚠️这个命令不会删除本地的images。

其他更多详细的内容命令,请查看https://docs.docker.com/compose/reference/

或者使用docker-compose - -help 查看。

Docker compose的拓展

我前面有提到过docker compose就是为了微服务的理念而生的,微服务只是从业务逻辑上的一种拆分。那如果负载在高的情况下,我们怎么才能抵抗住这种压力呢?那就得使用load balance(负载均衡)了。负载均衡在docker中也是有所体现的。

我们可以使用如下命令进行扩展:

#SERVICE 指的是你在docker compose中定义的名字,NUM指定的是你想要的数量
docker-compose up --scale SERVICE=NUM

这样就可以对自己的服务进行自由的伸缩。

⚠️前提是我们需要在我们的compose中安排一个loadbalance

可以参考:https://github.com/docker/dockercloud-haproxy

英语不好的可以参考https://www.jianshu.com/p/4a2281bfb1cc

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
docker-compose的使用
docker-compose搭建mysql和tomcat
51 0
Docker Compose的使用
Docker Compose的使用一、背景   继上篇文章之后,学习使用Docker Compose(实际项目中需要做对应的变化) 二、docker-compose 安装   官网使用最新版进行安装  https://github.
1803 0
什么,容器太多操作不过来?我选择Docker Compose梭哈(下)
什么,容器太多操作不过来?我选择Docker Compose梭哈(下)
141 0
[翻译] 理解Docker容器网络
理解Docker容器网络 翻译自Understand Docker container networks 如果你需要创建互相协作并安全的web应用,使用Docker的网络的特性可以帮你解决。定义上,网络为容器了完全的隔离性,所以,控制你的应用程序运行所在的网络很重要。Docker的网络特性变提供
10792 0
1期:理解Docker容器的进程管理(原云栖速递)
云栖头条 理解Docker容器的进程管理 Docker在进程管理上有一些特殊之处,如果不注意这些细节中的魔鬼就会带来隐患。同时,在Docker容器中运行多进程应用
2718 0
+关注
luckyharry4
2018年应届大学生,一个IT界小菜鸟。
39
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载