docker 部署spug运维神器

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: 如果没有外网可以先在一台有外网的机器上把镜像build好并save,然后把镜像传到局域网的机器。

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 参数是两个端口映射 
一个是主机的转发端口,一个是容器内的侦听端口

20210402194245915.png

持久化的作用就是将项目的源代码和数据库的相关操作持久化到宿主机上.

刚开始有个疑问,我没有建立数据库,我在spug上保存的数据都跑哪里去了?

难道是在别人的数据库中.

这个认识肯定是错误的,仔细看过docker file后,你会发现,镜像中其实是有下载一个mysql的。

查看该mysql 的连接信息:

docker exec -it spug /bin/bash 以交互模式进入这个container

可以看出这个项目使用了django框架

20210402194722249.png

容器中的依赖服务。可以看到使用的是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的数据持久化的本地?


例如你的主机、发布、应用等信息怎么看到呢?  如果想用这些数据做其他客制化的东西都是很有必要把数据持久化在本地的.20210402195533297.png

20210402195703563.png

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.

20210402194722249.png

以交互模式进入container

20210406150047377.png

将备份从container 直接scp mysql服务器上

登录mysql将其恢复

先创建DB,然后导入sql

create databse  spug;

切换到mysql 命令行执行,然后 source sql文件.

20210430165340431.png

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
打赏
0
1
1
0
49
分享
相关文章
使用 Websoft9 运维面板部署和维护 WordPress 到底有多简单?
如何实现 WordPress 极速部署?Websoft9 通过应用商店一键安装与可视化运维管理,10 分钟完成零门槛上线。
48 1
Docker部署RocketMQ5.2.0集群
本文详细介绍了如何使用Docker和Docker Compose部署RocketMQ 5.2.0集群。通过创建配置文件、启动集群和验证容器状态,您可以快速搭建起一个RocketMQ集群环境。希望本文能够帮助您更好地理解和应用RocketMQ,提高消息中间件的部署和管理效率。
281 91
Docker 部署 Redis
在使用 Docker 部署 Redis 时,为实现数据持久化,需正确挂载容器内的数据目录到宿主机。推荐命令如下: ``` docker run -d --name redis -v /mnt/data/redis:/data -p 6379:6379 redis ``` 该命令将宿主机的 `/mnt/data/redis` 目录挂载到容器的 `/data` 目录,确保 Redis 数据持久化。此路径更通用,适合大多数场景。避免使用不匹配的挂载路径,如 `/var/lib/redis` 或 `/mnt/data/redis` 到非默认目录,以防止数据无法正确持久化。
大模型文件Docker镜像化部署技术详解
大模型文件Docker镜像化部署技术详解
56 2
|
15天前
|
在Docker上部署Ollama+AnythingLLM完成本地LLM Agent部署
通过以上步骤,您可以成功在Docker上部署Ollama和AnythingLLM,实现本地LLM Agent的功能。在部署过程中,确保环境和配置正确,以避免不必要的问题。希望本文能够帮助您顺利完成部署,并在本地环境中高效地使用LLM模型。
352 8
Stirling-PDF:51.4K Star!用Docker部署私有PDF工作站,支持50多种PDF操作,从此告别在线工具
Stirling-PDF 是一款基于 Docker 的本地化 PDF 编辑工具,支持 50 多种 PDF 操作,包括合并、拆分、转换、压缩等,同时提供多语言支持和企业级功能,满足个人和企业用户的多样化需求。
118 6
Stirling-PDF:51.4K Star!用Docker部署私有PDF工作站,支持50多种PDF操作,从此告别在线工具
Websoft9 运维面板,全网真正的一键部署应用
Websoft9运维面板实现应用真·一键部署,通过智能环境适配、安全架构与容器化技术,将传统数小时部署缩短至分钟级,显著提升效率与安全性。
34 5
docker快速部署OS web中间件 数据库 编程应用
通过Docker,可以轻松地部署操作系统、Web中间件、数据库和编程应用。本文详细介绍了使用Docker部署这些组件的基本步骤和命令,展示了如何通过Docker Compose编排多容器应用。希望本文能帮助开发者更高效地使用Docker进行应用部署和管理。
64 19
Linux服务器部署docker windows
在当今软件开发中,Docker成为流行的虚拟化技术,支持在Linux服务器上运行Windows容器。流程包括:1) 安装Docker;2) 配置支持Windows容器;3) 获取Windows镜像;4) 运行Windows容器;5) 验证容器状态。通过这些步骤,你可以在Linux环境中顺利部署和管理Windows应用,提高开发和运维效率。
94 1
Docker——阿里云服务器使用Docker部署python项目全程小记
本文记录了我在阿里云服务器上使用Docker部署python项目(flask为例)的全过程,在这里记录和分享一下,希望可以给大家提供一些参考。
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等