Docker容器启动Redis,MongoDB,MySQL,Nginx

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_23035335/article/details/100522054

仅做记录之用,详细的操作方法可以查看https://hub.docker.com/

Redis的启动方式:

最简单的启动方式,最好还是带个端口映射

sudo docker run --name some-redis -d redis redis-server --appendonly yes

自定义配置文件的启动方式

sudo docker run -v /home/java/dev_env/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf --name redis-latest -p 6379:6379 -d redis redis-server /usr/local/etc/redis/redis.conf

自定义配置文件的启动方式,配置文件里的数据持久化路径是 dir ./ 在容器中就是保存在/data中,也可以映射处理

sudo docker run -v /home/java/dev_env/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf -v /home/java/dev_env/redis/data:/data --name redis-latest -p 6379:6379 -d redis redis-server /usr/local/etc/redis/redis.conf

注意:自定义配置文件里,daemonize no 要配置成no,默认也是no,不让在后台启动,Redis容器才不会自动关闭
容器版redis是没有配置文件的,redis初始配置文件可以下载个redis包中就有

MongoDB的启动方式

指定mongo的配置文件

sudo docker run --name mongo-4.0.5 -p 27017:27017 -v /home/java/dev_env/mongodb/data:/data/db -d \
-v /home/java/dev_env/mongodb/mongo:/etc/mongo \
-e MONGO_INITDB_ROOT_USERNAME=admin \
-e MONGO_INITDB_ROOT_PASSWORD=admin \
mongo:4.0.5 --config /etc/mongo/mongod.conf

MongoDB参考配置文件mongod.conf:

systemLog:
   # verbosity: 0  #日志等级,0-5,默认0
   # quiet: false  #限制日志输出,
   # traceAllExceptions: true  #详细错误日志
   # syslogFacility: user #记录到操作系统的日志级别,指定的值必须是操作系统支持的,并且要以--syslog启动
   path: /var/log/mongodb/mongodb.log  #日志路径。
   logAppend: false #启动时,日志追加在已有日志文件内还是备份旧日志后,创建新文件记录日志, 默认false
   logRotate: rename #rename/reopen。rename,重命名旧日志文件,创建新文件记录;reopen,重新打开旧日志记录,需logAppend为true
   destination: file #日志输出方式。file/syslog,如果是file,需指定path,默认是输出到标准输出流中
   timeStampFormat: iso8601-local #日志日期格式。ctime/iso8601-utc/iso8601-local, 默认iso8601-local
   # component: #各组件的日志级别
   #    accessControl:
   #       verbosity: <int>
   #    command:
   #       verbosity: <int>

processManagement:
   fork: false #以守护进程运行 默认false
   pidFilePath: /var/log/mongodb/master.pid #PID 文件位置

net:
   port: 27017 #监听端口,默认27017
   #bindIp: 127.0.0.1 #绑定监听的ip,deb和rpm包里有默认的配置文件(/etc/mongod.conf)里面默认配置为127.0.0.1,若不限制IP,务必确保认证安全,多个Ip用逗号分隔
   maxIncomingConnections: 65536 #最大连接数,可接受的连接数还受限于操作系统配置的最大连接数
   wireObjectCheck: true #校验客户端的请求,防止错误的或无效BSON插入,多层文档嵌套的对象会有轻微性能影响,默认true
   ipv6: false #是否启用ipv6,3.0以上版本始终开启
   unixDomainSocket: #unix socket监听,仅适用于基于unix的系统
      enabled: false #默认true
      pathPrefix: /tmp #路径前缀,默认/temp
      filePermissions: 0700 #文件权限 默认0700
   #http: #警告 确保生产环境禁用HTTP status接口、REST API以及JSON API以防止数据暴露和漏洞攻击
   #   enabled: false #是否启用HTTP接口、启用会增加网络暴露。3.2版本后停止使用HTTP interface
   #   JSONPEnabled: false #JSONP的HTTP接口
   #   RESTInterfaceEnabled: false #REST API接口
   # ssl: #估计用不到,所以没有自己看
   #    sslOnNormalPorts: <boolean>  # deprecated since 2.6
   #    mode: <string>
   #    PEMKeyFile: <string>
   #    PEMKeyPassword: <string>
   #    clusterFile: <string>
   #    clusterPassword: <string>
   #    CAFile: <string>
   #    CRLFile: <string>
   #    allowConnectionsWithoutCertificates: <boolean>
   #    allowInvalidCertificates: <boolean>
   #    allowInvalidHostnames: <boolean>
   #    disabledProtocols: <string>
   #    FIPSMode: <boolean>

#security:
   #authorization: enabled # enabled/disabled #开启客户端认证
   #javascriptEnabled:  true #启用或禁用服务器端JavaScript执行
   # keyFile: <string> #密钥路径
   # clusterAuthMode: <string> #集群认证方式
   # enableEncryption: <boolean>
   # encryptionCipherMode: <string>
   # encryptionKeyFile: <string>
   # kmip:
   #    keyIdentifier: <string>
   #    rotateMasterKey: <boolean>
   #    serverName: <string>
   #    port: <string>
   #    clientCertificateFile: <string>
   #    clientCertificatePassword: <string>
   #    serverCAFile: <string>
   # sasl:
   #    hostName: <string>
   #    serviceName: <string>
   #    saslauthdSocketPath: <string>
   

# setParameter: #设置参数
#    <parameter1>: <value1>
#    <parameter2>: <value2>

