[英]Should you create separate docker containers for services like redis and elastic search when they are being used by more than one other service?
我將整個堆棧放在docker compose容器設置中。 當前,負載可以全部在單個實例上運行。 我有兩個單獨的應用程序,它們都使用Redis和彈性搜索。
我見過有人建議,在類似MySQL的情況下,正確的容器理論建議,如果您有兩個使用它們的獨立應用程序,則應該為兩個獨立的數據庫擁有兩個獨立的容器。
我認為這對MySQL很好,因為我的理解是,單獨的MySQL實例實際上並不會增加太多的內存或處理器開銷。
我想知道是否應該將相同的策略應用於redis和elasticsearch。 我的理解是,這兩個應用程序都可能帶來相當大的開銷。 因此,似乎無法運行多個實例。
這是一個有趣的問題,但是我不確定對此是否有一個普遍的答案。 這主要取決於您的情況。
但是,如果您將唯一的容器用於多個應用程序,則必須了解其優缺點。 舉個例子,假設您只有兩個應用程序容器: A和B ,以及一個共享的DB容器,無論使用哪種技術。
如果A和B是獨立的應用程序,則共享DB的主要缺點是您將打破這種獨立性,並通過DB緊密耦合您的應用程序:
如果A和B已經是緊密耦合的應用程序,那么您可能可以選擇1 DB 。 如果您沒有很多資源,也可以共享DB 。 但是不要忘記這樣做,您可以耦合應用程序,而這可能是您不想要的。 否則,最干凈的解決方案是每個應用程序使用1個DB 。
我看到的主要好處是,泊塢窗組成堆棧中具有所有鏈接的服務,然后泊塢窗將確保所有必需的服務正常運行。 但是,使用redis和elastic之類的服務時,最好將它們與應用程序一起獨立安裝,僅通過泊塢窗組成文件中傳遞的環境變量指向它們。
例如
myapp:
image: myawesomerepo/myapp:latest
depends_on:
- someother_svc_in_same_docker_compose
environment:
- DB_HOST=172.17.2.73
- REDIS_HOST=172.17.2.103
- APP_ENV=QA
- APM_ENABLE=false
- APM_URL=http://172.17.2.103:8200
- CC_HOST=cc-3102
volumes:
- /opt/deploy/cc/config:/server/app/config
- /opt/deploy/cc/slogs:/server/app/logs
command: node ./app/scheduler/app.js
例如,將來如果您決定要托管這些服務,則只需將URL指向正確的方向即可。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.