Docker Compose 实践及梳理

Docker Compose 可以实现 Docker 容器集群的编排,可以通过 docker-compose.yml 文件,定义我们的服务及其需要的依赖,轻松地运行在测试、生产等环境

文档

Product manuals

Compose file version 3 reference

Docker 从入门到实践 【中文】

安装 Compose

Compose 依赖 Docker Engine,所有要保证环境安装了 Docker,可参考官方教程,主要分为两步:

# 1. 下载 Compose 只执行文件到 usr/local/bin/ 目录
# 下载失败可以参考下一小结提供地址安装
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

# 2. 对 Compose 可执行文件添加运行权限
sudo chmod +x /usr/local/bin/docker-compose

# 输入下面命令查看帮助,测试安装是否成功
docker-compose -h

Compose 开源在 Docker 官方的 GitHub 仓库:docker/compose,所有的 Compose 都会发布在仓库的 Releases 里,步骤1就是使用 curl 命令从 Releases 里下载可执行文件,uname -suname -m 可以读取系统的内核名称和硬件架构,用来匹配需要的 Compose 版本, curl 的 -L 参数会让 HTTP 请求跟随重定向(默认不跟随),-o (小写o) 会将服务器响应保存成文件,直接下载到:usr/local/bin/ 下,文件名为:docker-compose,因为这个路径已经在环境变量中了,所以完成步骤2,添加可执行权限后,就可以在任意位置使用了

直接从 GitHub 下载比较慢可以通过以下地址下载:

# https://vuepress.mirror.docker-practice.com/compose/install/
sudo curl -L https://download.fastgit.org/docker/compose/releases/download/1.27.4/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

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

入门

Compose 的模版指令与 Docker 的 run 命令相关参数很相似,忘记了 docker 命令可以参考之前的一篇博客:Docker 实践及命令梳理

Compose 中有两个重要的概念:

  • 服务 (service):一个应用的容器,实际上可以包括若干运行相同镜像的容器实例
  • 项目 (project):由一组关联的应用容器组成的一个完整业务单元,在 docker-compose.yml 文件中定义

docker-compose.yml 格式如下,注意:YAML 文件必须要键值之间的 : 后面必须有一个空格,缩进表示层级,要注意缩进
有使用到的 volumes 和 networks 必须声明

# 指定版本
version: "3"
# 服务的集合
services:
  # 其中一个服务,服务名为:webapp
  webapp:
    # 指定该服务使用的镜像
    image: examples/web
    # 端口映射
    ports:
      - "80:80"
    # 数据卷
    volumes:
      - "/data"

简单上手

在一个 Compose 中启动 Tomcat, MySQL, redis,创建 docker-compose.yml

version: "3.0"

services:
  tomcat:
    container_name: mytomcat # --name
    image: tomcat:8.0-jre8
    ports:
      - "8080:8080"
    volumes:
      - "tomcatwebapps:/usr/local/tomcat/webapps"
    networks:
      - some_network
    # tomcat 服务依赖于 mysql 和 redis
    depends_on:
      - mysql
      - redis
  mysql:
    container_name: mysql
    image: mysql:5.7.32
    ports:
      - "3306:3306"
    volumes:
      - "mysqldata:/var/lib/mysql"
      - "mysqlconf:/etc/mysql"
    environment:
      - MYSQL_ROOT_PASSWORD=1234
    networks:
      some_network:
  redis:
    container_name: redis
    image: redis:5.0.10
    ports:
      - "6379:6379"
    volumes:
      - "redisdata:/data"
    command: "redis-server --appendonly yes"
    networks:
      some_network:

# 使用到的 volumes 和 networks 必须声明
volumes:
  tomcatwebapps:
  mysqldata:
  mysqlconf:
  redisdata: 

networks:
  # 声明名称为 “some_network” 的网络
  some_network:

docker-compose.yml 所在路径执行 docker-compose up 启动 Compose 项目,它会下载使用到的镜像并在前台运行打印日志,可以使用 Ctrl + C 终止

如果需要后台运行执行 docker-compose up -d,这时候使用 docker ps 可以看到 Compose 已经根据 yaml 创建了相关的容器,使用 docker-compose down 停止 Compse 并移除自动创建的网桥

使用 docker network ls 查看网络或者 docker volume ls 查看数据卷,Compose 定义的网络或数据卷名称格式为:docker-compose.yml所在文件夹的名称加上下划线再加上 yaml 中定义名称,如果在 "dockerfile" 文件夹下创建 yaml 文件并启动,那么网络名称为:dockerfile_some_network

tomcat 服务使用了 depends_on,表示它依赖于 redis 和 mysql 服务,Compose 将优先启动它的依赖再启动它

命令梳理

Docker Compose 的命令与 Dokcer 类似,可以使用 --help 参数,就可以查询到到对应命令的使用方法

