部署容器
在Blog目录下执行部署容器命令(加 -d: 后台运行)
root@VM-0-14-root: ~$:/home/Blog# sudo docker-compose up -d
Creating network "Blog_my_backend" with driver "bridge"
Creating network "Blog_my_frontend" with driver "bridge"
Creating mysql_5.7.28 ... done
Creating web_mysite ... done
Creating nginx_1.17.9 ... done
运行之后查看所有容器的状态
初始化数据库
所有容器启动完成,数据库都是空的,需要初始化一下
# 初始化数据库
root@VM-0-14-root: ~$:/home/Blog# docker exec -it web_mysite python manage.py makemigrations
root@VM-0-14-root: ~$:/home/Blog# docker exec -it web_mysite python manage.py migrate
# 收集静态文件
root@VM-0-14-root: ~$:/home/Blog# docker exec -it web_mysite python manage.py migrate collectstatic
# 创建管理员
root@VM-0-14-root: ~$:/home/Blog# docker exec -it web_mysite python manage.py createsuperuser
数据库备份与还原
备份宿主机mysql数据
root@VM-0-14-root: sudo mysqldump -u root -h 127.0.0.1 -P 3306 -p dbname > ./bak.sql
Enter password:
导入备份数据到容器Mysql中
root@VM-0-14-root: sudo mysql -h 192.110.0.2 -u root -p dbname < ./bak.sql
Enter password:
Mysql数据库定时备份参考:Ubuntu设置定时任务自动备份mysql
注 :
(1)备份所有的数据库
root@VM-0-14-root: sudo mysqldump -u root -p --all-databases > bak.sql
(2)备份指定的数据库db1、db2以及db3
root@VM-0-14-root: sudo mysqldump -u root -p --databases db1 db2 db3 > bak.sql
(3)备份db数据库,当仅备份一个数据库时,--databases可以省略
root@VM-0-14-root: sudo mysqldump -u root -p db4 > bak.sql
root@VM-0-14-root: sudo mysqldump -u root -p --databases db4 > bak.sql
部署过程遇到的问题:
1. docker创建uwsgi启动容器后立马退出
Docker容器同时只能管理一个进程,如果这个进程退出那么容器也就退出了,但这不表示容器只能运行一个进程(其他进程可在后台运行),但是要使容器不退出必须有一个前台执行的进程。
那么在docker中使用uwsgi时,如果在uwsgi.ini配置文件中指定了daemonize参数,容器的uwsgi应用的日志将会输出到指定的文件, 进程会在后台运行,而不是在前台运行,这样就造成通过docker run启动或者compose启动时容器立刻退出的情况