docker 部署spug运维神器

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
云数据库 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

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
|
2月前
|
运维 Devops 持续交付
揭秘 Docker 自动部署神器 Websoft9:热门开源软件一键部署
在企业IT建设中,软件部署常面临效率低、易出错等问题。通过Docker与自动化工具,可实现高效、标准化和可追溯的部署流程,提升企业应用交付效率,降低运维门槛,助力中小企业实现自动化部署。
152 5
揭秘 Docker 自动部署神器 Websoft9:热门开源软件一键部署
|
21天前
|
JavaScript 算法 前端开发
【Docker项目实战】使用Docker部署paopao-ce微社区
【Docker项目实战】使用Docker部署paopao-ce微社区
180 84
【Docker项目实战】使用Docker部署paopao-ce微社区
|
2月前
|
运维 Cloud Native 开发者
Docker:现代化应用开发与部署的神器
Docker:现代化应用开发与部署的神器
177 101
|
2月前
|
设计模式 Linux 开发工具
Docker部署会吗?
本段内容主要介绍了Docker常用命令、Linux基础指令及日志查看方法,还涉及SpringMVC的执行流程、设计模式与注解,适合用于面试中技术能力的展示。
83 0
|
13天前
|
存储 Docker Python
docker 部署 sftp
本文介绍SFTP服务的部署与配置,包括users.conf用户配置规则、Docker容器运行命令及上传目录权限说明,重点解析atmoz/sftp镜像的chroot机制与子目录映射,确保用户登录后正确访问/upload目录,并提供Python脚本实现文件上传示例。
58 12
docker 部署 sftp
|
14天前
|
运维 Linux 数据库
基于 Docker 部署 n8n 指南,新手一看就会
本教程详解如何通过 Docker 快速部署开源自动化工具 n8n,适合新手快速上手。内容涵盖官方部署步骤、常见难点及第三方一键部署方案,助你高效搭建自动化工作流平台。
268 6
|
20天前
|
前端开发 JavaScript 应用服务中间件
在Docker部署的前端应用中使用动态环境变量
以上步骤展示了如何在 Docker 配置过程中处理并注入环墨遁形成可执行操作流程,并确保最终用户能够无缝地与之交互而无须关心背后复杂性。
71 13
|
24天前
|
存储 Kubernetes 持续交付
为什么Docker容器化改变了开发与部署?
为什么Docker容器化改变了开发与部署?
|
8天前
|
人工智能 JSON 运维
告别假期规划的“人肉运维”!这个AI提示词,帮你“一键部署”十一完美旅行
十一黄金周将至,开发者们如何用“工程师思维”高效规划假期?本文推出一款AI旅行规划神器——结构化提示词,无需代码,只需填空,即可生成专业级定制攻略。从痛点分析到即用模板,涵盖行程、预算、避坑指南,助你一键生成完美假期方案,把时间留给诗和远方。
80 0
|
2月前
|
关系型数据库 MySQL 数据库
为什么 MySQL 不推荐用 Docker 部署?
本文探讨了MySQL是否适合容器化的问题,分析了Docker容器在数据安全、性能瓶颈、状态管理及资源隔离等方面的挑战,并指出目前主流分布式数据库如TDSQL和OceanBase仍倾向于部署在物理机或KVM上。
113 0