程序员大家是真惹不起啊!看不下去就动手!没有道理可讲。

为什么会有这样的感慨呢,让小编复述一下事情的原委。

小编的公司在2023年1月份发布了一款面向个人免费的SQL开发工具,可以面向多数据库管理的一款纯Web版工具SQL Studio,跨平台支持Windows、MacOS和Linux三种平台。

一位热心网友私信小编能不能支持容器部署,因为这款产品的研发正忙于解决大家反馈的各种问题,公司暂时并没有提供容器部署,需要再等等。

等待,可能是一位程序员最不能容忍的事情。于是,我们这位可爱的网友,自发动手把我司这款SQL工具制作成了容器,并总结了一段图文。

在此,小编非常感谢这位热心网友,同时也分享给各位程序员同行参考。特别申明,这篇文章的代码并未麦聪软件官方确认,仅供大家参考学习!


以下内容转自B站up主“嘿嘿嘿?!!”,转载正文如下:

摘要
SQL Studio 是由 麦聪软件 开发的一款全 web 的数据库管理和开发工具。可以便捷、高效、简单的管理多种数据库如: Oracle 、 PostgreSQL 、 MySQL 、 SQLite 、 SQL Server 、 DM(武汉达梦) 、 KingBase(人大金仓) 等。

目前 SQL Studio 官方并没有提供容器化的部署方案,本文尝试性的将 SQL Studio 制作成容器并通过 docker 和 kubernetes 将其部署。

环境信息


图1-1 主机信息

软件版本信息


图1-2 软件版本信息

制作镜像
访问麦聪软件 SQL Studio 下载页,注册账号,下载 SQL Studio Linux 版

http://www.maicongs.com/#/home/probation/studio

准备 SQL Studio 资源

[root@vlnx207 sqlstudio]# ls
dockerfile  sqlstudio_linux_1.0.2.zip

准备简化启动脚本

vim sqlstudio-start.sh

文件内如如下

#!/bin/bashSHELL_FOLDER=$(cd "$(dirname "$0")";pwd)
APP_JAR=$(cd $SHELL_FOLDER;ls Maicong-SQLStudio-*.jar)
LOG_PATH=$SHELL_FOLDER/logJAVA_OPTS="
-server
-Xms2g
-Xmx4g
-XX:+UseG1GC
-XX:+UseStringDeduplication
-XX:+AlwaysPreTouch
-XX:+PrintGCDetails
-XX:+PrintGCTimeStamps
-XX:+PrintGCCause
-Xloggc:$LOG_PATH/maicong-sqlstudio-gc.log
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=$LOG_PATH/maicong-sqlstudio-heapdump
-Dfile.encoding=utf-8"java $JAVA_OPTS -jar $SHELL_FOLDER/$APP_JAR --spring.config.location=config/maicong.yaml

为简化启动脚本添加执行权限

chmod a+x sqlstudio-start.sh

创建 dockerfile 文件

vim dockerfile

文件内如如下