docker-compose --help

默认启动的模版文件名为 docker-compose.yml,可以使用 -f 指定自定义的模版文件
可以通过 config 命令,检查模版文件语法是否正确

docker-compse 也包含很多子命令:
启动停止相关:up, down, restart, stop, pasue, unpause

资源相关:ps, top, kill, run

进入容器:exec

查看日志:logs

很多子命令都可以在后面跟上某个具体的 service 名称,定向地操作,下面不一一举例,
可以使用docker-compose help 再跟上子命令名称,查询其用法

# 后台启动 yaml 定义的所有容器
docker-compose up -d
# 仅启动 mysql 这个service,会启动其依赖的 service
docker-compose up mysql 指定启动的server名称,
# 停止容器并移除自动创建的网桥
docker-compose down
# 重启所有 service 后面可以指定上某个具体的 service
docker-compose restart

# 暂停 和 恢复
docker-compose pause
docker-compose unpause

# 进入 redis 这个 service 使用 exit 退出
docker-compose exec redis bash

# 列出当前 yaml 中定义的容器的信息
docker-compose ps

# 删除当前 yaml 中定义的容器,需要先 stop,后面可以指定上某个具体的 service
docker-compose rm

# 查看各个 service 容器内运行的进程情况
docker-compose top

# 查看日志默认查看 yaml 所有的,可以跟上具体 service
# -f 可以保持跟踪,新的日志会马上显示在屏幕上
docker-compose logs

参考资料

curl 的用法指南
【编程不良人】Docker容器技术&Docker-Compose实战

