日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

dockerfile mysql例子_docker-compose 实用示例

發布時間:2023/12/3 数据库 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 dockerfile mysql例子_docker-compose 实用示例 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

簡單來說, docker compose就是一鍵啟動/關閉多個容器的工具, 它能夠幫你解決容器之間依賴的問題, 哪個先啟動, 依賴哪個容器等.

當開發的系統越來越復雜, 開發環境和部署都沒那么簡單的時候, 可以試試docker compose.

下面會把我實際經驗中的一個例子簡化出來,一步步教大家如何搭建docker compose,對踩過的坑進行總結,希望對docker能有更深的了解.

1. 搭建環境背景

以我目前在做的一個用python開發的web應用為例, 需要搭建一個依賴mysql, localstack, presto, celery, python flask等多項docker容器.

2. 配置文件

通過官網的介紹, 創建docker-compose.yml, 配置上面提到的幾個services.version:?'3'services:

mysql:

#?mysql?鏡像

image:?registry.docker-cn.com/library/mysql:latest????environment:

#?初始化mysql環境變量

MYSQL_DATABASE:?test??????MYSQL_ROOT_PASSWORD:?"123456"

#?暴露端口號

ports:

-?"3306:3306"

localstack:

image:?atlassianlabs/localstack:latest????environment:

#?localstack主要是為了模擬aws?s3,?方便單元測試

AWS_ACCESS_KEY_ID:?unit-test-user??????AWS_SECRET_ACCESS_KEY:?unit-test-user??????AWS_DEFAULT_REGION:?cn-north-1

AWS_DEFAULT_OUTPUT:?text??????SERVICES:?s3????ports:

-?"4572:4572"

presto:

#?presto在我的另外一篇文章中有寫如何制作鏡像?https://www.jianshu.com/p/bb5181008cd7

image:?presto:v0.180

ports:

-?"8888:8888"

web:

#?這個鏡像可以根據代碼中依賴的包進行build,?節省每次安裝的時間

image:?python-web-base:v0.1

command:?bash?/base/sbin/docker_compose_web_entrypoint.sh????#?暴露端口號,?成功啟動之后可以通過?http://localhost:8081?進行訪問

ports:

-?"8081:8081"

#?環境變量的設置

environment:

S3_PORT:?4572

S3_HOST:?localstack??????AWS_ACCESS_KEY_ID:?unit-test-user??????AWS_SECRET_ACCESS_KEY:?unit-test-user??????AWS_DEFAULT_REGION:?cn-north-1

AWS_DEFAULT_OUTPUT:?text??????#?在docker-compose中,?想要在web?service中訪問

#?mysql,?localstack?or?presto,?需要給一個hostname,

#?hostname跟service?name一致.

PRESTO_HOST:?presto??????MYSQL_HOST:?mysql??????MYSQL_DATABASE:?test??????MYSQL_ROOT_PASSWORD:?"123456"

depends_on:

-?mysql

-?localstack

-?presto????volumes:#???code?base

-?.:/base#???query?result?shared?volume:?/tmp/

-?/tmp:/tmp

celery:

image:?python-web-base:v0.1

command:?bash?/base/sbin/docker_compose_celery_entrypoint.sh????environment:

C_FORCE_ROOT:?"true"

PRESTO_HOST:?presto??????MYSQL_HOST:?mysql??????MYSQL_DATABASE:?test??????MYSQL_ROOT_PASSWORD:?"123456"

AWS_ACCESS_KEY_ID:?unit-test-user??????AWS_SECRET_ACCESS_KEY:?unit-test-user??????AWS_DEFAULT_REGION:?cn-north-1

AWS_DEFAULT_OUTPUT:?text????depends_on:

-?mysql

-?presto

-?localstack????volumes:#???code?base

-?.:/base#???query?result?shared?volume:?/tmp/

-?/tmp:/tmp

3. 遇到的坑

3.1 host name問題

配置mysql的時候由于不知道docker-compose中網絡通信是怎么樣的, 就用localhost:3306 或者127.0.0.1:3306去連mysql, 總是報錯, 無法連接該mysql. 發現原來在docker-compose環境下, 不管是mysql還是其他servers如presto, 想要連接這些服務, 都要用這些服務的名字進行連接. 如下所示version:?'3'services:

mysql:

...

presto:

...

localstack:

...

可以連接的服務的名稱分別為mysql, presto 和localstack. 于是我在環境變量中export這些HOST name, 方便我在程序中去判斷是否存在這些環境變量, 如果有的話就連接這個hostname.

3.2 服務啟動的先后順序

當mysql還沒有成功啟動, celery會一直報錯, 并不斷地重復連接mysql, 于是我想設置這些服務的啟動先后順序, 用了docker compose的 depens_on, 但是depens_on只是表達服務之間的依賴關系, 并不會按照次序來啟動service.depends_on does not wait for db and redis to be “ready” before starting web - only until they have been started. If you need to wait for a service to be ready, see Controlling startup order for more on this problem and strategies for solving it.

看來如果想讓web或者celery服務等mysql啟動完畢后再啟動, 需要一個wait-for-it腳本的幫忙. 這個人寫的腳本還比較清晰簡單的: https://github.com/yamyamyuo/wait-for-it

可以在command添加一個腳本, 腳本中使用wait-for-it去輪詢依賴的services, 一旦services啟動成功, web 和 celery就可以繼續進行啟動了.

3.3 暴露端口號

服務對外暴露的端口號不要忘記填寫, 否則其他docker container無法找到該服務. 注意事項:

當通過HOST:CONTAINER 格式來映射端口號的時候, 低于60的端口號會有錯誤提示, 因為YAML解析格式例如 xx:yy的數字是基于base-60的. 因此強烈建議用雙引號把 "HOST:CONTAINER" 括起來.

3.4 volumes

為了能夠持久化和共享容器中的數據, Docker提出了volume的概念. Volume可以讓容器中的聯合文件系統, 以目錄或文件的形式存于宿主機上.

我最初遇到的一個問題是celery service 通過異步的方式執行一些任務, 任務結束后會把結果寫到本地文件, web service 查詢的時候會到本地文件中查看是否有相關結果. 這個時候volume排上用場. 只要把容器內用到的文件地址映射到宿主機, 同時讓web和celery service 都共享該volume即可.

以上就是本次docker compose遇到的一些問題, 如有問題可以留言~

作者:小熊說_BruinTalk

鏈接:https://www.jianshu.com/p/46db38b94200

總結

以上是生活随笔為你收集整理的dockerfile mysql例子_docker-compose 实用示例的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。