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

在生产中,往往有严格控制服务启动顺序的需求。然而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.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"]

参考文档

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

原文发布于微信公众号 - A周立SpringCloud(gh_e6849e368b5f)

原文发表时间:2018-06-04

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏IT派

如何用两个小时入门 Docker?

最初的2小时,你会爱上Docker,对原理和使用流程有个最基本的理解,避免满世界无头苍蝇式找资料。本人反对暴风骤雨式多管齐下狂轰滥炸的学习方式,提倡迭代学习法,...

861
来自专栏码代码的陈同学

Docker容器无法被stop or kill问题

使用docker stop / docker kill / docker rm -f 等命令处理后,容器立马自动重启

1.9K3
来自专栏月色的自留地

手工在Docker for mac上安装Kubernetes

3064
来自专栏Django中文社区

用 Windows 跟着官方教程学 Docker 之一步一坑记

据说 Docker 可以提供一种更加现代化的部署方式,于是乎想趁着一个空闲周末来好好撸一遍 Dcoker 入门文档。之前花了一个小时通读了一遍 Docker 的...

9458
来自专栏HaHack

Dockerize Your Hexo

1644
来自专栏星流全栈

Meteor Tupperware — 更精简的Meteor Docker镜像

1302
来自专栏JasonhavenDai

Docker初尝试1.What is Docker?2.Try It3.Use It

1.What is Docker? 关于Docker,网上有很多讲解,不在此处赘述,提供两个不错的学习链接,望自行学习。 Docker Github Do...

2985
来自专栏云鼎实验室的专栏

ShadowBrokers 方程式工具包浅析

臭名昭著的方程式组织工具包再次被公开,TheShadowBrokers在steemit.com博客上提供了相关消息。本次被公开的工具包大小为117.9MB,包含...

2.4K0
来自专栏Jerry的SAP技术分享

在Kubernetes上运行SAP UI5应用(上)

2018年只剩最后30天了。Jerry在2017年的最后一天,曾经立下一个目标:这个微信公众号在2018年保证至少每周发布一篇SAP原创技术文章。

970
来自专栏bdcn

CoreOS那些事之Rkt容器尝鲜(下) 转

2015年是各种容器技术与名词扎堆的一年,Docker的出现使得“应用容器”的实施变得易如反掌的同时,也带动了它的许多竞争者。其中一个比较有趣的看点就在于“容器...

2182

扫码关注云+社区

领取腾讯云代金券