我有一个python+mysql的webservice,运行在一个生产中的数字海洋水滴上。当我在本地机器上更新项目中的代码时,我希望这些更改也发生在水滴(生产中)中。因此,我执行以下操作来部署:
$ ssh root@12.34.56.78
# cd project
# git pull
# docker-compose down
# docker-compose build
# docker-compose up -d
之后,我的数据库是空的。里面没有我的桌子。如何更新正在运行的代码,而不丢失数据?
我的密码
项目结构
.
âââ db
âââ docker-compose.yml
âââ web
âââ Dockerfile
âââ project
â  âââ app.py
â  âââ __init__.py
â  âââ blueprint1
â  âââ blueprint2
â  âââ models.py
â  âââ static
â  âââ templates
â  âââ _version.py
âââ Makefile
âââ migrations
âââ README.md
âââ setup.cfg
âââ setup.py
âââ start.sh
âââ tests
âââ tox.ini
docker-compose.yml文件
version: "2"
services:
db:
image: mysql:5.7
ports:
- "32000:3306"
environment:
MYSQL_DATABASE: ***
MYSQL_ROOT_PASSWORD: ***
volumes:
- ./db:/docker-entrypoint-initdb.d/:ro
app:
build: ./web
links:
- db
ports:
- "5000:5000"
environment:
MYSQL_PORT: 32000
文档文件
FROM python:3.7-slim
# Copy projects code
RUN apt-get update && apt-get install -y git
COPY . /opt/app
WORKDIR /opt/app
RUN pip install -e . --no-cache-dir
# Start app
ENV ENV=prod
EXPOSE 5000
ENTRYPOINT ["sh", "start.sh"]
CMD ["/opt/app/start.sh"]
我试过的
# This killed my data:
$ docker-compose up -d --build app
# This did NOT update the code in app:
# 1
$ docker-compose stop app && docker-compose up -d app
# 2
$ docker-compose up -d --no-deps --build app