FROM centos:centos7.9.2009
#容器内用户
USER root
#暴露端口
EXPOSE 18888#修改系统时区
ENV TZ Asia/Shanghai#加中文支持
RUN set -x \&& yum -y install kde-l10n-Chinese telnet \&& yum -y reinstall glibc-common \&& yum clean all \&& localedef -c -f UTF-8 -i zh_CN zh_CN.utf8ENV LANG=zh_CN.UTF-8
ENV LANGUAGE=zh_CN:zh
ENV LC_ALL=zh_CN.UTF-8#常用软件安装
RUN set -x \&& yum update -y \&& yum install -y telnet net-tools wget curl unzip \&& yum clean all \&& rm -rf /tmp/* \&& rm -rf /var/cache/yum/*#注入sqlstudio程序
WORKDIR /apps/usr/sqlstudio/
COPY ./sqlstudio_linux_1.0.2.zip /apps/usr/sqlstudio
RUN set -x \&& unzip -q sqlstudio_linux_1.0.2.zip -d /apps/usr/sqlstudio \&& rm -rf sqlstudio_linux_1.0.2.zip#注入简化启动脚本
WORKDIR /apps/usr/sqlstudio/linux
COPY ./sqlstudio-start.sh /apps/usr/sqlstudio/linux/#将sqlstudio自带的jdk变更为全局变量
ENV JAVA_HOME /apps/usr/sqlstudio/linux/jdk1.8.0_351
ENV JRE_HOME ${JAVA_HOME}/
ENV PATH ${JAVA_HOME}/bin:${PATH}
ENV CLASSPATH .:${JAVA_HOME}/lib/dt.jar:${JAVA_HOME}/lib/tools.jar#指定启动命令
CMD  ["/bin/bash","sqlstudio-start.sh"]

注:使用该 dockerfile 文件,构建出的镜像较大,该 dockerfile 文件是一个针对 SQL Studio 镜像制作的思路的体现。

优化 dockerfile 文件

使用多阶段构建方式,将构建镜像的过程拆分为两个阶段:build 阶段、 environment 阶段,在 build 阶段中将 SQL Studio 官方提供的的程序包 COPY 到构建容器中并安装 unzip 程序将其解压,在 environment 阶段将 build 阶段解压的程序包文件拷入并运行,通过这样的方式将镜像使用的空间减小,因本人习惯于使用 CentOS 作为基础镜像,也可以在构建中使用其他更小的基础镜像来完成 SQL Studio 的镜像制作。

FROM centos:centos7.9.2009 as build
USER root
EXPOSE 18888WORKDIR /apps/usr/sqlstudio/
COPY ./sqlstudio_linux_1.0.2.zip /apps/usr/sqlstudio/
COPY ./sqlstudio-start.sh /apps/usr/sqlstudio/RUN set -x \&& yum -y install unzip \&& yum clean all \&& unzip -q sqlstudio_linux_1.0.2.zip -d /apps/usr/sqlstudio/ \&& cp /apps/usr/sqlstudio/sqlstudio-start.sh /apps/usr/sqlstudio/linux/ \&& rm -rf sqlstudio_linux_1.0.2.zip \&& rm -rf /tmp/*  \&& rm -rf /var/cache/yum/*FROM centos:centos7.9.2009 as environment
USER root
EXPOSE 18888ENV TZ Asia/ShanghaiWORKDIR /apps/usr/sqlstudio/
COPY --from=build /apps/usr/sqlstudio/linux /apps/usr/sqlstudio/RUN set -x \&& yum update -y \&& yum -y install kde-l10n-Chinese telnet net-tools wget curl \&& yum -y reinstall glibc-common \&& yum clean all \&& localedef -c -f UTF-8 -i zh_CN zh_CN.utf8 \&& rm -rf /tmp/*  \&& rm -rf /var/cache/yum/*ENV JAVA_HOME /apps/usr/sqlstudio/jdk1.8.0_351
ENV JRE_HOME ${JAVA_HOME}/
ENV PATH ${JAVA_HOME}/bin:${PATH}
ENV CLASSPATH .:${JAVA_HOME}/lib/dt.jar:${JAVA_HOME}/lib/tools.jarENV LANG=zh_CN.UTF-8
ENV LANGUAGE=zh_CN:zh
ENV LC_ALL=zh_CN.UTF-8CMD  ["/bin/bash","sqlstudio-start.sh"]

分别使用优化前后的 dockerfile 文件构建镜像

dockerfile.old 文件对应优化前的 dockerfile 文件

dockerfile.new 文件对应优化后的 dockerfile 文件

docker build -f dockerfile.old -t sqlstudioold:1.0.2 .
docker build -f dockerfile.new -t sqlstudionew:1.0.2 .

dockerfile 文件优化前后对比

使用如下命令分别打印优化前后镜像的编译信息,查看镜像的占用空间

docker history <镜像ID或镜像名>

优化前

图2-1 优化前容器分层大小

注:图片中的优化前的镜像名和文档中镜像名存在不对应的问题,但是都是使用优化前的 dockerfile 文件构建的镜像不影响实际结果。

优化后

图2-2 优化前容器分层大小

对比前后的镜像变化,减少了两个 COPY 层,分别是拷入的 SQL Studio 官方提供的的程序包 275MB 和我们自行编写的快速启动脚本 535B ,通过分阶段构建的方式我们将镜像的大小从 1.2GB 缩小到了 923MB ,如果使用更小的基础镜像和其他的优化方式可以将镜像进一步压缩。

删除进行优化测试的俩个镜像

docker rmi sqlstudioold:1.0.2
docker rmi sqlstudionew:1.0.2

使用优化的后 dockerfile 文件制作镜像

docker build -f dockerfile -t sqlstudio:1.0.2 .

上传公共云镜像仓库

修改镜像 Tag 标签

docker tag sqlstudio:1.0.2 registry.cn-hangzhou.aliyuncs.com/sql_studio/sql-studio:1.0.2

上传 阿里云 镜像仓库

[root@vlnx211 ~]# docker push registry.cn-hangzhou.aliyuncs.com/sql_studio/sql-studio:1.0.2
The push refers to repository [registry.cn-hangzhou.aliyuncs.com/sql_studio/sql-studio]
4d13d7c57496: Pushed
6331bccae14c: Pushed
658f617325b7: Pushed
174f56854903: Pushed
1.0.2: digest: sha256:2095dff6a460ebb06b9e91e1deacbc06b5e9c8d8479c7dd7f71dae19034d3718 size: 1161

部署镜像
docker环境下部署
docker 部署命令

docker run -d --name=sqlstudio -p 18888:18888/tcp  -v /apps/usr/sqlstudio/log/:/apps/usr/sqlstudio/linux/log/  -v /apps/usr/sqlstudio/data/:/apps/usr/sqlstudio/linux/data/ sqlstudio:1.0.2

命令解析

docker run
-d
#后台运行
--name=sqlstudio
#定义容器名称
-p 18888:18888/tcp
#定义容器端口
-v /apps/usr/sqlstudio/log/:/apps/usr/sqlstudio/linux/log/
#配置挂载卷,将sqlstudio产生的日志输出到本地磁盘
-v /apps/usr/sqlstudio/data/:/apps/usr/sqlstudio/linux/data/
#配置挂载卷,将sqlstudio产生的数据输出到本地磁盘
sqlstudio:1.0.2
#指定镜像

验证部署是否正常

查看 SQL Studio 的控制台日志是否启动成功

[root@vlnx207 linux]# docker logs sqlstudio
/bin/bash: warning: setlocale: LC_ALL: cannot change locale (zh_CN.UTF-8)
14:06:09.164 [main] INFO com.mc.MainApplication - Maicong SQLStudio Start....   ____          _            __ _ _
/\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/  ___)| |_)| | | | | || (_| |  ) ) ) )
'  |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot ::                (v2.6.7)2023-01-18 14:06:09.614 [main] INFO  com.mc.MainApplication - Starting MainApplication v1.0.0-release using Java 1.8.0_351 on d440cb2cad54 with PID 12 (/apps/usr/sqlstudio/linux/Maicong-SQLStudio-1.0.0-release.jar started by root in /apps/usr/sqlstudio/linux)
2023-01-18 14:06:09.616 [main] INFO  com.mc.MainApplication - No active profile set, falling back to 1 default profile: "default"
2023-01-18 14:06:10.268 [main] WARN  org.mybatis.spring.mapper.ClassPathMapperScanner - No MyBatis mapper was found in '[org.spring.mc.dao.master]' package. Please check your configuration.
2023-01-18 14:06:10.633 [main] INFO  o.s.boot.web.embedded.tomcat.TomcatWebServer - Tomcat initialized with port(s): 18888 (http)
2023-01-18 14:06:10.645 [main] INFO  org.apache.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-18888"]
2023-01-18 14:06:10.645 [main] INFO  org.apache.catalina.core.StandardService - Starting service [Tomcat]
2023-01-18 14:06:10.646 [main] INFO  org.apache.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/9.0.62]
2023-01-18 14:06:10.737 [main] INFO  o.a.c.core.ContainerBase.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext
2023-01-18 14:06:10.737 [main] INFO  o.s.b.w.s.c.ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 1086 ms
2023-01-18 14:06:11.424 [main] INFO  s.d.s.w.PropertySourcedRequestMappingHandlerMapping - Mapped URL path [/v2/api-docs] onto method [springfox.documentation.swagger2.web.Swagger2Controller#getDocumentation(String, HttpServletRequest)]
2023-01-18 14:06:11.529 [main] INFO  o.s.b.a.web.servlet.WelcomePageHandlerMapping - Adding welcome page: ServletContext resource [/index.html]
2023-01-18 14:06:11.670 [main] INFO  org.apache.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-18888"]
2023-01-18 14:06:11.726 [main] INFO  o.s.boot.web.embedded.tomcat.TomcatWebServer - Tomcat started on port(s): 18888 (http) with context path ''
2023-01-18 14:06:11.727 [main] INFO  s.d.s.web.plugins.DocumentationPluginsBootstrapper - Context refreshed
2023-01-18 14:06:11.738 [main] INFO  s.d.s.web.plugins.DocumentationPluginsBootstrapper - Found 1 custom documentation plugin(s)
2023-01-18 14:06:11.760 [main] INFO  s.d.spring.web.scanners.ApiListingReferenceScanner - Scanning for api listing references
2023-01-18 14:06:11.980 [main] INFO  com.mc.MainApplication - Started MainApplication in 2.695 seconds (JVM running for 3.299)
2023-01-18 14:06:11.982 [main] INFO  com.mc.spring.lifecycle.AppLifecycleListener - App Lifecycle -> start
2023-01-18 14:06:11.983 [main] INFO  com.mc.MainApplication - Maicong SQLStudio started successfully.
2023-01-18 15:16:02.870 [http-nio-18888-exec-2] INFO  o.a.c.core.ContainerBase.[Tomcat].[localhost].[/] - Initializing Spring DispatcherServlet 'dispatcherServlet'
2023-01-18 15:16:02.872 [http-nio-18888-exec-2] INFO  org.springframework.web.servlet.DispatcherServlet - Initializing Servlet 'dispatcherServlet'
2023-01-18 15:16:02.886 [http-nio-18888-exec-2] INFO  org.springframework.web.servlet.DispatcherServlet - Completed initialization in 14 ms
2023-01-18 15:16:03.233 [http-nio-18888-exec-2] INFO  com.alibaba.druid.pool.DruidDataSource - {dataSource-1} inited
2023-01-18 15:16:06.241 [http-nio-18888-exec-8] INFO  com.mc.controller.PublicUserController - User IP address is:11.0.1.1

访问 SQL Studio 的 Web 界面,查看是否可以正常访问

SQL Studio 的 Web 界面如下图

图2-3 SQL Studio 的 Web 界面

kubernetes环境下部署

前期准备
在镜像制作服务器上修改镜像 Tag 标签

docker tag sqlstudio:1.0.2 harbor.sharks.top/sqlstudio/sqlstudio:1.0.2

将镜像上传 harbor 镜像存储

docker push harbor.sharks.top/sqlstudio/sqlstudio:1.0.2

在 NFS 持久化存储服务器创建 SQL Studio 持久化文件目录

mkdir -m 755 -p /apps/usr/nfs_data/ruoyi-cloud-sql-studio/{data,logs}

在 kubernetes master 节点创建 SQL Studio 的 YAML 资源文件存储目录

mkdir -m 755 -p /root/RuoYi-Cloud/sql-studio/

进入目录

cd /root/RuoYi-Cloud/sql-studio/

创建资源定义文件

创建 SQL Studio 的存储资源定义 YAML 文件,该章节采用 NFS 存储挂载到 PV , PVC 挂载到容器的方式进行,也可以采用其他的存储资源。

vim ruoyi-cloud-sql-studio-storage.yaml

文件内如如下

#SQL Studio 的日志存储 PV
---
apiVersion: v1
kind: PersistentVolume
metadata:name: ruoyi-cloud-sql-studio-logs-pvlabels:app: sql-studio
spec:capacity:storage: 5GiaccessModes:- ReadWriteOncemountOptions:- hard- nfsvers=4.1nfs:server: 11.0.1.207path: /apps/usr/nfs_data/ruoyi-cloud-sql-studio/logs/persistentVolumeReclaimPolicy: Retain#SQL Studio 的数据存储 PV
---
apiVersion: v1
kind: PersistentVolume
metadata:name: ruoyi-cloud-sql-studio-data-pvlabels:app: sql-studio
spec:capacity:storage: 5GiaccessModes:- ReadWriteOncemountOptions:- hard- nfsvers=4.1nfs:server: 11.0.1.207path: /apps/usr/nfs_data/ruoyi-cloud-sql-studio/data/persistentVolumeReclaimPolicy: Retain#SQL Studio 的日志存储 PVC
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:name: ruoyi-cloud-sql-studio-logs-pvcnamespace: ruoyi-cloud
spec:resources:requests:storage: 5GiaccessModes:- ReadWriteOnceselector:matchLabels:app: sql-studio#SQL Studio 的数据存储 PVC
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:name: ruoyi-cloud-sql-studio-data-pvcnamespace: ruoyi-cloud
spec:resources:requests:storage: 5GiaccessModes:- ReadWriteOnceselector:matchLabels:app: sql-studio

创建 SQL Studio 的 ConfigMap (配置字典)资源定义 YAML 文件

vim ruoyi-cloud-sql-studio-ConfigMap.yaml

文件内容如下

---
apiVersion: v1
kind: ConfigMap
metadata:labels:app: sql-studionamespace: ruoyi-cloudname: sql-studio-maicong.yamlnamespace: ruoyi-cloud
data:maicong.yaml: ># ======================== MaiCongSoftWare Configuration =========================## NOTE: MAICONGSOFTWARE comes with reasonable defaults for most settings.#       Before you set out to tweak and tune the configuration, make sure you#       understand what are you trying to accomplish and the consequences.## The primary way of configuring a node is via this file. This template lists# the most important settings you may want to configure for a production cluster.## Please consult the documentation for further information on configuration options:# http://www.maicongs.com/#/listdocu## -------------------------------------- Network --------------------------------------# set the server run port for backend and frontend, this is backend port# mustserver.port: 18888# ----------------------------------------- DB configuration ----------------------------------------master.datasource.initial-size: 10master.datasource.max-active: 100master.datasource.min-idle: 10# set the sqlite local path (have default if not set)#master.datasource.url: jdbc:sqlite:xxx/sqlite.dbmaster.datasource.url:# ---------------------------------------- LOG ----------------------------------------# log level, you can set info, error, warn, debuglogging.level.com.mc.dao: info# --------------------------------------- MYBATIS ------------------------------------mybatis.check-config-location: truemybatis.config-location: classpath:mybatis/mybatis-config.xmlmybatis.mapper-locations: classpath:mybatis/mapper/*.xmlmybatis.type-aliases-package: com.mc.entity# -------------------------------------- Network --------------------------------------server.tomcat.accept-count: 800server.tomcat.max-connections: 20000server.tomcat.max-max-threads: 1000server.tomcat.uri-encoding: UTF-8# -------------------------------------- SPRING ---------------------------------------spring.http.enncoding.charset: UTF-8spring.http.enncoding.enabled: truespring.http.enncoding.force: truespring.messages.encoding: UTF-8spring.mvc.async.request-timeout: 180000spring.mvc.pathmatch.matching-strategy: ant_path_matcherspring.messages.basename: i18n/messages

创建 SQL Studio 的部署资源定义 YAML 文件

vim ruoyi-cloud-sql-studio-Deployment-Service.yaml

文件内容如下

---
apiVersion: apps/v1
kind: Deployment
metadata:annotations:k8s.kuboard.cn/displayName: SQL Studiolabels:k8s.kuboard.cn/layer: monitork8s.kuboard.cn/name: sql-studioname: sql-studionamespace: ruoyi-cloud
spec:progressDeadlineSeconds: 600replicas: 1revisionHistoryLimit: 10selector:matchLabels:k8s.kuboard.cn/layer: monitork8s.kuboard.cn/name: sql-studiostrategy:rollingUpdate:maxSurge: 25%maxUnavailable: 25%type: RollingUpdatetemplate:metadata:annotations:kubectl.kubernetes.io/restartedAt: '2023-01-18T22:44:29+08:00'creationTimestamp: nulllabels:k8s.kuboard.cn/layer: monitork8s.kuboard.cn/name: sql-studiospec:containers:- image: 'harbor.sharks.top/sqlstudio/sqlstudio:1.0.2'imagePullPolicy: Alwayslifecycle:preStop:exec:command:- /bin/bash- /apps/usr/sqlstudio/linux/- stoplivenessProbe:failureThreshold: 3httpGet:path: /port: 18888scheme: HTTPperiodSeconds: 10successThreshold: 1timeoutSeconds: 1name: sql-studioports:- containerPort: 18888name: serverprotocol: TCPreadinessProbe:failureThreshold: 3httpGet:path: /port: 18888scheme: HTTPperiodSeconds: 10successThreshold: 1timeoutSeconds: 1resources:limits:memory: 4000Mirequests:memory: 2000MistartupProbe:failureThreshold: 3httpGet:path: /port: 18888scheme: HTTPperiodSeconds: 10successThreshold: 1timeoutSeconds: 1terminationMessagePath: /dev/termination-logterminationMessagePolicy: FilevolumeMounts:- mountPath: /apps/usr/sqlstudio/linux/data/name: data- mountPath: /apps/usr/sqlstudio/linux/log/name: logs- mountPath: /etc/localtimename: timezonereadOnly: true- mountPath: /apps/usr/sqlstudio/linux/config/maicong.yamlname: maicong-yamlreadOnly: truesubPath: maicong.yamldnsPolicy: ClusterFirstimagePullSecrets:- name: sharks-harborrestartPolicy: AlwaysschedulerName: default-schedulersecurityContext: {}terminationGracePeriodSeconds: 30volumes:- name: logspersistentVolumeClaim:claimName: ruoyi-cloud-sql-studio-logs-pvc- name: datapersistentVolumeClaim:claimName: ruoyi-cloud-sql-studio-data-pvc- hostPath:path: /etc/localtimetype: Filename: timezone- configMap:defaultMode: 420items:- key: maicong.yamlpath: maicong.yamlname: sql-studio-maicong.yamlname: maicong-yaml---
apiVersion: v1
kind: Service
metadata:annotations: {}labels:k8s.kuboard.cn/layer: monitork8s.kuboard.cn/name: sql-studioname: sql-studionamespace: ruoyi-cloud
spec:clusterIP:externalTrafficPolicy: ClusterinternalTrafficPolicy: ClusteripFamilies:- IPv4ipFamilyPolicy: SingleStackports:- name: servernodePort: 32888port: 18888protocol: TCPtargetPort: 18888selector:k8s.kuboard.cn/layer: monitork8s.kuboard.cn/name: sql-studiosessionAffinity: Nonetype: NodePort

导入资源定义文件

导入存储资源定义 YAML 文件

kubectl apply -f ruoyi-cloud-sql-studio-storage.yaml

输出如下

[root@vlnx201 sql-studio]# kubectl create -f ruoyi-cloud-sql-studio-storage.yaml
persistentvolume/ruoyi-cloud-sql-studio-logs-pv created
persistentvolume/ruoyi-cloud-sql-studio-data-pv created
persistentvolumeclaim/ruoyi-cloud-sql-studio-logs-pvc created
persistentvolumeclaim/ruoyi-cloud-sql-studio-data-pvc created

导入配置字典资源定义 YAML 文件

kubectl apply -f ruoyi-cloud-sql-studio-ConfigMap.yaml

输出如下

[root@vlnx201 sql-studio]# kubectl apply -f ruoyi-cloud-sql-studio-ConfigMap.yaml
configmap/sql-studio-maicong.yaml created

导入部署资源定义 YAML 文件

kubectl apply -f ruoyi-cloud-sql-studio-Deployment-Service.yaml

输出如下

[root@vlnx201 sql-studio]# kubectl apply -f ruoyi-cloud-sql-studio-Deployment-Service.yaml
deployment.apps/sql-studio created
service/sql-studio created

功能验证

请参考通过 docker 部署 SQL Studio 章节,该部分不在赘述

SQL Studio平台的使用

使用如下地址访问 SQL Studio

http://11.0.1.207:18888/#/login

SQL Studio 的 WEB 登录界面如下图


图3-1 SQL Studio 的 WEB 登录界面

本次 SQL Studio 设置的账号密码如下

图3-2 账号信息

注:首次登陆时,填写的账号密码即为之后使用中的账号密码

SQL Studio 的 WEB 工作界面如下图

图3-3 SQL Studio 的 WEB 工作界面

SQL Studio 用户管理

图3-4 SQL Studio 用户管理

测试用户信息如下,请根据实际情况进行配置


图3-5 测试用户信息

SQL Studio 添加数据源


图3-6 SQL Studio 添加数据源

SQL Studio 配置数据源

图3-7 SQL Studio 配置数据源

测试数据源信息如下,请根据实际情况进行配置


图3-8 测试数据源信息

SQL Studio 简单操作

新建查询


图3-9 新建查询

导出数据

图3-10 导出数据

如需了解 SQL Studio 更多详细操作,请移步如下地址

http://www.maicongs.com/#/home/web

程序员真是惹不起,看不下去就动手!为了方便部署,居然亲自动手把这款SQL工具制作成容器相关推荐

  1. 从一个程序员的角度看——微信小应用

    前言: 最近初步了解了一下微信小应用,APP端的同事也非常感兴趣,于是在公司内部做了一个小小的分享,分享的过程中有很多讨论内容,大家也是非常感兴趣和有自己的看法,当时"混乱"的场面 ...

  2. java书籍_这本最适合夯实基础的Java 书籍,80% 的 Java 程序员没认真看过

    今天要给大家带来的一本书,是大名鼎鼎的head first系列丛书的一本<head first Java>相信很多学习Java的朋友对它都不会陌生. 深入浅出系列书籍是由O'Reilly出 ...

  3. 高级程序员值得一看的33本编程书籍

    作为一名程序员,编程语言只是基础,只是工具,想实现从程序员到高级工程师的进步,需要花更多的精力在底层原理,算法,数据结构,编程思想上.推荐了33本高级程序员值得一看的书籍,注重底层知识,思想,用空的时 ...

  4. 2017年秋招美团Java程序员开发,看我如何拿到offer

    转载自  2017年秋招美团Java程序员开发,看我如何拿到offer 本人是一名本科毕业非计算机专业的程序员,面了阿里,结果没过,最后面上了美团,热乎乎的面经,昨天面的美团,虽然面完了HR面,但是感 ...

  5. 我要嫁给一个程序员你们怎么看?

     程序员是什么?视乎很神奇的物种?嫁就嫁呗,有什么稀奇的?这里列出N个事例: 1,住酒店,进房间第一件事,把我按门口--别想太美:他会要求我看清门后逃生示意图,并口述一遍如何快速找到楼梯. 2,去 ...

  6. Windows程序员进阶应该看的那些书

    Windows程序员进阶应该看的那些书 业内有一个普遍的现象,一般Windows程序员在写了3-5年的代码的时候会有一段迷茫期,因为这个时期的程序员已经掌握了常用的一些编程技巧,对某种编程语言已经比较 ...

  7. 2017年美团Java程序员开发,看我如何拿到offer

    2017年美团Java程序员开发,看我如何拿到offer 热乎的面经,昨天面的美团,虽然面完了HR面,但是感觉希望不大,希望能走运拿到offer吧.三面技术面面经如下: 一面: 中间省略掉大概几个问题 ...

  8. 推荐几本书,这些书.Net程序员最好要看

    <Effective C#> <敏捷软件开发:原则.模式与实践> <.Net框架程序设计> <.Net设计规范> <重构-改善既有代码的设计> ...

  9. ubantu java编辑器_Linux Ubuntu中最好的代码编辑器 程序员都这么看吗?

    [IT168 应用]Linux Ubuntu 中最好的代码编辑器是哪个 ? 这要看程序员的使用习惯和喜好了,Atom.Brackets.Sublime Text 是最常用的三个,也许程序员们还有更喜欢 ...

最新文章

  1. PHP文件上传主要代码讲解
  2. pythonidle新建文件_(一)Python入门:04IDLE开发环境的使用-建立Python源文件
  3. MATLAB的iptcheckinput函数详解
  4. 一天1个机器学习知识点(二)
  5. 匿名内部类探究——它是一个实例
  6. 图像条纹检测 python_机器视觉系统应用之—玻璃表面缺陷检测
  7. Interactive Python:Mini-project # 1 - Guess the number game
  8. (36)FPGA打N拍设计(第8天)
  9. Linux PPP实现源码分析-2
  10. java循环之后求和代码,Java lambda 循环累加求和代码
  11. 细谈eclipse PDT开发WordPress插件
  12. 山西计算机公共机房建设,山西省机房建设标准.doc
  13. [Simulink]非线性系统模型建立及相轨迹
  14. matlab2010b和7.0,Matlab的安装(以matlab2010b和matlab7.0的安装方法为例)
  15. PPT(office365)之背景图片、矢量图标、颜色搭配使用心得
  16. R语言基础画图/绘图/作图
  17. NTC热敏电阻的主要技术参数
  18. struts2与jasperreport整合其余问题
  19. js有关时间换算的一些方法
  20. 百度热力图颜色说明_揭秘!张家口100万人口热力图,看完你就知道房子该买哪里了...

热门文章

  1. 一个网上在线密码破解网站
  2. 01-css选择的艺术
  3. 华为NCE网管配置EVPL业务(共享VCTrunk)之路径法
  4. jquery实现jQuery实现图片轮播效果,jQuery实现焦点新闻
  5. MTK feature phone 音频功放开启关闭驱动示例
  6. 产品经理必备的20个常用工具
  7. TCP第三次握手失败会怎么样
  8. Java获取某个字符在指定字符串中出现的第N次的位置
  9. 如何快速创建在线员工培训课程
  10. 实验9.1 递归计算函数值Ack(m,n)的值