利用Docker Compose快速搭建本地测试环境
前言
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快速搭建本地测试环境的更多相关文章
- 一文教您如何通过 Docker 快速搭建各种测试环境(Mysql, Redis, Elasticsearch, MongoDB) | 建议收藏
欢迎关注个人微信公众号: 小哈学Java, 文末分享阿里 P8 高级架构师吐血总结的 <Java 核心知识整理&面试.pdf>资源链接!! 个人网站: https://www.ex ...
- Docker-教你如何通过 Docker 快速搭建各种测试环境
今天给大家分享的主题是,如何通过 Docker 快速搭建各种测试环境,本文列举的,也是作者在工作中经常用到的,其中包括 MySQL.Redis.Elasticsearch.MongoDB 安装步骤,通 ...
- 快速搭建IE测试环境(Virtualbox+ievms)
IE下的测试 作为一个有追求的程序员,应该尽可能的远离Windows系统.不论从专业开发者的角度,还是仅仅作为最终用户从使用体验上来说,Windows都可以算是垃圾中的战斗机: 没有shell . 响 ...
- [kubernetes] 使用 Minikube 快速搭建本地 k8s 环境 (基于 Docker 驱动模式)
一.实验环境 操作系统:Centos 7 x86_64 Docker:1.12.6 二.部署 k8s 步骤 2.1 安装 kubectl cat <<EOF > /etc/yum. ...
- 使用 phpstudy 搭建本地测试环境
最近在为另一个部门配置一个多语言的网站,因为之前他们已经做过 英文和中文两种语言,这次帮他们添加其它几种语言,从GitLab 上拉下来的代码,是php环境做的,需要在本地跑起来,做完测试通过后再一次性 ...
- 使用WampServer搭建本地PHP环境,绑定域名,配置伪静态
倡萌之前介绍过 USBWebserver 快速搭建本地PHP环境 ,推荐USBWebserver的原因在于它是绿色的,不需要安装,想使用就手动运行下即可.但是 USBWebserver 也有自身的弱点 ...
- 利用 Docker Compose 搭建 SpringBoot 运行环境(超详细步骤和分析)
0.前言 相信点进来看这篇文章的同学们已经对 Docker Dompose 有一定的了解了,下面,我们拿最简单的例子来介绍如何使用 Docker Compose 来管理项目. 本文例子: 一个应用服务 ...
- spring boot / cloud (十八) 使用docker快速搭建本地环境
spring boot / cloud (十八) 使用docker快速搭建本地环境 在平时的开发中工作中,环境的搭建其实一直都是一个很麻烦的事情 特别是现在,系统越来越复杂,所需要连接的一些中间件也越 ...
- 利用Docker搭建本地https环境的完整步骤
利用Docker搭建本地https环境的完整步骤 这篇文章主要给大家介绍了关于如何利用Docker搭建本地https环境的完整步骤,文中通过示例代码将实现的步骤介绍的非常详细,对大家的学习或者工作具有 ...
随机推荐
- sql查询 ,多行数据合并成一行,并且显示合并后某一列的值拼接结果
select [value] = stuff((select ','+modmb003 from modmb detail where modmb=18 for xml path('')), 1, ...
- MPchartAndroid-柱状图
mChart = (LineChart) findViewById(R.id.chart1); mChart.setDescription(""); //设置图表描述信息 m ...
- 广州地区常用的DNS解析服务器
广州电信DNS: 首选:202.96.128.143 备用:202.96.128.68 首选:202.96.134.133 备用:202.96.128.166 首选:61.144.56.100备用:6 ...
- (3)Django 配置
一.settings django安装的应用程序 INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.c ...
- HDU 6251 Inkopolis(2017 CCPC-Final,I题,环套树 + 结论)
题目链接 HDU 6251 题意 给出一个$N$个点$N$条边的无向图.然后给出$M$个操作,每个操作为$(x, y, z)$,表示把连接 $x$和$y$的边的颜色改成$z$. 求这张无向图中所有边的 ...
- 使用Fiddle监听HTTPS网页
HTTPS相对于HTTP增加了安全性,但是仍然不能有效的防止中间人攻击(Man-in-the-MiddleAttack,简称“MITM攻击”) 这就使得Fiddle工具能够有效的监听HTTPS流量 一 ...
- Java NIO中的FileLock(文件锁)
FileLock,文件锁. 文件锁在OS中很常见,如果多个程序同时访问.修改同一个文件,很容易因为文件数据不同步而出现问题.给文件加一个锁,同一时间,只能有一个程序修改此文件,或者程序都只能读此文件, ...
- retain和copy还有assign的区别
1. 接触过C,那么假设你用malloc分配了一块内存,并且把它的地址赋值给了指针a,后来你希望指针b也共享这块内存,于是你又把a赋值给 (assign)了b.此时a和b指向同一块内存,请问当a不再需 ...
- QQ分享到电脑SDK bug
问题:当图文(图片+文字+url)混合分享到我的电脑时,就会出bug,只显示图片. 经过测试: params.putString(QQShare.SHARE_TO_QQ_IMAGE_URL," ...
- 关于Android内存优化你应该知道的一切
介绍 在Android系统中,内存分配与释放分配在一定程度上会影响App性能的—鉴于其使用的是类似于Java的GC回收机制,因此系统会以消耗一定的效率为代价,进行垃圾回收. 在中国有句老话:”由俭入奢 ...