前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Docker系列教程26-Docker Compose控制服务启动顺序

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

作者头像
用户1516716
发布2018-07-30 11:09:52
1.4K0
发布2018-07-30 11:09:52
举报
文章被收录于专栏:A周立SpringCloud

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

可看到类似如下的内容:

代码语言:javascript
复制
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,只需使用如下形式即可:

代码语言:javascript
复制
wait-for-it.sh 想等的地址:端口 -- 原本想执行的命令

答案

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

代码语言:javascript
复制
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/ 。
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-06-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 A周立SpringCloud 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 分析
  • wait-for-it
  • 答案
  • 参考文档
相关产品与服务
容器镜像服务
容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档