到此这篇关于Docker Compose 实践及梳理的文章就介绍到这了,更多相关Docker Compose 实践内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 使用Docker Compose搭建 Confluence的教程

    本文使用「署名 4.0 国际 (CC BY 4.0)」许可协议,欢迎转载.或重新修改使用,但需要注明来源. 署名 4.0 国际 (CC BY 4.0) 本文作者: 苏洋 创建时间: 2019年03月30日 统计字数: 5170字 阅读时间: 11分钟阅读 本文链接: https://soulteary.com/2019/03/30/construct-confluence-with-docker.html 使用 Docker 搭建 Confluence 小型团队协同,或者想花钱买个省心,Conf

  • 使用docker compose搭建consul集群环境的例子

    consul基本概念 server模式和client模式 server模式和client模式是consul节点的类型:client不是指的用户客户端. server模式提供数据持久化功能. client模式不提供持久化功能,并且实际上他也不工作,只是把用户客户端的请求转发到server模式的节点.所以可以把client模式的节点想象成LB(load balance),只负责请求转发. 通常server模式的节点需要配置成多个例如3个,5个.而client模式节点个数没有限制. server模式启

  • Docker Compose一键ELK部署的方法实现

    安装   Filebeat 已经完全替代了 Logstash-Forwarder 成为新一代的日志采集器,因为它更加轻量.安全.基于 Filebeat + ELK 的部署方案架构图如下:    软件版本: 服务 版本 说明 CentOS 7.6 Docker 18.09.5 Docker Compose 1.25.0 ELK 7.5.1 Filebeat 7.5.1 docker-compose 文件 version: "3" services: es-master: containe

  • docker compose部署主从复制的实现

    目录 配置解析 服务搭建 目录结构 Compose File 实例配置 启动服务 测试 受限于 Redis 单点性能,加上我们对数据天生就有的备份的需求,因此 Redis 提供了主从复制的服务. 本文记录了通过 docker compose 搭建一主双从的 Redis 服务. 配置解析 ################################# REPLICATION ################################# # [Slave]连接 Master 的配置 # s

  • docker-compose 部署 Apollo 自定义环境的详细教程

    目录 Apollo 配置中心是什么: Apollo的特性 客户端架构 架构和模块 一:Config Service提供配置的读取.推送等功能,服务对象是Apollo客户端 二:Admin Service提供配置的修改.发布等功能,服务对象是Apollo Portal(管理界面) 三: Meta Server 在Eureka之上我们架了一层Meta Server用于封装Eureka的服务发现接口 四:Eureka java的一个服务发现的组件 五: Portal 六:Client 客户端 部署 踩

  • 详解docker-compose速度太慢解决方式

    解决办法只有一个一个一个,那就是换源! 使用的是github的源基本都是超时,此时使用: curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose 记得修改权限,否则会报错: sudo chmod +x /usr/local/bin/docker-compose 最后查看版本

  • Docker Compose 实践及梳理

    Docker Compose 可以实现 Docker 容器集群的编排,可以通过 docker-compose.yml 文件,定义我们的服务及其需要的依赖,轻松地运行在测试.生产等环境 文档 Product manuals Compose file version 3 reference Docker 从入门到实践 [中文] 安装 Compose Compose 依赖 Docker Engine,所有要保证环境安装了 Docker,可参考官方教程,主要分为两步: # 1. 下载 Compose 只

  • 使用Docker compose编排Laravel应用的方法

    前言 Laravel官方开发环境推荐的是Homestead(其实就是一个封装好的Vagrant box),我感觉这个比较重,于是自己用Docker compose编排了一套开发环境,在这里分享下. 环境要求 先要安装好Docker 和 Docker compose,而且Docker 仓库镜像最好换成国内的.一般地,我开发电脑上会运行一个Vagrant,然后再在里面运行Docker等应用. 主要思路 Docker官方推荐的是一个容器运行一个服务,所以会有Compose编排,各个服务间通过容器互联技

  • Docker Compose常用命令详解

    1.Docker compose的使用非常类似于docker命令的使用,但是需要注意的是大部分的compose命令都需要到docker-compose.yml文件所在的目录下才能执行. 2.compose以守护进程模式运行加-d选项 $ docker-compose up -d 3.查看有哪些服务,使用docker-compose ps命令,非常类似于 docker 的ps命令 4.查看compose日志 $ docker-compose logs web $ docker-compose lo

  • 使用Docker Compose 实现nginx负载均衡的方法步骤

    以Docker的网络管理,容器的IP设置为基础知识实现Nginx负载均衡 查看所有docker网络 docker network ls /* NETWORK ID NAME DRIVER SCOPE b832b168ca9a bridge bridge local 373be82d3a6a composetest_default bridge local a360425082c4 host host local 154f600f0e90 none null local */ // compose

  • Docker Compose引用环境变量的方法示例

    在项目中,往往需要在 docker-compose.yml 文件中使用环境变量来控制不同的条件和使用场景.本文集中介绍 docker compose 引用环境变量的方式. 说明:本文的演示环境为 ubuntu 16.04. Compose CLI 与环境变量 Compose CLI(compose command-line 即 docker-compose 程序)能够识别名称为 COMPOSE_PROJECT_NAME 和 COMPOSE_FILE 等环境变量(具体支持的环境变量请参考这里).比

  • Docker系列之使用Docker Compose编排容器

    1. 前言 Docker Compose 是 Docker 容器进行编排的工具,定义和运行多容器的应用,可以一条命令启动多个容器. 使用Compose 基本上分为三步: 1.Dockerfile 定义应用的运行环境 2.docker-compose.yml 定义组成应用的各服务 3.docker-compose up 启动整个应用 2. 安装Compose 直接从github下载即可,前提要先安装Docker,版本要1.9.1以上 Note that Compose 1.8.0 requires

  • docker compose 使用教程

    Docker提供一个容器编排工具------>Docker Compose,它允许用户在一个模板(YAML格式)中定义一组相关联的应用容器,这组容器会根据配置模板中的"--link"等参数 对启动的优先级自动排序,简单执行一条"docker-compose up",就可以把同一个服务中的多个容器一次创建和启动. 安装docker-compose: 复制代码 代码如下: curl -L https://github.com/docker/compose/rele

  • Docker Compose 网络设置详解

    基本概念 默认情况下,Compose会为我们的应用创建一个网络,服务的每个容器都会加入该网络中.这样,容器就可被该网络中的其他容器访问,不仅如此,该容器还能以服务名称作为hostname被其他容器访问. 默认情况下,应用程序的网络名称基于Compose的工程名称,而项目名称基于docker-compose.yml所在目录的名称.如需修改工程名称,可使用--project-name标识或COMPOSE_PORJECT_NAME环境变量. 举个例子,假如一个应用程序在名为myapp的目录中,并且do

  • 详解Docker Compose 中可用的环境变量问题

    Compose 的多个部分在某种情况下处理环境变量.本教程可以帮助你找到所需的信息. 1. 替换Compose文件中的环境变量 可以使用 shell 中的环境变量填充 Compose 文件中的值: web: image: "webapp:${TAG}" 更多信息请参考 Compose 文件手册中的 Variable substitution章节. 2. 设置容器中的环境变量 可以通过 environment 关键字设置服务容器中的环境变量,就跟使用 docker run -e VARI

  • Docker Compose部署及基础使用详解

    一 Docker Compose概述 Compose是一个用于定义和运行多容器Docker应用程序的工具.使用Compose,您可以使用YAML文件来配置应用程序的服务.然后,使用单个命令,您可以从配置中创建并启动所有服务. Compose适用于所有环境:生产,登台,开发,测试以及CI工作流程. 使用Compose基本上是一个三步过程: 在Dockerfile中定义您的应用程序环境,以便可以在任何地方进行再生产. 定义构成应用程序的服务,docker-compose.yml 以便它们可以在隔离环

随机推荐