storage:
   dbPath: /data/db #数据库,默认/data/db,如果使用软件包管理安装的查看/etc/mongod.conf
   indexBuildRetry: true #重启时,重建不完整的索引
   # repairPath: <string>  #--repair操作时的临时工作目录,默认为dbPath下的一个_tmp_repairDatabase_<num>的目录
   journal: 
      enabled: true #启动journal,64位系统默认开启,32位默认关闭
      # commitIntervalMs: <num> #journal操作的最大时间间隔,默认100或30
   directoryPerDB: false #使用单独的目录来存储每个数据库的数据,默认false,如果需要更改,要备份数据,删除掉dbPath下的文件,重建后导入数据
   # syncPeriodSecs: 60 #使用fsync来将数据写入磁盘的延迟时间量,建议使用默认值
   engine: wiredTiger #存储引擎,mmapv1/wiredTiger/inMemory 默认wiredTiger
   # mmapv1:
   #    preallocDataFiles: <boolean>
   #    nsSize: <int>
   #    quota:
   #       enforced: <boolean>
   #       maxFilesPerDB: <int>
   #    smallFiles: <boolean>
   #    journal:
   #       debugFlags: <int>
   #       commitIntervalMs: <num>
   # wiredTiger:
   #    engineConfig:
   #       cacheSizeGB: <number>  #缓存大小
   #       journalCompressor: <string> #数据压缩格式 none/snappy/zlib
   #       directoryForIndexes: <boolean> #将索引和集合存储在单独的子目录下,默认false
   #    collectionConfig:
   #       blockCompressor: <string> #集合数据压缩格式 
   #    indexConfig:
   #       prefixCompression: <boolean> #启用索引的前缀压缩
   # inMemory:
   #    engineConfig:
   #       inMemorySizeGB: <number>
 
operationProfiling: #性能分析
   slowOpThresholdMs: 100 #认定为查询速度缓慢的时间阈值,超过该时间的查询即为缓慢查询,会被记录到日志中, 默认100
   mode: off #operationProfiling模式 off/slowOp/all 默认off

# replication: #复制集相关
#    oplogSizeMB: <int>
#    replSetName: <string>
#    secondaryIndexPrefetch: <string>
#    enableMajorityReadConcern: <boolean>
# sharding: #集群分片相关
#    clusterRole: <string>
#    archiveMovedChunks: <boolean>

# auditLog:
#    destination: <string>
#    format: <string>
#    path: <string>
#    filter: <string>

# snmp:
#    subagent: <boolean> #当设置为true,SNMP作为代理运行
#    master: <boolean> #当设置为true,SNMP作为主服务器运行

# basisTech:
#    rootDirectory: <string>

启动mysql

启动mysql容器并root的密码

sudo docker run --name mysql-8.0.13 -p 3306:3306 -v /home/java/dev_env/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:8.0.13 --character-set-server=utf8 --collation-server=utf8_unicode_ci

导入数据(sql文件)到docker里面的mysql

sudo docker exec -i mysql-8.0.13 sh -c 'exec mysql -uroot -p"$MYSQL_ROOT_PASSWORD"' < /home/java/dev_env/mysql/localhost_dump/**.sql

小记录插曲:有一次在阿里云上使用上面的方式启动mysql:8.0容器,当使用DBeaver连接时,报错:Access denied for user ‘XXX’@’XXX’ (using password: YES)  

起初以为是密码不对,或不满足mysql的密码规则,而且查看阿里云上的帮助也是这样说的,就尝试进入mysql容器修改root密码,发现没用,而且能连接进MySQL,说明root密码也是正确的。

原因:一般来说,MySQL8.0直接用ROOT用户的账号密码去远程连接是不行,即使密码正确。MYSQL 8.0内新增加mysql_native_password函数,通过更改这个函数密码来进行远程连接。

解决:

1.进入 MySQL容器

sudo docker exec -it mysql容器id /bin/bash

2.在容器内执行:mysql -u root -p密码,进入mysql

3.更改ROOT用户的native_password密码

mysql> ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY'MyPass@123';

Query OK, 0 rows affected (0.15 sec)
mysql> select host,user,plugin,authentication_string from mysql.user;
+-----------+------------------+-----------------------+------------------------------------------------------------------------+
| host      | user             | plugin                | authentication_string                                                  |
+-----------+------------------+-----------------------+------------------------------------------------------------------------+
| %         | admin          | mysql_native_password | *64497856A3076BBA4E1D491A02250AD86F8B18AF                              |
| %         | root             | mysql_native_password | *3E08E9382F129B0918BBE4BE77226D6F07F6C5D2                              |
| localhost | mysql.infoschema | caching_sha2_password | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
| localhost | mysql.session    | caching_sha2_password | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
| localhost | mysql.sys        | caching_sha2_password | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
| localhost | root             | mysql_native_password | *3E08E9382F129B0918BBE4BE77226D6F07F6C5D2                              |
+-----------+------------------+-----------------------+------------------------------------------------------------------------+
6 rows in set (0.00 sec)

host,表示哪些地址可以使用对应的账号连接本数据库,%代表所有地址,plugin要改成mysql_native_password 才行,上面的alter user 密码 就会自动更改成mysql_native_password

这样就可以远程使用工具来连接mysql了

启动nginx

比较全的Nginx启动方式,需要操作的文件夹映射到宿主机,方便操作

sudo docker run --name nginx-latest -v /home/java/dev_env/nginx/conf/nginx.conf:/etc/nginx/nginx.conf:ro -v /home/java/dev_env/nginx/html:/usr/share/nginx/html:ro -v /home/java/dev_env/nginx/logs:/var/log/nginx -p 80:80 -d nginx

上面写的都是比较全面的启动方法,需要其他启动方式请查看官方:https://hub.docker.com/

猜你喜欢

转载自blog.csdn.net/qq_23035335/article/details/100522054