Closed kingmo888 closed 4 months ago
可以直接写在 run.sh 里,Docker也是基于 run.sh 运行的。
docker-compose.yaml 是基于run.sh吗?
docker-compose.yaml 是基于run.sh吗?
Dockerfile 文件定义一个 Docker 容器基于什么系统环境(于是用户可以不用操心配置py环境和依赖的问题,直接都打包好了)、运行什么程序、怎么运行,其中最后一行: https://github.com/kingmo888/rustdesk-api-server/blob/0aec8b49ec6602ce8ebe79b2f6db8b25d357690d/Dockerfile#L17 表示容器入口点是运行 run.sh (也就是我说本docker应用基于run.sh运行的意思)
这个文件是开发者用的,把应用构建成 Docker 镜像就靠 Dockerfile 中的指令
docker-compose.yaml 文件是给用户参考的,它定义创建和运行一个容器指定用什么镜像、容器名、网络类型、用什么参数(映射文件路径、环境变量等),其作用相当于 Shell 中执行 docker run xxxxxxx
命令。
但 docker-compose 可以看作是 docker run 的超集,它可以定义的参数更多更清晰,还能把几个容器组合在一起运行(例如nginx+php+mysql)。
再扩展一下,本例其实有两种解法:
固定在容器中执行 把这两个命令写在 run.sh 里,下次发版重新构建新镜像,用户升级到新镜像时,容器就会按期望的方式执行。
让用户调整运行参数 写在 docker-compose.yaml 里,docker-compose甚至能自定义入口点(会覆盖Dockerfile默认的)或运行参数。
对用户而言 1 是比较友好的,不用手动去改什么参数,升级就行。
cool!
能否在docker中增加指令,
启动前执行如下两条: python manage.py makemigrations python manage.py migrate
作用: 当models有升级时,自动更新升级数据库。向前兼容。 @Cp0204