您现在的位置是:首页 > 正文

Docker学习笔记(五)-Docker Compose

2024-04-01 00:13:31阅读 3

背景

很多应用是很复杂的,需要多个容器共同支持,任何复杂的系统可能需要启动的容器数量也很庞大,我们需要从Dockerfile build image或者docker hub拉取多个image,要创建并管理多个container,这个工作量是巨大的,docker compose应运而生

Docker Compose是什么

Docker Compose帮我们启动错综复杂的容器,开发测试人员只要提供一份docker-compose.yml文件即可,如图:
这里写图片描述

  • Docker Compose是一个基于docker的命令行工具
  • 可以通过一个yml文件定义多容器的docker应用
  • 通过一条命令docker-compose up就可以根据yml文件的定义去创建管理多个容器

例如我们运行一个WordPress,需要运行两个容器,一个运行WordPress,一个运行mysql服务,我们可以如下编写docker-compose.yml:

version:3.4
services:
    wordpress:
     image:wordpress
     ports:
        --8080:80
     environment:
        WORDPRESS_DB_HOST:mysql
        WORDPRESS_DB_PASSWORD:root
     networks:
        -mybridge

    mysql:
     image:mysql
     environment:
            MYSQL_ROOT_PASSWORD:root
            MYSQL_DATABASE:wordpress
          volumes:
            -mysql-data:/var/lib/mysql
           networks:
            -mybridge

volumes:
    mysql-data:

networks
    mybridge:
        driver:bridge

通过运行docker-compose up命令启动yml文件,就可以启动两个service(container)组成一个WordPress服务。

docker-compose.yml有三个核心概念

  • services
    • 一个service代表一个containe
    • service的启动类似docker run,可以指定network和volume
  • volumes
    • 定义容器使用的存储
  • networks
    • 定义容器使用的网络

docker-compose updocker run之间的关系,对于一个简单的docker-compose.yml:

services
    db:
      image:mysql
      volumes:
        - "db-data:/var/lib/mysql/data"
      networks:
        - mynet

运行上述docker-compose.yml就相当于运行:

docker run -d --network mynet -v db-data:/var/lib/mysql/data mysql

Docker Compose安装

(1)下载

sudo 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)赋予可执行权限

sudo chmod +x /usr/local/bin/docker-compose

(3)测试安装结果

docker-compose --version

Docker Compose相关命令

docker-compose up
(docker-compose up -d# 后台运行
docker-compose stop          # 停止
docker-compose start         # 启动
docker-compose ps            # 列出compose容器
docker-compose exec xxx bash # 进入compose容器内

docker-compose方便快速拓展,例如将某个服务中的web服务水平拓展成三个,可以通过如下命令:

docker-compose up --scale web=3 -d

容器编排-Docker Swarm简介

以上所说的docker compose是建立在一个物理机器上的容器启动,如果多个物理机运行多个容器的时候docker-compose就显得有些捉襟见肘,这时候docker官方提供了Swarm来帮助我们管理多个容器,Docker Swarm是我们可以通过一个命令行管理多个物理机上的docker容器,如图:
这里写图片描述
Docker Swarm可以帮助我们:

  • 管理多个物理机的多个docker容器
  • 方便容器的横向拓展
  • 自动回复down掉的容器
  • 在不影响业务的情况下更新容器
  • 监控追踪多个容器
  • 保护隐私数据
  • 等……

根据多个物理机我们可以搭建一个swarm集群,通过swarm运行service相当于运行一个容器(和docker compose类似),会随机在swarm节点上创建,对应命令为:

docker service create --name myswarm xxx/xxx

在容器编排技术中,Swarm,Kubernetes,Mesos各有所长,Swarm是docker原生的api,上手快速使用简单。但是在功能和社区活跃度上比不上Kubernetes,Mesos,docker+kubernetes是目前大部分公司运维团队容器编排使用的技术,后续会学习kubernetes。

网站文章

  • [Git高级教程 (一)] 通过Tag标签回退版本修复bug

    1 前言本系列之所以取名”Git高级教程”,主要是教大家解决实际工作中遇到的问题,要求读者会基本的Git用法和命令,请不要使用SourceTree这样的工具,因为它让你啥都不会、啥也不懂,git本身与Linux一脉相承,都是Linus torvalds写的嘛,所以命令行才是精髓。如果你还不会Git的话,强烈建议你学习廖雪峰的教程,简单易懂: 廖雪峰的Git教程: http://www.li

    2024-04-01 00:13:11
  • (2)机器学习任务攻略(loss太大怎么办)

    (2)机器学习任务攻略(loss太大怎么办)

    机器学习笔记

    2024-04-01 00:13:04
  • java8 stream map flatMap

    stream map flatMap

    2024-04-01 00:12:58
  • Java判断某个对象是某个类

    String s = “I AM an Object!”; boolean isObject = s instanceof Object;

    2024-04-01 00:12:31
  • Qt扫盲-QListWidget理论总结

    Qt扫盲-QListWidget理论总结

    1. 概念2. 添加列表项3. 列表其他属性4. 常用信号5. 槽函数。QListWidget 是一个继承自 QListView 的类,其实就是 QListView 的一个很经典的 列表 交互控件,在...

    2024-04-01 00:12:24
  • audio解决不能自动播放问题

    无法实现打开网页就能自动播放音乐正常情况下使用autoplay即可实现自动播放,但是现在打开网页该参数无效。

    2024-04-01 00:12:17
  • BugKu MISC 就五层你能解开吗?

    BugKu MISC 就五层你能解开吗?

    题目名称:就五层你能解开吗BugKu。

    2024-04-01 00:11:47
  • 【CV作业03】图像平滑+锐化处理

    【CV作业03】图像平滑+锐化处理

    【代码】【CV作业03】图像平滑+锐化处理。

    2024-04-01 00:11:43
  • 使用Apache服务器部署python web过程中遇到的问题及解决方法

    使用Apache服务器部署python web过程中遇到的问题及解决方法

    1. 浏览器提示Internal Server Error 分析:查看Apache错误日志。日志提示:IndentationError: expected an indented block\r,即程...

    2024-04-01 00:11:36
  • 基于 Redis 实现分布式应用限流

    基于 Redis 实现分布式应用限流

    原文链接:http://xiaoqiangge.com/aritcle/1513004492550.html 限流的目的是通过对并发访问/请求进行限速或者一个时间窗口内的的请求进行限速来保护系统,一旦达到限制速率则可以拒绝服务。 前几天在DD的公众号,看了一篇关于使用 瓜娃 实现单应用限流的方案,参考《redis in action》 实现了一个jedis版本的,都属于业务层次限制。 实际场景中

    2024-04-01 00:11:11