多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

瀚高数据库安全版Docker容器化部署与数据持久化实战

瀚高数据库安全版Docker容器化部署与数据持久化实战 1. 项目概述为什么要在容器里跑数据库最近在搞一个内部工具的后端重构数据层选型时领导拍板要用瀚高数据库。这数据库在国产化替代的圈子里名气不小尤其是它的安全版据说在等保、分保这些场景下是常客。但问题来了我们开发团队人手一台MacBook ProM1芯片和若干台Linux开发机传统的安装部署方式——下载安装包、配环境变量、初始化数据库、配置安全策略——一套流程下来半天就没了而且不同机器上还可能遇到各种依赖库版本冲突的玄学问题环境一致性简直是个噩梦。这时候Docker的优势就凸显出来了。把数据库塞进容器相当于给每个开发人员、每个测试环境都发了一个完全一致的、开箱即用的“数据库罐头”。无论底层是x86还是ARM是CentOS还是Ubuntu只要Docker能跑起来里面的瀚高数据库就能以一模一样的方式运行。这对于需要快速搭建开发、测试、甚至演示环境来说效率提升不是一点半点。我这次的目标就是把瀚高数据库安全版v4.5.9这个“大家伙”稳稳当当地装进Docker容器实现单机运行并且把过程中那些容易踩坑的细节和配置要点都理清楚。2. 核心思路与方案选型2.1 为什么是Docker而非虚拟机或物理机部署在决定用Docker之前我们其实也考虑过虚拟机VM方案。用VMware或者VirtualBox装个Linux再在里面部署瀚高环境隔离性确实更好更接近生产环境。但它的缺点也很明显资源占用大每个VM都要跑一个完整的操作系统、启动慢、镜像文件动辄几个GB在开发机之间迁移和分发非常笨重。Docker容器则轻量得多。它和宿主机共享操作系统内核只是通过Namespace和Cgroups技术实现了进程、网络、文件系统等资源的隔离。一个包含了瀚高数据库及其所有依赖的Docker镜像通常只有几百MB到1GB左右拉取和启动速度都以秒计。这对于需要频繁创建、销毁环境的CI/CD流水线或者需要快速验证功能的后端开发来说是无可比拟的优势。当然Docker也有它的局限性最典型的就是数据持久化问题。容器本身是无状态的一旦容器被删除里面的所有数据包括你创建的数据库、表、用户数据都会灰飞烟灭。所以我们的核心方案必须围绕“如何让容器内的数据库数据持久化地保存在宿主机上”来设计。2.2 镜像来源选择官方、社区还是自构建这是动手前第一个要做的决策。通常有三个选择官方镜像最理想的情况是瀚高数据库的出品方提供了官方的Docker镜像。这通常意味着镜像经过充分测试安全性有保障更新维护及时。我会第一时间去Docker Hub或厂商官网寻找。社区镜像如果官方没有提供可能会存在一些技术爱好者或第三方公司维护的镜像。这类镜像需要谨慎评估务必检查Dockerfile的源码确认没有植入后门或恶意代码并且其版本是否与我们需要的一致v4.5.9安全版。自行构建这是最彻底但也最复杂的方式。我们需要拿到瀚高数据库安全版v4.5.9的安装包然后编写Dockerfile从基础操作系统镜像如CentOS或Ubuntu开始一步步安装依赖、解压安装包、执行初始化脚本、配置安全参数。这种方式完全可控可以定制每一个细节但要求对瀚高数据库的安装流程和Dockerfile语法有深入了解。从实际操作和安全性出发如果存在官方或可信的v4.5.9安全版镜像应优先采用。如果没有则必须选择自构建。绝不能使用来源不明、版本模糊的社区镜像尤其是在“安全版”这种涉及敏感数据处理的场景下。2.3 单机运行架构设计所谓“单机运行”就是指在单独的一台物理机或虚拟机上运行一个Docker容器容器内运行一个瀚高数据库实例。这个架构看似简单但要保证其可用、可靠需要考虑以下几个关键点网络模式数据库需要被宿主机上的应用或其他容器访问。最简单的办法是使用Docker的“桥接网络”bridge并将容器的服务端口如瀚高的默认端口5866映射到宿主机的某个端口上。存储卷Volume映射这是实现数据持久化的核心。我们需要在宿主机上创建一个目录例如/opt/highgo/data然后在启动容器时将这个目录映射到容器内瀚高数据库的数据目录例如/home/highgo/hgdb/data。这样数据库产生的所有数据文件都会实际存储在宿主机上容器重启或重建都不会丢失数据。配置文件外挂数据库的配置文件如pg_hba.conf,postgresql.conf瀚高可能对其有重命名或修改最好也能通过Volume映射到宿主机。这样我们可以直接在宿主机上修改配置然后重启容器生效无需进入容器内部操作管理和版本控制都更方便。运行用户与权限为了安全数据库进程不应该以root用户运行。我们需要在Dockerfile中创建一个专用的非root用户如highgo来运行数据库服务。同时要确保宿主机上用于数据持久化的目录其权限允许容器内的这个用户进行读写。基于以上思路我们的最终方案可以概括为基于可信的瀚高v4.5.9安全版镜像或自构建镜像通过Docker命令或Docker Compose配置宿主机端口映射、数据卷持久化、配置文件外挂并以非root用户身份运行容器。3. 实操准备与环境检查3.1 宿主机环境要求在拉取或构建镜像之前必须确保宿主机环境就绪。这里以LinuxCentOS 7/8或Ubuntu 20.04/22.04为例。首先Docker Engine是必须的。可以通过以下命令安装以Ubuntu为例# 更新apt包索引 sudo apt-get update # 安装必要的依赖包允许apt通过HTTPS使用仓库 sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common # 添加Docker官方GPG密钥 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - # 设置稳定版仓库 sudo add-apt-repository deb [archamd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable # 再次更新apt包索引 sudo apt-get update # 安装Docker CE社区版 sudo apt-get install -y docker-ce docker-ce-cli containerd.io # 启动Docker服务并设置开机自启 sudo systemctl start docker sudo systemctl enable docker # 将当前用户加入docker组避免每次使用sudo操作后需退出终端重新登录生效 sudo usermod -aG docker $USER注意如果你是Windows或macOS用户需要安装的是Docker Desktop。安装过程相对图形化但务必在安装后在设置中确认“Virtualization”或“Use the WSL 2 based engine”已启用且运行正常。很多启动失败问题如“virtualization support not detected”都源于BIOS中未开启虚拟化支持Intel VT-x/AMD-V或Hyper-V/WSL2未正确配置。安装完成后运行docker --version和docker run hello-world来验证Docker安装和运行是否成功。其次磁盘空间。确保宿主机有足够的空间存放镜像和持久化数据。一个数据库镜像加上未来的数据文件建议预留至少20GB的空间。使用df -h命令查看。最后防火墙与SELinux。如果宿主机开启了防火墙如firewalld或ufw需要放行你计划映射的宿主机端口例如5866。如果使用了SELinuxCentOS默认开启在挂载数据卷时可能会遇到权限问题。一个简单的临时解决方案是在运行容器时添加--privileged参数不推荐用于生产或更正确地配置SELinux策略。对于开发测试也可以将SELinux设置为宽容模式setenforce 0但这会降低安全性。3.2 获取瀚高数据库安全版v4.5.9资源假设我们没有找到现成的官方Docker镜像需要走自构建路线。那么第一步是获取安装包。访问瀚高数据库官方网站找到下载中心或客户支持页面。通常需要注册账号并可能涉及授权许可。安全版v4.5.9可能是一个独立的安装包文件名可能类似于highgo-secure-4.5.9-buildxx-linux-x64.run假设是Linux 64位安装包。仔细阅读安装文档。安全版通常有额外的安全配置步骤比如设置强制访问控制、审计策略等。这些步骤的部分内容可能需要在我们编写的Dockerfile中体现或者在容器首次启动时通过初始化脚本完成。将下载的安装包和相关的许可文件如果有准备好放入我们后续构建镜像的上下文目录中。4. 构建与运行从Dockerfile到运行中的容器4.1 编写Dockerfile自构建场景如果采用自构建我们需要创建一个构建目录里面包含Dockerfile和安装包。highgo-docker/ ├── Dockerfile ├── highgo-secure-4.5.9-buildxx-linux-x64.run └── licenses/ (可选存放许可文件)下面是一个简化的Dockerfile示例基于CentOS 7系统镜像# 使用一个轻量级的基础镜像这里以CentOS 7为例 FROM centos:7 # 维护者信息 LABEL maintaineryour-emailexample.com # 安装必要的系统依赖 RUN yum install -y glibc-common libaio net-tools which \ yum clean all \ rm -rf /var/cache/yum/* # 创建运行数据库的非root用户和用户组 RUN groupadd -r highgo useradd -r -g highgo -m -d /home/highgo -s /bin/bash highgo # 创建数据库数据目录并设置权限 RUN mkdir -p /home/highgo/hgdb/data chown -R highgo:highgo /home/highgo # 将安装包复制到镜像内假设安装包已放在构建上下文根目录 COPY highgo-secure-4.5.9-buildxx-linux-x64.run /tmp/ # 切换到highgo用户进行安装有些安装包要求非root USER highgo WORKDIR /home/highgo # 执行安装程序这里假设是静默安装并指定安装目录 # 具体安装参数请参考瀚高官方文档-Djava.awt.headlesstrue 是为了避免图形界面问题 RUN chmod x /tmp/highgo-secure-4.5.9-buildxx-linux-x64.run \ /tmp/highgo-secure-4.5.9-buildxx-linux-x64.run --mode unattended --installpath /home/highgo/hgdb --superpassword “YourStrongPass123” \ rm -f /tmp/highgo-secure-4.5.9-buildxx-linux-x64.run # 将数据库的bin目录加入PATH环境变量 ENV PATH/home/highgo/hgdb/bin:$PATH ENV PGDATA/home/highgo/hgdb/data # 切换回root进行一些全局配置如果需要 USER root # 暴露数据库默认端口瀚高数据库默认端口可能是5866请以实际为准 EXPOSE 5866 # 定义数据卷方便外部挂载 VOLUME [/home/highgo/hgdb/data] # 切换回数据库运行用户 USER highgo # 设置容器启动时执行的命令 # 这里使用一个启动脚本会更灵活可以处理初始化、配置加载等 CMD [/home/highgo/hgdb/bin/start-hgdb.sh]这个Dockerfile做了以下几件事基于CentOS 7。安装基础依赖。创建专用用户highgo。复制并运行安装包进行静默安装。设置环境变量。暴露端口声明数据卷。指定启动命令。实操心得安装包的具体安装参数--mode unattended等必须参照瀚高官方提供的静默安装文档。示例中的--superpassword是设置数据库超级用户密码在生产环境中绝对不应该将密码明文写在Dockerfile里而应该通过环境变量在容器运行时传入或者通过启动脚本从安全的地方读取。4.2 构建镜像与解决构建中的常见问题在包含Dockerfile的目录下执行构建命令docker build -t highgo-secure:4.5.9 .这个过程可能会遇到一些问题网络问题构建过程中需要从CentOS官方仓库下载包如果网络不畅可能导致构建失败。可以考虑在Dockerfile的RUN yum install命令前添加国内镜像源或者使用宿主机的代理。安装包兼容性确保下载的安装包是针对Linux的并且与基础镜像的系统架构x86-64匹配。如果基础镜像是ARM架构如苹果M芯片则需要对应的ARM版本安装包。权限问题在构建后期切换用户时如果之前以root身份创建了文件需要确保highgo用户有足够的权限访问安装目录和数据目录。chown -R命令是关键。构建成功后使用docker images命令可以看到新生成的镜像highgo-secure:4.5.9。4.3 运行容器关键参数详解镜像构建好后就是激动人心的运行时刻了。我们使用docker run命令这里拆解每个参数的含义docker run -d \ --name highgo-secure-container \ -p 5866:5866 \ -v /opt/highgo/data:/home/highgo/hgdb/data \ -v /opt/highgo/conf:/home/highgo/hgdb/data/config \ -e POSTGRES_PASSWORDYourStrongPass123 \ --restart unless-stopped \ highgo-secure:4.5.9-d后台运行detached mode。--name给容器起一个名字方便后续管理启动、停止、查看日志。-p 5866:5866端口映射。格式为宿主机端口:容器内端口。这里将容器内的瀚高数据库服务端口假设是5866映射到宿主机的5866端口。这样外部应用通过连接宿主机IP:5866就能访问到容器内的数据库。-v /opt/highgo/data:/home/highgo/hgdb/data这是数据持久化的核心。将宿主机目录/opt/highgo/data挂载到容器内的数据目录。即使容器被删除数据也安全地留在宿主机上。首次运行前请确保宿主机上的/opt/highgo/data目录存在并且权限合适最好让highgo用户能读写或权限设为777用于测试。-v /opt/highgo/conf:/home/highgo/hgdb/data/config可选。将配置目录挂载出来方便修改。前提是你要知道瀚高数据库的确切配置路径。-e POSTGRES_PASSWORDYourStrongPass123设置环境变量。这里示例用了PostgreSQL常见的变量名实际上瀚高数据库的超级用户密码环境变量名可能不同可能是HG_PASSWORD或HIGHGO_PASSWORD务必查阅官方文档。同样密码不应在命令行中明文指定对于生产环境更安全的方式是使用Docker Secrets或通过文件传入。--restart unless-stopped设置重启策略。除非手动停止否则容器退出时Docker会自动重启它。这对于数据库服务很重要。highgo-secure:4.5.9指定要运行的镜像名和标签。运行后使用docker ps查看容器状态应该是Up。使用docker logs highgo-secure-container可以查看数据库启动日志确认是否初始化成功、有无报错。4.4 使用Docker Compose编排推荐对于单机但服务稍复杂的场景使用Docker Compose来定义和运行多容器应用更优雅。我们可以创建一个docker-compose.yml文件version: 3.8 services: highgo-db: image: highgo-secure:4.5.9 # 如果使用官方镜像这里替换为官方镜像名如 highgodb/hgdb-secure:4.5.9 container_name: highgo-secure-compose restart: unless-stopped ports: - 5866:5866 environment: - HIGHGO_PASSWORDYourStrongPass123 # 假设的环境变量名需确认 - TZAsia/Shanghai # 设置容器时区 volumes: - ./data:/home/highgo/hgdb/data # 使用相对路径数据会保存在当前目录下的data文件夹 - ./conf:/home/highgo/hgdb/data/config # 配置文件挂载 # 如果宿主机目录权限有问题可以尝试在命令中初始化目录权限非最佳实践仅作演示 # command: # sh -c # if [ ! -f /home/highgo/hgdb/data/PG_VERSION ]; then # initdb --encodingUTF8 --localeC -D /home/highgo/hgdb/data; # fi; # exec postgres -D /home/highgo/hgdb/data # 然后在同一目录下执行docker-compose up -d即可启动所有定义的服务。使用docker-compose logs -f查看日志docker-compose down停止并移除容器注意down命令默认不会移除数据卷但我们的数据已持久化到宿主机./data所以是安全的。5. 连接测试与基础配置5.1 连接数据库验证服务容器运行起来后我们需要确认数据库服务确实在监听并可以连接。进入容器内部检查docker exec -it highgo-secure-container /bin/bash进入后切换到数据库安装目录使用psql命令行工具连接本地数据库实例su - highgo cd /home/highgo/hgdb/bin ./psql -U sysdba -d highgo # 使用默认的超级用户 sysdba 连接 # 或者 ./psql postgres://sysdba:YourStrongPass123localhost:5866/highgo如果成功进入psql提示符如highgo#说明数据库服务运行正常。从宿主机外部连接 在宿主机上或者同一网络内的另一台机器上使用任何支持PostgreSQL协议的客户端如pgAdmin, DBeaver或者宿主机上安装的psql客户端进行连接。主机运行Docker的宿主机IP地址。端口5866即-p参数映射的宿主机端口。用户名sysdba瀚高默认超级用户。密码启动容器时设置的密码。数据库highgo默认数据库。5.2 基础安全与性能配置容器内虽然我们用的是安全版但一些基础配置仍需根据容器环境调整。进入容器后主要修改两个配置文件路径可能因安装方式而异通常在数据目录下postgresql.conf(或瀚高对应的hgdb.conf)listen_addresses默认可能是localhost意味着只接受本机连接。为了让外部能访问需要改为*或0.0.0.0。注意在容器内监听0.0.0.0是安全的因为容器的网络是隔离的外部访问需要通过端口映射。max_connections设置最大连接数根据容器分配的内存调整默认值可能偏小。shared_buffers共享缓冲区大小通常设置为系统内存的25%。在容器中需要参考容器可见的内存而非宿主机总内存。可以通过/proc/meminfo查看。timezone设置时区如Asia/Shanghai。pg_hba.conf客户端认证配置文件。为了允许从宿主机或其他网络连接需要添加相应的记录。例如添加一行host all all 0.0.0.0/0 md5这表示允许所有来源的IP0.0.0.0/0通过密码md5方式连接所有数据库。在生产环境中这过于宽松应替换为具体的客户端IP段。修改完配置后必须重启容器使配置生效docker restart highgo-secure-container或者如果配置是通过外挂卷映射的在宿主机上修改./conf目录下的文件后重启容器即可。6. 数据持久化、备份与迁移实战6.1 验证数据持久化这是容器化数据库的命门必须彻底验证。进入容器创建测试数据docker exec -it highgo-secure-container bash su - highgo psql -U sysdba在psql中执行CREATE DATABASE test_persistence; \c test_persistence CREATE TABLE test_table (id SERIAL PRIMARY KEY, name VARCHAR(100)); INSERT INTO test_table (name) VALUES (Data before container restart); SELECT * FROM test_table;停止并删除容器docker stop highgo-secure-container docker rm highgo-secure-container注意我们使用了-v挂载了数据卷所以docker rm不会删除宿主机上的/opt/highgo/data目录。重新创建并启动容器docker run -d --name new-highgo-container -p 5866:5866 -v /opt/highgo/data:/home/highgo/hgdb/data highgo-secure:4.5.9进入新容器验证数据docker exec -it new-highgo-container bash su - highgo psql -U sysdba -d test_persistence SELECT * FROM test_table;如果能看到之前插入的记录‘Data before container restart’恭喜你数据持久化完全成功6.2 备份与恢复策略即使数据持久化了定期备份仍然是铁律。由于数据文件直接在宿主机上备份变得非常直观。物理备份文件系统级 最简单粗暴也最可靠的方式就是直接备份宿主机上的数据卷目录。# 假设数据卷在 /opt/highgo/data # 在备份前建议进入容器执行检查点确保数据一致性可选但推荐 docker exec highgo-secure-container bash -c su - highgo -c pg_ctl -D /home/highgo/hgdb/data checkpoint # 然后直接打包备份整个目录 tar -czf /backup/highgo_data_$(date %Y%m%d_%H%M%S).tar.gz -C /opt/highgo data/恢复时停止当前数据库容器将备份的tar.gz解压到目标位置覆盖原data目录然后启动指向新数据目录的容器即可。逻辑备份使用pg_dump 这种方式备份的是SQL语句恢复时会重建数据库对象和数据兼容性更好但备份恢复速度较慢。# 在宿主机上执行通过容器内的pg_dump工具 docker exec highgo-secure-container bash -c su - highgo -c pg_dump -U sysdba -d highgo --formatcustom /tmp/backup.dump # 将备份文件从容器复制到宿主机 docker cp highgo-secure-container:/tmp/backup.dump /backup/highgo_logic_$(date %Y%m%d).dump恢复时# 先将备份文件复制到容器 docker cp /backup/highgo_logic_20231027.dump highgo-secure-container:/tmp/ # 在容器内执行恢复注意这会覆盖现有数据需谨慎 docker exec highgo-secure-container bash -c su - highgo -c pg_restore -U sysdba -d highgo --clean --create /tmp/highgo_logic_20231027.dump6.3 容器与数据的迁移迁移分为两部分镜像迁移和数据迁移。镜像迁移如果你是在A机器上构建的镜像想在B机器上运行最简单的方法是将镜像推送到私有或公共的Docker Registry如Docker Hub阿里云容器镜像服务然后在B机器上拉取。也可以使用docker save和docker load命令通过文件传输。# 在A机器上保存镜像为tar文件 docker save -o highgo-secure-4.5.9.tar highgo-secure:4.5.9 # 将tar文件拷贝到B机器 scp highgo-secure-4.5.9.tar userB-machine:/tmp/ # 在B机器上加载镜像 docker load -i /tmp/highgo-secure-4.5.9.tar数据迁移数据卷/opt/highgo/data的迁移就是普通的目录迁移。使用rsync,scp或直接打包复制到新机器的对应目录即可。迁移前务必停止源容器确保数据文件不再被写入。7. 常见问题排查与性能调优7.1 启动与连接问题排查表问题现象可能原因排查步骤与解决方案容器启动后立即退出 (Exited (1))1. 启动命令或脚本错误。2. 数据目录权限问题导致数据库初始化或启动失败。3. 端口冲突宿主机5866端口已被占用。1.docker logs 容器名查看详细错误日志。2. 检查宿主机数据目录权限确保容器内运行用户如highgo可读写。可尝试chmod -R 777 /opt/highgo/data测试生产环境不推荐。3.netstat -tlnp | grep 5866查看端口占用修改-p参数为其他端口如-p 5867:5866。容器状态为Up但无法连接1. 数据库服务未成功启动或监听地址不对。2. 防火墙宿主机或云服务商未放行端口。3.pg_hba.conf配置未允许远程连接。1.docker exec -it 容器名 bash进入容器ps aux | grep postgres查看进程netstat -tlnp查看是否监听在0.0.0.0:5866。2. 检查宿主机防火墙规则sudo ufw status(Ubuntu) 或sudo firewall-cmd --list-all(CentOS)。3. 检查容器内pg_hba.conf文件确保有对应IP范围的host ... md5记录。连接时报“密码认证失败”1. 密码错误。2. 数据库用户不存在。3.pg_hba.conf中认证方法配置错误。1. 确认连接时使用的密码是否与启动容器时设置的环境变量一致。2. 进入容器用psql本地连接确认用户是否存在。3. 检查pg_hba.conf对于密码连接方法应为md5或scram-sha-256。Docker Desktop 启动失败提示虚拟化相关错误1. BIOS中CPU虚拟化支持Intel VT-x/AMD-V未开启。2. Hyper-V或WSL2未启用Windows。3. 与已有虚拟机软件冲突。1. 重启进入BIOS找到虚拟化相关选项如Intel Virtualization Technology并启用。2. 在“启用或关闭Windows功能”中勾选Hyper-V和“适用于Linux的Windows子系统”。3. 尝试关闭其他虚拟机软件如VMware, VirtualBox。7.2 容器内数据库性能调优要点在容器中运行数据库性能调优的边界和物理机略有不同。资源限制与分配默认情况下容器可以使用宿主机的所有资源。这可能导致单个容器耗尽资源影响宿主机。建议使用docker run的-m(内存限制) 和--cpus(CPU限制) 参数为数据库容器设置合理的上限。docker run -d --name highgo-db -m 4g --cpus2 ... highgo-secure:4.5.9这限制了容器最多使用4GB内存和2个CPU核心。在容器内部数据库看到的“总内存”和“CPU核心数”就是这些限制值因此像shared_buffers这样的参数应该基于这个限制值来设置例如shared_buffers 1GB对于4GB内存限制是合理的。I/O性能数据库是I/O密集型应用。Docker容器默认的存储驱动如overlay2会带来一些开销。对于数据卷如果宿主机是SSD性能通常可以接受。如果对I/O要求极高可以考虑使用--mount typebind代替-v性能略有提升。将数据目录放在宿主机的高性能磁盘或分区上。在云环境下使用云厂商提供的块存储服务并直接挂载到容器。内核参数调整一些影响数据库性能的内核参数如shmmax,shmall,vm.overcommit_memory需要在宿主机层面修改而不是容器内。因为容器共享宿主机内核。修改这些参数需要宿主机root权限并需评估对宿主机上其他服务的影响。7.3 安全加固建议使用非root用户运行我们的Dockerfile中已经创建了highgo用户并在最后切换至此用户运行。务必确保这一点。最小化镜像自构建时在安装完成后清理掉不必要的缓存和临时文件如yum clean all,rm -rf /tmp/*减少镜像体积和潜在攻击面。敏感信息管理数据库密码、密钥等绝不能硬编码在Dockerfile或docker-compose.yml文件中。应使用Docker Secrets在Swarm模式下或通过环境变量文件--env-file传入并在容器启动脚本中读取。对于Compose可以使用env_file指令。定期更新镜像关注基础镜像如CentOS和数据库软件本身的安全更新定期重建和部署镜像。网络隔离如果宿主机上运行多个服务可以考虑使用自定义的Docker网络而不是默认的bridge网络实现服务间的网络隔离。将瀚高数据库安全版放入Docker容器运行绝不仅仅是换了一种安装方式。它带来的是一套以“不可变基础设施”和“声明式配置”为核心的现代化应用部署和管理思想。一旦你熟悉了这套流程你会发现环境搭建、复制、迁移、升级都变得前所未有的简单和可控。当然容器化并非银弹对于超大规模、超高可用的生产集群可能需要更复杂的编排工具如Kubernetes和设计如StatefulSet。但对于开发、测试、预发布乃至中小型生产单实例来说本文所详述的Docker单机运行方案已经是一个足够健壮、高效且安全的起点。
返回列表