gpt4 book ai didi

mysql - 如何保留我的数据库,但更改 docker-compose 中的代码?

转载 作者:行者123 更新时间:2023-11-29 06:30:41 25 4
gpt4 key购买 nike

我有一个在生产中的 Digital Ocean Droplet 上运行的 Python+MySQL Web 服务。当我在本地计算机上更新项目中的代码时,我希望更改也发生在 Droplet(在生产中)中。所以我执行以下部署:

$ ssh root@12.34.56.78
# cd project
# git pull
# docker-compose down
# docker-compose build
# docker-compose up -d

此后,我的数据库为空。里面没有我的 table 。如何更新正在运行的代码而不丢失数据?

我的代码

项目结构

.
├── 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

Dockerfile

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

最佳答案

您必须像这样为数据库创建一个命名卷

version: '3'

services:
mysql:
image: mysql:5.7
volumes:
- mysql_data:/var/lib/mysql

volumes:
mysql_data:

现在您可以安全地运行 docker-compose stopdocker-compose down 而不会丢失 mysql_data 卷上的数据。仅当您运行 docker-compose down -v 时,它才会删除该卷。

您可以通过运行docker volume ls来查看所有命名卷

快速说明:docker-compose 是为开发而不是生产而设计的。您可能需要考虑不同的策略。

关于mysql - 如何保留我的数据库,但更改 docker-compose 中的代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56434209/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com