Docker系列教程26-Docker Compose控制服務啓動順序

原文:http://www.itmuch.com/docker/26-docker-compose-controller-startup-order/,轉載請說明出處。php

在生產中,每每有嚴格控制服務啓動順序的需求。然而Docker Compose自身並不具有該能力。要想實現啓動順序的控制,Docker Compose建議咱們使用:mysql

本文演示如何使用wait-for-it 來控制服務的啓動順序,其餘兩款工具的使用方法大同小異,讀者可自行研究。git

還用前面編排WordPress博客的例子,如今咱們想讓MySQL先啓動,啓動完成後再啓動WordPress。github

分析

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

可看到相似以下的內容:docker

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

也就是說,這個WordPress的Dockerfile執行了命令:docker-entrypoint.sh apache2-foregroundapache

順便再複習一下,ENTRYPOINT與CMD的區別——ENTRYPOINT指令是不會被覆蓋的,CMD指令會覆蓋。詳見博客:https://segmentfault.com/q/1010000000417103segmentfault

wait-for-it

在wait-for-it的官方GiTHub中,有詳細的例子:wordpress

要想使用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"]

參考文檔

相關文章
相關標籤/搜索