前言

Compose是一个定义和运行多个Docker应用的工具,用一个YAML(dockder-compose.yml)文件就能配置我们的应用。然后用一个简单命令就能启动所有的服务。Compose编排Docker服务的优势是在单机测试场景,因为Compose的安装简单,开箱即用,yaml的定义也复用了Dockerfile的语法。但是集群中容器编排服务还是推荐K8S或者Mesos+Marathon这样的编排调度系统。

演示环境

$ uname -a
Darwin 18.6. Darwin Kernel Version 18.6.: Thu Apr :: PDT ; root:xnu-4903.261.~/RELEASE_X86_64 x86_64 $ docker version
Client: Docker Engine - Community
Version: 18.09.
API version: 1.39
Go version: go1.10.8
Git commit:
Built: Sun Feb ::
OS/Arch: darwin/amd64
Experimental: false

示例

老规矩,我会先用一个示例来引入接下来要讲解的内容。下面我将演示用Docker Compose一键运行集中式日志系统ELK。ELK是一套日志收集方案,是三款软件产品的名字缩写,Elasticsearch,Logstash 和 Kibana。

ELK的docker-compose.yml 来自github仓库docker-elk。docker-compose.yml的内容如下:

version: '2'

services:

  elasticsearch:
build:
context: elasticsearch/
args:
ELK_VERSION: $ELK_VERSION
volumes:
- ./elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml:ro
ports:
- "9200:9200"
- "9300:9300"
environment:
ES_JAVA_OPTS: "-Xmx256m -Xms256m"
ELASTIC_PASSWORD: changeme
networks:
- elk logstash:
build:
context: logstash/
args:
ELK_VERSION: $ELK_VERSION
volumes:
- ./logstash/config/logstash.yml:/usr/share/logstash/config/logstash.yml:ro
- ./logstash/pipeline:/usr/share/logstash/pipeline:ro
ports:
- "5000:5000"
- "9600:9600"
environment:
LS_JAVA_OPTS: "-Xmx256m -Xms256m"
networks:
- elk
depends_on:
- elasticsearch kibana:
build:
context: kibana/
args:
ELK_VERSION: $ELK_VERSION
volumes:
- ./kibana/config/kibana.yml:/usr/share/kibana/config/kibana.yml:ro
ports:
- "5601:5601"
networks:
- elk
depends_on:
- elasticsearch networks: elk:
driver: bridge

进入到docker-compose.yml目录,通过docker-compose up -d 这条命令就能启动一个本地环境的ELK系统:

$ docker-compose up -d
Building kibana
Step / : ARG ELK_VERSION
Step / : FROM docker.elastic.co/kibana/kibana:${ELK_VERSION}
7.1.: Pulling from kibana/kibana
8ba884070f61: Already exists
3dd92e31d54b: Downloading [====================> ] .31MB/.81MB
47d37f21fc3a: Pull complete
97eef8537832: Pull complete
151d3d8996bb: Pull complete
003e03312113: Pull complete
0fbb6a4413a0: Pull complete
c455cf619e40: Pull complete
Digest: sha256:fbf558c6df18500f00ab9c1e1ce2d566ad2c1800d023106e4a4a85274b0d40cd
Status: Downloaded newer image for docker.elastic.co/kibana/kibana:7.1.
---> 67f17df6ca3e
Successfully built 67f17df6ca3e
Successfully tagged docker-elk_kibana:latest
WARNING: Image for service kibana was built because it did not already exist. To rebuild this image you must use `docker-compose build` or `docker-compose up --build`.
Creating docker-elk_elasticsearch_1 ... done
Creating docker-elk_kibana_1 ... done
Creating docker-elk_logstash_1 ... done
Attaching to docker-elk_elasticsearch_1, docker-elk_kibana_1, docker-elk_logstash_1
$ docker-compose ps
Name Command State Ports
------------------------------------------------------------------------------------------------------------------------------
docker-elk_elasticsearch_1 /usr/local/bin/docker-entr ... Up 0.0.0.0:->/tcp, 0.0.0.0:->/tcp
docker-elk_kibana_1 /usr/local/bin/kibana-docker Up 0.0.0.0:->/tcp
docker-elk_logstash_1 /usr/local/bin/docker-entr ... Up 0.0.0.0:->/tcp, /tcp, 0.0.0.0:->/tcp

访问kibana页面:

如果传统物理进程搭建ELK系统,首先要下载和安装Java JDK,下载ELK的版本,然后安装Elasticsearch,Logstash 和 Kibana。这整一套下来没有半天根本搞不定,现在集成到docker-compose只需要一条命令docker-compose up就能运行起来。所以利用docker-compose可以快速搭建本地测试环境,大大提高开发效率。相对于使用docker run这样的方式一个个起停容器,docker-compose提供了一个容器编排的服务,定义一组容器的起停依赖关系。也可以通过docker-compose stop logstash 来停止单一的logstash等服务。

