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

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。

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"]

可獲得兩大新人禮包

36份一線互聯網Java面試電子書

84個Java稀缺面試題視頻

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


分享到:


相關文章: