docker 部署spug运维神器

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 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
目录
相关文章
|
5天前
|
Ubuntu Linux 开发工具
docker 是什么?docker初认识之如何部署docker-优雅草后续将会把产品发布部署至docker容器中-因此会出相关系列文章-优雅草央千澈
Docker 是一个开源的容器化平台,允许开发者将应用程序及其依赖项打包成标准化单元(容器),确保在任何支持 Docker 的操作系统上一致运行。容器共享主机内核,提供轻量级、高效的执行环境。本文介绍如何在 Ubuntu 上安装 Docker,并通过简单步骤验证安装成功。后续文章将探讨使用 Docker 部署开源项目。优雅草央千澈 源、安装 Docker 包、验证安装 - 适用场景:开发、测试、生产环境 通过以上步骤,您可以在 Ubuntu 系统上成功安装并运行 Docker,为后续的应用部署打下基础。
docker 是什么?docker初认识之如何部署docker-优雅草后续将会把产品发布部署至docker容器中-因此会出相关系列文章-优雅草央千澈
|
2月前
|
人工智能 API 数据安全/隐私保护
使用 Docker 一键免费部署 63.8k 的私人 ChatGPT 网页应用
NextChat 是一个可以在 GitHub 上一键免费部署的私人 ChatGPT 网页应用,支持 GPT3、GPT4 和 Gemini Pro 模型。该项目在 GitHub 上获得了 63.8k 的 star 数。部署简单,只需拉取 Docker 镜像并运行容器,设置 API Key 后即可使用。此外,NextChat 还提供了预设角色的面具功能,方便用户快速创建对话。
208 22
使用 Docker 一键免费部署 63.8k 的私人 ChatGPT 网页应用
|
2月前
|
Java 应用服务中间件 Linux
【Docker容器化技术】docker安装与部署、常用命令、容器数据卷、应用部署实战、Dockerfile、服务编排docker-compose、私有仓库
本文主要讲解了Docker的安装与部署、常用命令、容器数据卷、应用部署实战、Dockerfile、服务编排docker-compose、私有仓库以及Docker容器虚拟化与传统虚拟机比较。
1111 12
【Docker容器化技术】docker安装与部署、常用命令、容器数据卷、应用部署实战、Dockerfile、服务编排docker-compose、私有仓库
|
1月前
|
Java 应用服务中间件 Docker
将基于 Spring 的 WAR 应用程序部署到 Docker:详尽指南
将基于 Spring 的 WAR 应用程序部署到 Docker:详尽指南
36 2
|
2月前
|
Java Linux Docker
什么是 Docker?如何将 Spring Boot 应用程序部署到 Docker?
什么是 Docker?如何将 Spring Boot 应用程序部署到 Docker?
50 3
|
2月前
|
机器学习/深度学习 数据采集 Docker
Docker容器化实战:构建并部署一个简单的Web应用
Docker容器化实战:构建并部署一个简单的Web应用
|
2月前
|
运维 开发者 Docker
Docker Compose:简化容器化应用的部署与管理
Docker Compose:简化容器化应用的部署与管理
|
2月前
|
Docker 微服务 容器
使用Docker Compose实现微服务架构的快速部署
使用Docker Compose实现微服务架构的快速部署
81 1
|
2月前
|
持续交付 开发者 Docker
掌握Docker容器化技术,加速软件开发与部署
掌握Docker容器化技术,加速软件开发与部署
57 0
|
2月前
|
前端开发 开发者 Docker
深入探索Docker Compose:简化多容器应用的部署
深入探索Docker Compose:简化多容器应用的部署
101 0

热门文章

最新文章