前言
前面的几篇文章几乎将docker系列中常用的功能已经说完了,本篇文章主要是针对docker componse的编排举几个简单的例子。
![3274454c07109c674760671f7238f29f.png](https://i-blog.csdnimg.cn/blog_migrate/28fdf6bcca0802fe9a9b12b2e2a5f827.jpeg)
使用docekr componse编排WordPress博客
这里的WordPress是一个开源的博客系统,有兴趣的可以去研究,这里就使用docker的方式部署WordPress博客
首先准备WordPress的yaml文件并写入以下内容
version: '2'services: mysql: image: mysql:5.7 expose: - "3306" environment: - MYSQL_ROOT_PASSWORD=123456 wordpress: image: wordpress ports: - "80:80" environment: - WORDPRESS_DB_HOST=mysql - WORDPRESS_DB_USER=root - WORDPRESS_DB_PASSWORD=123456
最后使用docker-componse up就可以直接下载镜像并启动容器了。
![4ec0956f94b0b18777d43b1f1a1f9999.png](https://i-blog.csdnimg.cn/blog_migrate/c5f13b85531c7992df1159f8f21c8acf.jpeg)
Docker Componse控制启动顺序
在很多时候在生产环境,对于每个服务的启动顺序也是有一定要求的,也不能随便乱启动,然而componse不具备这样的能力,那么想要实现这个,docker componse建议使用以下工具。
wait-for-it https://github.com/vishnubob/wait-for-it
dockerize https://github.com/jwilder/dockerize
wait-for https://github.com/Eficode/wait-for
这里主要说下wait-for-it的使用,其他性质类似,可以自行查看官方文档。
以前面的那个WordPress为例,我们可以查看它的Dockerfile文件。可以看到如下内容
COPY docker-entrypoint.sh /usr/local/bin/ENTRYPOINT ["docker-entrypoint.sh"]CMD ["apache2-foreground"]
那么wait-for-it官方是这么说的。
wait-for-it.sh 相等的地址:端口 -- 原本想执行的命令
这么一来,问题就明确了,如果想要安装顺序执行,只需加入wait-for-it.sh即可,看下面的例子可知。
version: '2'services: mysql: image: mysql:5.7 expose: - "3306" environment: - MYSQL_ROOT_PASSWORD=123456 wordpress: image: wordpress ports: - "80:80" volumes: - ./wait-for-it.sh:/wait-for-it.sh environment: - WORDPRESS_DB_HOST=mysql - WORDPRESS_DB_USER=root - WORDPRESS_DB_PASSWORD=123456 entrypoint: "sh /wait-for-it.sh mysql:3306 -- docker-entrypoint.sh" command: ["apache2-foreground"]
通过以上例子可知想要控制启动顺序,只需要将原本的命令用wait-for-it.sh包裹即可,这里可以看到控制mysql先启动。
![4c09bed15ece71dd9502e418d07286c4.png](https://i-blog.csdnimg.cn/blog_migrate/4c16de6a4bd3a7cefebc2ccf09a60720.jpeg)
使用Componse编排ELK
在分布式的开发项目中,ELK工具几乎是经常用到的,这里就用docker componse来编排部署ELK
ElasticSearch【存储】
Logtash【日志聚合器】
Kibana【界面】
那么开始写yaml文件。
version: '2'services: elasticsearch: image: elasticsearch # command: elasticsearch ports: - "9200:9200" # REST API端口 - "9300:9300" # RPC端口 logstash: image: logstash command: logstash -f /etc/logstash/conf.d/logstash.conf volumes: - ./config:/etc/logstash/conf.d - /opt/build:/opt/build ports: - "5000:5000" kibana: image: kibana environment: - ELASTICSEARCH_URL=http://elasticsearch:9200 ports: - "5601:5601"
logstash.conf 配置文件示例
input { file { codec => json path => "/opt/build/*.json" }}filter { grok { match => { "message" => "%{TIMESTAMP_ISO8601:timestamp}s+%{LOGLEVEL:severity}s+[%{DATA:service},%{DATA:trace},%{DATA:span},%{DATA:exportable}]s+%{DATA:pid}---s+[%{DATA:thread}]s+%{DATA:class}s+:s+%{GREEDYDATA:rest}" } }}output { elasticsearch { hosts => "elasticsearch:9200" }}