为什么80%的码农都做不了架构师?>>>   

原文:http://www.itmuch.com/docker/26-docker-compose-controller-startup-order/,转载请说明出处。

在生产中,往往有严格控制服务启动顺序的需求。然而Docker Compose自身并不具备该能力。要想实现启动顺序的控制,Docker Compose建议我们使用:

  • wait-for-it
  • dockerize
  • wait-for

本文演示如何使用wait-for-it 来控制服务的启动顺序,其他两款工具的使用方法大同小异,读者可自行研究。

还用前面编排WordPress博客的例子,现在我们想让MySQL先启动,启动完成后再启动WordPress。

分析

分析:找到WordPress的Dockerfile:https://github.com/docker-library/wordpress/blob/666c5c06d7bc9d02c71fd48a74911248be6f5a5b/php5.6/apache/Dockerfile

可看到类似如下的内容:

COPY docker-entrypoint.sh /usr/local/bin/
ENTRYPOINT ["docker-entrypoint.sh"]
CMD ["apache2-foreground"]

也就是说,这个WordPress的Dockerfile执行了命令:docker-entrypoint.sh apache2-foreground

顺便再复习一下,ENTRYPOINT与CMD的区别——ENTRYPOINT指令是不会被覆盖的,CMD指令会覆盖。详见博客:https://segmentfault.com/q/1010000000417103 。

wait-for-it

在wait-for-it的官方GiTHub中,有详细的例子:

要想使用wait-for-it,只需使用如下形式即可:

wait-for-it.sh 想等的地址:端口 -- 原本想执行的命令

答案

分析到这里,答案就很简单了:只需在WordPress的容器中添加wait-for-it.sh,然后将原本的命令用wait-for-it包裹,即可实现控制启动顺序的目标。

version: '2'
services:mysql:image: mysql:5.7expose:- "3306"environment:- MYSQL_ROOT_PASSWORD=123456wordpress:image: wordpressports:- "80:80"volumes:- ./wait-for-it.sh:/wait-for-it.shenvironment:- WORDPRESS_DB_HOST=mysql- WORDPRESS_DB_USER=root- WORDPRESS_DB_PASSWORD=123456entrypoint: "sh /wait-for-it.sh mysql:3306 -- docker-entrypoint.sh"command: ["apache2-foreground"]

参考文档

  • 《Controlling startup order in Compose》:https://docs.docker.com/compose/startup-order/ 。

转载于:https://my.oschina.net/eacdy/blog/1824219

Docker系列教程26-Docker Compose控制服务启动顺序相关推荐

  1. 【Docker系列教程之三】Docker容器是如何工作的

    在上一篇的文章中,我给大家主要介绍了一下 Docker 环境的搭建,简单的讲解了一下 Docker 架构,以及用 Docker 命令简单演示了一下如何拉去一个 images 镜像.本篇我们将剖析一下  ...

  2. Docker系列(二): 搭建docker镜像仓库-Nexus、Harbor

    Docker介绍及环境搭建参考: Docker系列一: docker介绍&&安装(含离线安装) Docker系列(二): 搭建docker镜像仓库-Nexus.Harbor Docke ...

  3. Docker系列之五:Docker 三剑客之 Docker Swarm

    title: Docker系列之五:Docker 三剑客之 Docker Swarm categories: Docker tags: - Docker timezone: Asia/Shanghai ...

  4. 【车载开发系列】UDS诊断---链接控制服务($0x87)

    [车载开发系列]UDS诊断-链接控制服务($0x87) 诊断---链接控制服务($0x87) [车载开发系列]UDS诊断---链接控制服务($0x87) 一.概念定义 二.应用场景 三.报文格式 1) ...

  5. linux开启启动服务的顺序,SUSE服务启动顺序

    SUSE 服务启动顺序的问题,终于把我给刺激了,不得不认真的看一下,以前使用RedHat时候,是用chkconfig进行启动脚本的顺序调整的.例如, # chkconfig: 35 98 01 这表明 ...

  6. 第七章 oracle的服务启动顺序、认证方式、

    一  oracle的服务启动顺序 oracle服务启动 1,windows 服务器上 2,linux 服务器上 #  lsnctl  start # 一sysdb身份登录,启动oracle实例 至少需 ...

  7. Docker系列教程01-Centos7安装新版Docker教程(10步)

    最近一直忙于开发,没有时间好好总结一下docker的知识.其实现在docker的教程已经很多很多了,但是很多系统的教程都是基于Ubuntu系统,因为官方推荐使用Ubuntu系统啊,原因在于Ubuntu ...

  8. Docker系列教程15-Docker容器网络

    原文:http://www.itmuch.com/docker/15-docker-network/ 本文是篇翻译.原文:https://docs.docker.com/engine/userguid ...

  9. TeamCity系列教程(一)-docker安装配置teamcity

    作为CI持续集成的工具之一,相比Jenkins界面更友好,插件更多,功能大同小异,本次教程使用Docker环境 部署,所以要有Docker基础. 一.安装TeamCity服务端 这里说一下,TeamC ...

最新文章

  1. Retrofit2.0
  2. mysql insert 的时候时间给默认值
  3. Windows核心编程 第八章 用户方式中线程的同步(下)
  4. 2014-06-25nbsp;12:55
  5. C++ (14) 异常处理
  6. LeetCode:63. 不同路径 II
  7. 58同城数据库架构最佳实践
  8. http协议与php关系,PHP中的HTTP协议
  9. python2 python3 import,从python2到python3的导入处理/模块的更改?
  10. 学习笔记(27):Python网络编程并发编程-GIL与多线程
  11. oracle 安装乱码,linux安装Oracle中文乱码问题汇总
  12. JAVA企业级快速开发平台,JEECG 3.7.3 新春版本发布
  13. Mysql分页之limit用法与limit优化
  14. libxml2 not found
  15. 计算机绘图相切,第九章计算机绘图基础.
  16. 蓝桥杯 -罗马数字问题
  17. ffmpeg java 实时视频流转码
  18. Win10版本那么多怎么区别
  19. 2000元平板电脑推荐2023 2000元左右平板电脑哪款好
  20. linux磁盘分区、挂盘

热门文章

  1. windows脚本bat批处理 关闭显示器 关闭显示器脚本bat
  2. Java异常:IllegalArgumentException Collections.sort报错
  3. Java 核心 API 必须掌握的程度
  4. python调用curl_Python3模拟curl发送post请求操作示例
  5. python 命令模式_python设计模式(十六):命令模式-阿里云开发者社区
  6. python自动化测试框架开发_webUI自动化测试框架(Python+selenium)
  7. linux并发控制方法,linux系统并发控制
  8. mysql -a_a|MySQL基础命令
  9. Machine Learning---感知器学习算法
  10. 感知器(Perceptron)