docer 部署步骤参考官方文档: https://www.spug.dev/docs/install-docker/
如果没有外网可以先在一台有外网的机器上把镜像build好并save,然后把镜像传到局域网的机器。
这里为了方面直接用官方的镜像,官方的image是有dockerfile的. 顺便学习一下他们的dockerfile 是怎么写的?
docker save -o spug_image.docker registry.aliyuncs.com/openspug/spug
然后在局域网的服务器上load这个image
docker load -i spug_image.docker
启动docker container需要注意一定要把数据持久化到宿主机上,否则container 一旦被删除所有的数据将随之消失.
如果需要持久化存储代码和数据,可以添加:-v 映射容器内/data路径
# mydata指的是本地磁盘路径,也可以是其他目录,但需要保证映射的本地磁盘路径已经存在,/data是容器内代码和数据初始化存储的路径 $ docker run -d --restart=always --name=spug -p 80:80 -v /mydata/:/data registry.aliyuncs.com/openspug/spug -p 参数是两个端口映射 一个是主机的转发端口,一个是容器内的侦听端口
持久化的作用就是将项目的源代码和数据库的相关操作持久化到宿主机上.
刚开始有个疑问,我没有建立数据库,我在spug上保存的数据都跑哪里去了?
难道是在别人的数据库中.
这个认识肯定是错误的,仔细看过docker file后,你会发现,镜像中其实是有下载一个mysql的。
查看该mysql 的连接信息:
docker exec -it spug /bin/bash 以交互模式进入这个container
可以看出这个项目使用了django框架
容器中的依赖服务。可以看到使用的是mariadb
/]# more /etc/supervisord.d/spug.ini [supervisord] nodaemon=true [program:mariadb] command = /usr/libexec/mysqld --user=mysql autostart = true
ld --user=mysql
autostart = true
还有其他依赖例如 nginx、redis... 暂时还没研究到这里. 知道的朋友请不吝赐教。
数据放在container里面,虽然会持久化在宿主机上,但是不能用工具连接并看到数据,就让有的人担心.
如何将spug的数据持久化的本地?
例如你的主机、发布、应用等信息怎么看到呢? 如果想用这些数据做其他客制化的东西都是很有必要把数据持久化在本地的.
1、先在本地的mysql 建数据库
2、修改mysql配置并停止容器中的数据库服务
# 1. 进入容器 $ docker exec -it spug bash # 2. 修改配置文件使访问外部数据库 $ vi /data/spug/spug_api/spug/overrides.py DATABASES = { 'default': { 'ATOMIC_REQUESTS': True, 'ENGINE': 'django.db.backends.mysql', 'NAME': 'spug', 'USER': 'spug', # 修改为外部数据库的用户 'PASSWORD': 'spug.dev', # 修改为外部数据的用户密码 'HOST': 'localhost', # 修改为外部数据的ip 'OPTIONS': { 'unix_socket': '/var/lib/mysql/mysql.sock', # !!!删除该行 'charset': 'utf8mb4', 'sql_mode': 'STRICT_TRANS_TABLES', } } } # 3. 停止容器内的数据库服务 $ vi /etc/supervisord.d/spug.ini # 找到如下行并删除 [program:mariadb] command = /usr/libexec/mysqld --user=mysql autostart = true # 4. 退出并重启容器 $ exit $ docker restart spug
3、此时你会发现切换为本地数据源之后的之前的数据都不在了
不要慌,只要是以持久化模式启动的container就问题不大。
毕竟数据已经在宿主机上镜像了一份。
只要启动一个内置mysql的spug container,然后把数据库备份下来
在本地数据源的mysql服务器上把把备份重放即可.
mysql -h 主机名 -u 用户名 -p
-h : 该命令用于指定客户端所要登录的MySQL主机名, 登录当前机器该参数可以省略;
-u : 所要登录的用户名;
-p : 告诉服务器将会使用一个密码来登录, 如果所要登录的用户名密码为空, 可以忽略此选项。
使用下面这个配置连接内置的spug.
以交互模式进入container
将备份从container 直接scp mysql服务器上
登录mysql将其恢复
先创建DB,然后导入sql
create databse spug;
切换到mysql 命令行执行,然后 source sql文件.