详细说明

通过上面的例子我们已经掌握了Docker Comopose的起停等简单用法,那么Docker Compose一共有多少种用法呢,我们可以通过--help得到答案:

$ docker-compose --help
Define and run multi-container applications with Docker. Usage:
docker-compose [-f <arg>...] [options] [COMMAND] [ARGS...]
docker-compose -h|--help Options:
-f, --file FILE Specify an alternate compose file
(default: docker-compose.yml)
-p, --project-name NAME Specify an alternate project name
(default: directory name)
--verbose Show more output
--log-level LEVEL Set log level (DEBUG, INFO, WARNING, ERROR, CRITICAL)
--no-ansi Do not print ANSI control characters
-v, --version Print version and exit
-H, --host HOST Daemon socket to connect to --tls Use TLS; implied by --tlsverify
--tlscacert CA_PATH Trust certs signed only by this CA
--tlscert CLIENT_CERT_PATH Path to TLS certificate file
--tlskey TLS_KEY_PATH Path to TLS key file
--tlsverify Use TLS and verify the remote
--skip-hostname-check Don't check the daemon's hostname against the
name specified in the client certificate
--project-directory PATH Specify an alternate working directory
(default: the path of the Compose file)
--compatibility If set, Compose will attempt to convert deploy
keys in v3 files to their non-Swarm equivalent Commands:
build Build or rebuild services
bundle Generate a Docker bundle from the Compose file
config Validate and view the Compose file
create Create services
down Stop and remove containers, networks, images, and volumes
events Receive real time events from containers
exec Execute a command in a running container
help Get help on a command
images List images
kill Kill containers
logs View output from containers
pause Pause services
port Print the public port for a port binding
ps List containers
pull Pull service images
push Push service images
restart Restart services
rm Remove stopped containers
run Run a one-off command
scale Set number of containers for a service
start Start services
stop Stop services
top Display the running processes
unpause Unpause services
up Create and start containers
version Show the Docker-Compose version information

-f 指定compose文件,不是必须项,如果没有指定就变量当前路径或者父目录的docker-compose.yml文件。

-p 指定项目名称, 默认是目录名,例如例子中默认的docker-elk。

-v 显示Docker Compose版本。

--tls* 是加密证书相关选项。本机环境一般用不上。

build 创建容器服务,例如用Dockerfile build镜像。

ps 显示所有容器。

pull 拉取服务镜像。

push 推送服务镜像。

start 启动服务。

stop 停止服务。

up 创建和启动容器服务。相当于build(or pull)和start。

version 显示Docker Compose版本信息。

$ docker-compose version
docker-compose version 1.23., build 1110ad01
docker-py version: 3.6.
CPython version: 3.6.
OpenSSL version: OpenSSL 1.1.0h Mar
$ docker-compose stop logstash
Stopping docker-elk_logstash_1 ... done
$ docker-compose ps
Name Command State Ports
---------------------------------------------------------------------------------------------------------------------
docker-elk_elasticsearch_1 /usr/local/bin/docker-entr ... Up 0.0.0.0:->/tcp, 0.0.0.0:->/tcp
docker-elk_kibana_1 /usr/local/bin/kibana-docker Up 0.0.0.0:->/tcp
docker-elk_logstash_1 /usr/local/bin/docker-entr ... Exit
$ docker-compose start logstash
Starting logstash ... done
$ docker-compose ps
Name Command State Ports
------------------------------------------------------------------------------------------------------------------------------
docker-elk_elasticsearch_1 /usr/local/bin/docker-entr ... Up 0.0.0.0:->/tcp, 0.0.0.0:->/tcp
docker-elk_kibana_1 /usr/local/bin/kibana-docker Up 0.0.0.0:->/tcp
docker-elk_logstash_1 /usr/local/bin/docker-entr ... Up 0.0.0.0:->/tcp, /tcp, 0.0.0.0:->/tcp

总结

文章用一键运行ELK系统演示了Docker Compose搭建环境的高效性,然后详细介绍了Docker Compose的大部分选型的含义和用法。

参考

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

