Mar*_*oma 4 mysql docker-compose devops
我有一个 Python+MySQL webservice 在生产中的 Digital Ocean 液滴上运行。当我在本地机器上更新项目中的代码时,我希望更改也发生在 Droplet(生产中)中。因此,我执行以下操作进行部署:
$ ssh root@12.34.56.78
# cd project
# git pull
# docker-compose down
# docker-compose build
# docker-compose up -d
Run Code Online (Sandbox Code Playgroud)
在此之后,我的数据库是空的。它里面没有我的桌子。如何更新正在运行的代码但不丢失数据?
.
??? 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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
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"]
Run Code Online (Sandbox Code Playgroud)
# 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
Run Code Online (Sandbox Code Playgroud)
您必须像这样为数据库创建一个命名卷
version: '3'
services:
mysql:
image: mysql:5.7
volumes:
- mysql_data:/var/lib/mysql
volumes:
mysql_data:
Run Code Online (Sandbox Code Playgroud)
现在您可以安全地运行docker-compose stop或docker-compose down不丢失mysql_data卷上的数据。只有当您运行docker-compose down -v它时,它才会删除卷。
您可以通过运行来查看所有命名的卷 docker volume ls
快速说明:docker-compose 是为开发而设计的,而不是为生产而设计的。您可能需要考虑不同的策略。
| 归档时间: |
|
| 查看次数: |
7950 次 |
| 最近记录: |