Docker技术入门与实战【2.2】

news2026/4/29 3:08:37
11.6 CMS内容管理系统Content Management SystemCMS指的是提供内容编辑服务的平台程序。CMS可以让不懂编程的普通人方便又轻松地发布、更改和管理各类数字内容主要以文本和图像为主。下面笔者将以WordPress为例介绍如何使用Docker运行CMS。WordPress简介WordPress是风靡全球的免费开源的内容管理系统。WordPress是博客、企业官网、产品首页等内容相关平台的主流实现方案之一除WordPress之外还有Drupal、Joomla、Typo3等CMS系统。WordPress基于PHP和MySQL架构设计简单明了可以方便地制作主题、插件和各种功能模块。更重要的是WordPress的社区非常庞大在线资源非常丰富并且在各大网络空间商和云平台中受到广泛的支持。根据2013年8月的统计数据流量排名前一千万的网站中有22%使用了WordPress系统。使用官方镜像首先通过Docker Hub下载官方WordPress镜像$ sudo docker pull wordpress然后就可以创建并运行一个WordPress容器并连接到mysql容器$ sudo docker run --name some-wordpress --link some-mysql:mysql -d wordpress启动容器时可以带以下环境参数·-e WORDPRESS_DB_USERhttp://www.hzcourse.com/resource/readBook?path/openresources/teach_ebook/uncompressed/15029/OEBPS/Text/... 设置WrodPress的数据库用户名默认是“root”。·-e WORDPRESS_DB_PASSWORDhttp://www.hzcourse.com/resource/readBook?path/openresources/teach_ebook/uncompressed/15029/OEBPS/Text/... 设置WordPress的数据库密码默认值是连接至此WordPress容器的MySQL容器的MYSQL_ROOT_PASSWORD环境变量的值。-e WORDPRESS_DB_NAMEhttp://www.hzcourse.com/resource/readBook?path/openresources/teach_ebook/uncompressed/15029/OEBPS/Text/... 设置WordPress所使用的数据库的名称默认 是“wordpress”。 ·-e WORDPRESS_AUTH_KEYhttp://www.hzcourse.com/resource/readBook?path/openresources/teach_ebook/uncompressed/15029/OEBPS/Text/...-e WORDPRESS_SECURE_AUTH_KEYhttp://www.hzcourse.com/resource/readBook?path/openresources/teach_ebook/uncompressed/15029/OEBPS/Text/...-e WORDPRESS_LOGGED_IN_KEYhttp://www.hzcourse.com/resource/readBook?path/openresources/teach_ebook/uncompressed/15029/OEBPS/Text/...-e WORDPRESS_NONCE_KEYhttp://www.hzcourse.com/resource/readBook?path/openresources/teach_ebook/uncompressed/15029/OEBPS/Text/...-e WORDPRESS_AUTH_SALThttp://www.hzcourse.com/resource/readBook?path/openresources/teach_ebook/uncompressed/15029/OEBPS/Text/...-e WORDPRESS_SECURE_AUTH_SALThttp://www.hzcourse.com/resource/readBook?path/openresources/teach_ebook/uncompressed/15029/OEBPS/Text/...-e WORDPRESS_LOGGED_IN_SALThttp://www.hzcourse.com/resource/readBook?path/openresources/teach_ebook/uncompressed/15029/OEBPS/Text/...-e WORDPRESS_NONCE_SALThttp://www.hzcourse.com/resource/readBook?path/openresources/teach_ebook/uncompressed/15029/OEBPS/Text/... 加密盐和随机串默认值是随机的SHA1值。如果WORDPRESS_DB_NAME指定的数据库在MySQL容器中不存在那么此镜像会使用WORDPRESS_DB_USER用户自动创建一个同名数据库。同样用户可以使用-p参数来进行端口映射$ sudo docker run --name some-wordpress --link some-mysql:mysql -p 8080:80 -d wordpress此时可在浏览器中访问http://localhost:8080来打开WordPress页面。WordPress官方镜像的更多信息可以参考https://registry.hub.docker.com/_/wordpress/。11.7 本章小结本章首先介绍了Apache和Ningx两种比较流行的Web服务器镜像的创建其中Nginx还介绍了淘宝的衍生版本。但是我们介绍的安装、配置、编译的方法都是依据一些比较常见的需求如果读者有其他需求比如Apache、Nginx需要编译新的功能模块应该根据自己需求来重新定制镜像特别是在生产环境中一些细微的参数配置可能带来性能上巨大的变化。本章的2.3.3和2.3.4小节介绍了目前比较流行的Java中间件服务器Tomcat和Weblogic的镜像创建。笔者一直认为中间件服务器是Docker容器应用的最佳实践原因如下·中间件服务器是除数据库服务器外的主要计算节点很容易成为性能瓶颈所以通常需要大批量部署而Docker对于批量部署有着许多先天的优势详见本书第一部分内容。·中间件服务器结构清晰在剥离了配置文件、日志、代码目录之后容器几乎可以处于零增长状态这使得容器的迁移和批量部署更加方便。·中间件服务器很容易实现集群在使用硬件的F5软件的Nginx等负载均衡后中间件服务器集群变得非常容易。值得注意的是由于目前Docker暂不支持修改运行中的容器的一些配置比如无法为运行中的容器映射更多的宿主主机目录无法为运行中的主机映射更多宿主主机的网络等等读者在使用中间件容器的时候需要事先规划好容器的用途和可能开放的网络端口等资源。本章的最后两个小节介绍了比较常见的LAMP套件和WordPress镜像的创建。其在开发环境中使用非常方便但是生产环境中因为性能和其他方面的一些考虑通常会有专门的Web和数据库服务器。需要特别注意的是对于程序代码、程序的资源目录、日志、数据库文件等需要实时更新的数据一定要通过-v参数映射到宿主主机的目录中来使用Docker的AUFS文件格式会产生较大的性能问题原理部分请参考本书的第一部分和第三部分。IBM研究院也针对Docker的各项性能做了比较详细的测试可以从这里下载报告http://domino.research.ibm.com/library/cyberdig.nsf/papers/0929052195DD819C85257D2300681E7B/$File/rc25482.pdf。第12章 数据库应用主流数据库方案包括关系数据库SQL和非关系数据库NoSQL方案。关系数据库是建立在关系模型基础上的数据库借助于集合代数等数学概念和方法来处理数据库中的数据支持复杂的事物处理和结构化查询。目前流行的关系型数据库有MySQL、Oracle、PostGreSQL、MariaDB、SQLServer等等。非关系数据库是新兴的数据库技术它放弃了传统关系型数据库的部分强一致性限制使其更适用于需要大规模的并行处理的生产环境并能在这些场景下发挥出优异的性能。NoSQL是关系型数据库的良好补充代表产品有MongoDB、Redis、CouchDB等。本章选取了最具代表性的MySQL、Oracle、MongoDB三款数据库来展示基于Docker创建相关镜像并进行应用的过程。12.1 MySQLMySQL是流行的开源关系数据库实现因为其高性能、可靠性和适应性而得到广泛应用和关注。1.下载文件从GitHub Dockerpool社区下载mySQL镜像项目$ git clone https://github.com/DockerPool/mysql.git Cloning into mysqlhttp://www.hzcourse.com/resource/readBook?path/openresources/teach_ebook/uncompressed/15029/OEBPS/Text/... remote: Counting objects: 13 done. remote: Compressing objects: 100% (13/13) done. remote: Total 13 (delta 1) reused 8 (delta 0) Unpacking objects: 100% (13/13) done. Checking connectivityhttp://www.hzcourse.com/resource/readBook?path/openresources/teach_ebook/uncompressed/15029/OEBPS/Text/... done. 查看内容包括已经写好的Dockerfile和若干脚本 $ cd mysql $ ls create_db.sh Dockerfile import_sql.sh LICENSE my.cnf mysqld_charset.cnf README.md run.sh 其中Dockerfile内容为 #本文件参考了tutum的Dockerfile FROM sshd MAINTAINER Waitfish dwj_zz163.com #安装软件 ENV DEBIAN_FRONTEND noninteractive RUN apt-get update \ apt-get -yq install mysql-server-5.6 pwgen \ rm -rf /var/lib/apt/lists/* # 删除预安装的数据库文件 RUN rm -rf /var/lib/mysql/* # 添加文件夹下的MYSQL配置文件 ADD my.cnf /etc/mysql/conf.d/my.cnf ADD mysqld_charset.cnf /etc/mysql/conf.d/mysqld_charset.cnf # 添加MYSQL的脚本 ADD import_sql.sh /import_sql.sh ADD run.sh /run.sh RUN chmod 755 /*.sh # 设置环境变量 用户名以及秘密 ENV MYSQL_USER admin ENV MYSQL_PASS **Random** # 设置主从复制模式下的环境变量 ENV REPLICATION_MASTER **False** ENV REPLICATION_SLAVE **False** ENV REPLICATION_USER replica ENV REPLICATION_PASS replica # 设置可以允许挂载的卷 可以用来备份数据库和配置文件 VOLUME [/etc/mysql /var/lib/mysql] # 设置可以映射的端口 如果是从我们的sshd镜像继承的话 默认还会开启22端口 EXPOSE 3306 CMD [/run.sh] 2.创建镜像 使用docker build命令来创建镜像mysqllatest $ sudo docker build -t mysql:latest . Sending build context to Docker daemon 95.23 kB Sending build context to Docker daemon Step 0 : FROM sshd --- 312c93647dc3 Step 1 : MAINTAINER Waitfish dwj_zz163.com --- Running in a149f8a7933f --- edbbfe8b4895 Removing intermediate container a149f8a7933f Step 2 : ENV DEBIAN_FRONTEND noninteractive --- Running in e80cbb29cadb --- 81fc6101a236 Removing intermediate container e80cbb29cadb Step 3 : RUN apt-get update apt-get -yq install mysql-server-5.6 pwgen rm -rf /var/lib/apt/lists/* --- Running in 5d220fe833c2 http://www.hzcourse.com/resource/readBook?path/openresources/teach_ebook/uncompressed/15029/OEBPS/Text/... Removing intermediate container 3c3254e8cc1e Successfully built f008f97bdc14 dwjiZ23pznlje4Z:~/mysql$ sudo docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE mysql latest f008f97bdc14 About a minute ago 539.1 MB 3.使用镜像 使用默认方式启动后台容器不添加环境变量并使用-P参数自动映射容器的22和3306端口。 $ sudo docker run -d -P mysql 检查容器进程启动情况和端口映射情况可见容器的22端口被映射到本地的49153端口。 $ sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES eef1632ccd4e mysql:latest /run.sh 8 seconds ago Up 8 seconds 0.0.0.0:49153-22/tcp, 0.0.0.0:49154-3306/tcp angry_einstein 通过映射的本地49153端口SSH登录容器并查看运行的进程。 $ ssh 127.0.0.1 -p 49153 The authenticity of host [127.0.0.1]:49153 ([127.0.0.1]:49153) cant be established. ECDSA key fingerprint is db:35:7a:60:2d:11:d5:97:5a:e6:84:a6:95:f0:4f:32. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added [127.0.0.1]:49153 (ECDSA) to the list of known hosts. Welcome to Ubuntu 14.04 LTS (GNU/Linux 3.2.0-54-generic x86_64) * Documentation: https://help.ubuntu.com/ The programs included with the Ubuntu system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Ubuntu comes with ABSOLUTELY NO WARRANTY to the extent permitted by applicable law. rooteef1632ccd4e:~# ps -ef |grep mysql root 1 0 0 20:14 ? 00:00:00 /bin/sh /usr/bin/mysqld_safe mysql 1974 1 0 20:14 ? 00:00:00 /usr/sbin/mysqld --basedir/usr --datadir/var/lib/mysql --plugin-dir/usr/lib/mysql/plugin --usermysql --log-error/var/log/mysql/error root 2022 2010 0 20:15 pts/0 00:00:00 grep --colorauto mysql 默认情况下容器内的MySQL提供了root账号和admin账号其中root账号无需密码但只允许本地访问。 mysql select host user password from mysql.user; ---------------------------------------------------------------- | host | user | password | ---------------------------------------------------------------- | localhost | root | | | eef1632ccd4e | root | | | 127.0.0.1 | root | || ::1 | root | | | localhost | | | | eef1632ccd4e | | | | % | admin | *ADDD6793DD97A040C9B039F72682E5AA31A92C35 | ---------------------------------------------------------------- 7 rows in set (0.00 sec) admin账号拥有远程访问权限。其密码可以使用docker logs命令来查看获取 $ sudo docker logs eef An empty or uninitialized MySQL volume is detected in /var/lib/mysql Installing MySQL http://www.hzcourse.com/resource/readBook?path/openresources/teach_ebook/uncompressed/15029/OEBPS/Text/... Done! Creating admin user http://www.hzcourse.com/resource/readBook?path/openresources/teach_ebook/uncompressed/15029/OEBPS/Text/... Waiting for confirmation of MySQL service startup trying 0/13 http://www.hzcourse.com/resource/readBook?path/openresources/teach_ebook/uncompressed/15029/OEBPS/Text/... Creating MySQL user admin with random password Done! You can now connect to this MySQL Server using: mysql -uadmin -pt1FWuDCgQicT -hhost -Pport Please remember to change the above password as soon as possible! MySQL user root has no password but only allows local connections 141106 20:14:21 mysqld_safe Cant log to error log and syslog at the same time. Remove all --log-error configuration options for --syslog to take effect. 141106 20:14:21 mysqld_safe Logging to /var/log/mysql/error.log. 141106 20:14:21 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql上面的t1FWuDCgQicT就是admin的密码。4.指定admin账号用户名和密码用户也可以在启动容器时指定admin账号的用户名和密码例如$ sudo docker run -d -P -e MYSQL_PASSmypass mysql 1b32444ebb7232f885961faa15fb1a052ca93b81c308cc41d16bd3d276c77d755.挂载目录到容器默认情况数据库的数据库文件和日志文件都会存在容器的AUFS文件层这不仅会使得容器变得越来越臃肿不便于迁移、备份等管理而且数据库的性能也会受到影响。因此建议挂载本地主机的目录到容器内例如$ docker run -d -P -v /opt/mysqldb:/var/lib/mysql mysql这样容器就会将数据文件和日志文件都放到指定的本地主机目录下面$ tree /opt/mysqldb/ /opt/mysqldb/ |-- auto.cnf |-- ib_logfile0 |-- ib_logfile1 |-- ibdata1 |-- mysql | |-- columns_priv.MYD | |-- columns_priv.MYI | |-- columns_priv.frm | |-- db.MYD | |-- db.MYI | |-- db.frm | |-- event.MYD | |-- event.MYI | |-- event.frm | |-- func.MYD | |-- func.MYI | |-- func.frm | |-- general_log.CSM http://www.hzcourse.com/resource/readBook?path/openresources/teach_ebook/uncompressed/15029/OEBPS/Text/... 6.启用主从模式 利用主从模式可以为数据库提供更好的可靠性。 首先创建一个名称为mysql的主容器 $ sudo docker run -d -e REPLICATION_MASTERtrue -P --name mysql mysql 创建从容器并连接到刚刚创建的主容器 $ sudo docker run -d -e REPLICATION_SLAVEtrue -P --link mysql:mysql mysql 注意这里的主mysql服务器的名字必须为mysql否则会收到错误提示Cannotconfigure slaveplease link it to another MySQL container with alias as mysql。 查看容器互联信息 # sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a781d1c74024 mysql:latest /run.sh About a minute ago Up About a minute 0.0.0.0:49167-22/tcp, 0.0.0.0:49168-3306/tcp romantic_fermi 38c73b5555aa mysql:latest /run.sh About a minute ago Up About a minute 0.0.0.0:49165-22/tcp, 0.0.0.0:49166-3306/tcp mysql 现在就可以通过相应的端口来直接连接主或者从MySQL服务器了。12.2 Oracle XEOracle快捷版Oracle XE是一款基于Oracle 11g第2版代码库的小型入门级数据库它具备以下优点·免费开发、部署和分发。·下载速度快。·管理简单。作为一款优秀的入门级数据库它适合以下用户使用·致力于PHP、Java、.NET、XML和开源应用程序的开发人员。·需要免费的入门级数据库进行培训和部署的DBA。·需要入门级数据库进行免费分发的独立软件供应商ISV和硬件供应商。·需要在课程中使用免费数据库的教育机构和学生。Oracle Database XE对安装主机的规模和CPU数量不作限制每台计算机一个数据库但XE将最多存储11GB的用户数据同时最多使用1GB内存和主机上的一个CPU。1.搜索Oracle镜像直接在DockerHub上搜索镜像并下载wnameless/oracle-xe-11g镜像$ sudo docker search -s 10 oracleNAME DESCRIPTION STARS OFFICIAL AUTOMATEDwnameless/oracle-xe-11g SYS SYSTEM password: oracle https://indehttp://www.hzcourse.com/resource/readBook?path/openresources/teach_ebook/uncompressed/15029/OEBPS/Text/... 24 [OK]alexeiled/docker-oracle-xe-11g This is a spin off from wnameless/docker-ohttp://www.hzcourse.com/resource/readBook?path/openresources/teach_ebook/uncompressed/15029/OEBPS/Text/... 21$ sudo docker pull wnameless/oracle-xe-11g2.启动和使用容器启动容器并分别映射22和1521端口到本地的49160和49161端口。$ sudo docker run -d -p 49160:22 -p 49161:1521 wnameless/oracle-xe-11g使用下列参数可以连接oracle数据库hostname: localhost port: 49161sid: xeusername: system password: oracle Password for SYS使用SSH登录容器默认的用户名为root密码为admin。$ ssh rootlocalhost -p 49160 password: admin12.3 MongoDBMongoDB是一款可扩展、高性能的开源文档Document-Oriented数据库。它采用C开发支持复杂的数据类型和强大的查询语言提供了关系数据库的绝大部分功能。MongoDB由于其高性能、易部署、易使用等特点已经在各种领域都得到了广泛的应用。1.下载文件从GitHub Dockerpool社区帐户下载Mongodb镜像项目$ git clone https://github.com/DockerPool/Mongodb.git查看内容包括写好的Dockerfile和若干脚本等$ cd Mongodb$ lsDockerfile LICENSE README.md run.sh set_mongodb_password.sh其中Dockerfile内容为#设置从我们之前创建的sshd镜像继承。 FROM sshd MAINTAINER waitfish from dockerpool.com(dwj_zz163.com) RUN apt-get update \ apt-get install -y mongodb pwgen \ apt-get clean \ rm -rf /var/lib/apt/lists/* # 创建mongodb存放数据文件的文件夹 RUN mkdir -p /data/db VOLUME /data/db ENV AUTH yes # 添加脚本 ADD run.sh /run.sh ADD set_mongodb_password.sh /set_mongodb_password.sh RUN chmod 755 ./*.sh EXPOSE 27017 EXPOSE 28017 CMD [/run.sh] set_mongodb_password.sh脚本主要负责配置数据库的用户名和密码内容为 #!/bin/bash # 这个脚本主要是用来设置数据库的用户名和密码。 # 判断是否已经设置过密码。 if [ -f /.mongodb_password_set ]; then echo MongoDB password already set! exit 0fi /usr/bin/mongod --smallfiles --nojournal PASS${MONGODB_PASS:-$(pwgen -s 12 1)} _w ord$( [ ${MONGODB_PASS} ] echo preset || echo random ) RET1 while [[ RET -ne 0 ]]; do echo Waiting for confirmation of MongoDB service startup sleep 5 mongo admin --eval help /dev/null 21 RET$? done # 通过docker logs id可以看到下面的输出。 echo Creating an admin user with a ${_word} password in MongoDB mongo admin --eval db.addUser({user: admin pwd: $PASS roles: [ userAdminAnyDatabase, dbAdminAnyDatabase ]}); mongo admin --eval db.shutdownServer(); echo Done! touch /.mongodb_password_set echo echo You can now connect to this MongoDB server using: echo echo mongo admin -u admin -p $PASS --host host --port port echo echo Please remember to change the above password as soon as possible! echo run.sh脚本是主要的启动脚本内容为 #!/bin/bash if [ ! -f /.mongodb_password_set ]; then /set_mongodb_password.sh fi if [ $AUTH yes ]; then # 这里读者可以自己设定Mongodb的启动参数。 export mongodb/usr/bin/mongod --nojournal --auth --httpinterface --rest else export mongodb/usr/bin/mongod --nojournal --httpinterface --rest fi if [ ! -f /data/db/mongod.lock ]; then eval $mongodb else export mongodb$mongodb --dbpath /data/db rm /data/db/mongod.lock mongod --dbpath /data/db --repair eval $mongodb fi 2.创建镜像 根据Dockerfile创建镜像mongodblatest $ sudo docker build -t mongodb . $ sudo docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE mongodb latest e3200a24cf28 3 hours ago 256 MB 3.使用示范 启动后台容器并分别映射27017和28017端口到本地 $ sudo docker run -d -p 27017:27017 -p 28017:28017 mongodb 通过docker logs来查看默认的admin帐户密码 $ sudo docker logs sa9 You can now connect to this MongoDB server using: mongo admin -u admin -p 5elsT6KtjrqV --host host --port port Please remember to change the above password as soon as possible! 输出中的5elsT6KtjrqV就是admin用户的密码 还可以利用环境变量在容器启动时指定密码 $ sudo docker run -d -p 27017:27017 -p 28017:28017 -e MONGODB_PASSmypass mongodb 甚至设定不需要密码 $ sudo docker run -d -p 27017:27017 -p 28017:28017 -e AUTHno mongodb 同样读者也可以使用-v参数来映射本地目录到容器。 4.详细启动参数 Mongodb的启动参数有很多包括 --quiet # 安静输出 --port arg # 指定服务端口号 默认端口27017 --bind_ip arg # 绑定服务IP 若绑定127.0.0.1 则只能本机访问 不指定默认本地所有IP --logpath arg # 指定MongoDB日志文件 注意是指定文件不是目录 --logappend # 使用追加的方式写日志 --pidfilepath arg # PID File的完整路径 如果没有设置 则没有PID文件 --keyFile arg # 集群的私钥的完整路径 只对于Replica Set架构有效 --unixSocketPrefix arg # UNIX域套接字替代目录 默认为/tmp --fork # 以守护进程的方式运行MongoDB 创建服务器进程 --auth # 启用验证 --cpu # 定期显示CPU的CPU利用率和iowait --dbpath arg # 指定数据库路径 --diaglog arg # diaglog选项 0off 1W 2R 3both 7Wsome reads --directoryperdb # 设置每个数据库将被保存在一个单独的目录 --journal # 启用日志选项 MongoDB的数据操作将会写入到journal文件夹的文件里 --journalOptions arg # 启用日志诊断选项 --ipv6 # 启用IPv6选项 --jsonp # 允许JSONP形式通过HTTP访问有安全影响 --maxConns arg # 最大同时连接数默认2000 --noauth # 不启用验证 --nohttpinterface # 关闭http接口 默认关闭27018端口访问 --noprealloc # 禁用数据文件预分配(往往影响性能) --noscripting # 禁用脚本引擎--notablescan # 不允许表扫描 --nounixsocket # 禁用Unix套接字监听 --nssize arg (16) # 设置信数据库.ns文件大小(MB) --objcheck # 在收到客户数据 检查的有效性 --profile arg # 档案参数 0off 1slow 2all --quota # 限制每个数据库的文件数 设置默认为8 --quotaFiles arg # number of files allower per db requires --quota --rest # 开启简单的rest API --repair # 修复所有数据库run repair on all dbs --repairpath arg # 修复库生成的文件的目录 默认为目录名称dbpath --slowms arg (100) # value of slow for profile and console log --smallfiles # 使用较小的默认文件 --syncdelay arg (60) # 数据写入磁盘的时间秒数(0never 不推荐) --sysinfo # 打印一些诊断系统信息 --upgrade # 如果需要升级数据库 * Replicaton 参数 ------------------------------------------------------------------------------- --fastsync # 从一个dbpath里启用从库复制服务 该dbpath的数据库是主库的快照 可用于快速启用同步 --autoresync # 如果从库与主库同步数据差得多 自动重新同步 --oplogSize arg # 设置oplog的大小(MB) * 主/从参数 ------------------------------------------------------------------------------- --master # 主库模式 --slave # 从库模式 --source arg # 从库 端口号 --only arg # 指定单一的数据库复制 --slavedelay arg # 设置从库同步主库的延迟时间 * Replica set副本集 选项 ------------------------------------------------------------------------------- --replSet arg # 设置副本集名称 * Sharding(分片)选项 ------------------------------------------------------------------------------- --configsvr # 声明这是一个集群的config服务 默认端口27019 默认目录/data/configdb --shardsvr # 声明这是一个集群的分片 默认端口27018 --noMoveParanoia # 关闭偏执为moveChunk数据保存 上述参数也可以直接在mongod.conf配置文件中配置例如 dbpath /data/mongodb logpath /data/mongodb/mongodb.log logappend true port 27017 fork true auth true12.4 本章小结本章MySQL小节介绍了标准镜像的创建过程以及如何将数据库文件映射到宿主主机来减少AUFS系统的性能损耗还介绍了MySQL数据库的主从复制模式读者通过阅读该小节应该能够进一步了解如何在生产环境中部署和使用MySQL的Docker容器。Oracle小节主要以Oracle express版本为主。笔者认为在Docker容器中来运行生产的Oracle数据库不是十分合适主要有如下几个方面的原因·Oracle作为一个大型的企业级数据库对运行环境的要求十分苛刻需要在操作系统内核、网络等多方面进行调整来达到最优化的性能而这些方面都不是Docker的强项。·Oracle数据库拥有自己非常完善的集群软件包括Clusterware、ASM、Dataguard等组件来保证性能和可用性这方面目前还没有比较好的Docker支持。·购买Oracle软件需要昂贵的授权许可而且Docker技术目前不在Oracle公司支持的操作系统列表里面无法得到Oracle公司的完善的技术支持。虽然如此经过笔者的验证Oracle Express版本可以在Docker中正常运行读者可以用它来快速搭建个人开发、学习Oracle数据库的环境。本章最后还介绍了非关系型数据库MongoDB镜像的创建跟MySQL镜像一样根据该小节介绍创建的镜像拥有许多可以供读者自定义的选项来创建符合自己需求的MongoDB应用。阅读本章需要对特定数据库的配置和结构有一定的基础知识由于篇幅所限无法一一介绍。读者可以通过各大数据库的官方网站查阅相关资料。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2545573.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…