利用Docker Compose快速搭建本地测试环境的更多相关文章

  1. 一文教您如何通过 Docker 快速搭建各种测试环境(Mysql, Redis, Elasticsearch, MongoDB) | 建议收藏

    欢迎关注个人微信公众号: 小哈学Java, 文末分享阿里 P8 高级架构师吐血总结的 <Java 核心知识整理&面试.pdf>资源链接!! 个人网站: https://www.ex ...

  2. Docker-教你如何通过 Docker 快速搭建各种测试环境

    今天给大家分享的主题是,如何通过 Docker 快速搭建各种测试环境,本文列举的,也是作者在工作中经常用到的,其中包括 MySQL.Redis.Elasticsearch.MongoDB 安装步骤,通 ...

  3. 快速搭建IE测试环境(Virtualbox+ievms)

    IE下的测试 作为一个有追求的程序员,应该尽可能的远离Windows系统.不论从专业开发者的角度,还是仅仅作为最终用户从使用体验上来说,Windows都可以算是垃圾中的战斗机: 没有shell . 响 ...

  4. [kubernetes] 使用 Minikube 快速搭建本地 k8s 环境 (基于 Docker 驱动模式)

    一.实验环境 操作系统:Centos 7 x86_64 Docker:1.12.6 二.部署 k8s 步骤 2.1  安装 kubectl cat <<EOF > /etc/yum. ...

  5. 使用 phpstudy 搭建本地测试环境

    最近在为另一个部门配置一个多语言的网站,因为之前他们已经做过 英文和中文两种语言,这次帮他们添加其它几种语言,从GitLab 上拉下来的代码,是php环境做的,需要在本地跑起来,做完测试通过后再一次性 ...

  6. 使用WampServer搭建本地PHP环境,绑定域名,配置伪静态

    倡萌之前介绍过 USBWebserver 快速搭建本地PHP环境 ,推荐USBWebserver的原因在于它是绿色的,不需要安装,想使用就手动运行下即可.但是 USBWebserver 也有自身的弱点 ...

  7. 利用 Docker Compose 搭建 SpringBoot 运行环境(超详细步骤和分析)

    0.前言 相信点进来看这篇文章的同学们已经对 Docker Dompose 有一定的了解了,下面,我们拿最简单的例子来介绍如何使用 Docker Compose 来管理项目. 本文例子: 一个应用服务 ...

  8. spring boot / cloud (十八) 使用docker快速搭建本地环境

    spring boot / cloud (十八) 使用docker快速搭建本地环境 在平时的开发中工作中,环境的搭建其实一直都是一个很麻烦的事情 特别是现在,系统越来越复杂,所需要连接的一些中间件也越 ...

  9. 利用Docker搭建本地https环境的完整步骤

    利用Docker搭建本地https环境的完整步骤 这篇文章主要给大家介绍了关于如何利用Docker搭建本地https环境的完整步骤,文中通过示例代码将实现的步骤介绍的非常详细,对大家的学习或者工作具有 ...

随机推荐

  1. UVALive 3517:Feel Good(单调栈 Grade C)

    VJ题目链接 题意: n个数,求区间[l,r] 使得 sum[l,r]*min(a[l],a[l+1],...,a[r]) 最大.若有多种答案,输出区间最短的.若还有多组,输出最先出现的. 思路: 求 ...

  2. 【剑指offer】数组中重复的数字

    题目描述 在一个长度为n的数组里的所有数字都在0到n-1的范围内. 数组中某些数字是重复的,但不知道有几个数字是重复的.也不知道每个数字重复几次.请找出数组中任意一个重复的数字. 例如,如果输入长度为 ...

  3. 记录: 一次解决整型溢出攻击(使用scala,隐式转换)

    最近项目遇到一次整型溢出攻击 有一个功能,玩家购买num个物品. 每个物品花费14货币. 客户端限制玩家只能购买 1-9999个该物品. 但是某玩家通过技术手段,获得了客户端的运行权限. 于是发送协议 ...

  4. LeetCode OJ-- Pow(x, n) **@

    https://oj.leetcode.com/problems/powx-n/ 二分法 class Solution { public: double pow(double x, int n) { ...

  5. AC日记——文艺平衡树 洛谷 P3391

    文艺平衡树 思路: splay翻转操作模板: 虚拟最左最右端点,然后每次都把l翻转到root,r+2翻转到root的右节点: 然后在r+2的左节点上打标记: 标记需要在旋转,rank,print时下放 ...

  6. 用chardet判断字符编码的方法

    转自http://www.cnblogs.com/xiaowuyi/archive/2012/03/09/2387173.html 用chardet判断字符编码的方法   1.chardet下载与安装 ...

  7. ELK之filebeat替代logstash收集日志

    filebeat->redis->logstash->elasticsearch 官网下载地址:https://www.elastic.co/downloads/beats/file ...

  8. React 入门之路

    React React简介 是由Facebook公司推广的一套框架,已经应用instagram等产品 React就是为了提供应用程序性能而设计的一套框架 在angular中,对dom提供了一些指令,让 ...

  9. 缺少 Google API 秘钥,因此 Chromium 的部分功能将无法使用

    获取密钥(ID)教程: https://www.chromium.org/developers/how-tos/api-keys 获取密钥(ID)地址: https://cloud.google.co ...

  10. linux yum 安装软件

    概括了部分常用的yum命令包括: 自动搜索最快镜像插件:yum install yum-fastestmirror安装yum图形窗口插件:yum install yumex 1 安装yum insta ...