• docker安装常用服务(mysql、redis、nginx、tomcat、MongoDB、Elasticsearch)


    10.Docker安装常用服务

    10.1 安装mysql
    # 1.拉取mysql镜像到本地
    	docker pull mysql:tag (tag不加默认最新版本)
    	
    	例: docker pull mysql:5.6
    # 2.运行mysql服务
    	docker run --name mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:tag  						  --没有暴露外部端口外部不能连接
    	docker run --name mysql -e MYSQL_ROOT_PASSWORD=root -p 3306:3306 -d  mysql:tag  --没有暴露外部端口
    
    	参数:
    				-e MYSQL_ROOT_PASSWORD=password   在启动mysql的时候指定root用户的密码
    
    		端口映射,注意:如果宿主机装了mysql,就不能用宿主机的3306端口映射了,
    		在启动mysql镜像的时候还需要指定root用户的密码或者允许root用户密码为空要么随机生成一个密码
    	例: 
    			docker run -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -d --name mysql01 mysql:5.6 
    
    			之后进入容器内部:  docker exec -it mysql容器id bash
    			进入之后:					mysql -u root -p    回车之后输入密码就进入了mysql命令行
    			注意:容器启的mysql默认就是可以被远程客户端比如Navicat访问的
    
    		上面启动方式如果docker重启,那么容器会停止,不会再运行
    		如果想要在docker重启之后自动重启服务,即总是运行,加上下面参数
    			--restart=always
    
    		还有使用数据卷机制做备份,所以,最终版:
    docker run -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -d --name mysql02 --restart=always     -v /root/data:/var/lib/mysql mysql:5.6 
    
    上面数据卷宿主机路径是绝对路径,下面是别名方式
    docker run -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -d --name mysql02 --restart=always     -v mysqlData:/var/lib/mysql mysql:5.6 
    
    	注意:mysql容器内的数据是在 /var/lib/mysql 路径的(docker hub上找文档),挂载的容器内的这
    	个路径不能变一旦使用了数据卷后把容器删除是不会影响到数据的,因为已经把数据交给了宿主机管理,对
    	容器的操作不会影响到宿主机,把容器删除之后重启使用上面命令启动容器之后之前创建的表又回来了
    
    # 3.进入mysql容器
    	docker exec -it 容器名称|容器id bash
    
    # 4.外部查看mysql日志
    	docker logs 容器名称|容器id
    
    # 5.使用自定义配置参数
    	docker run --name mysql -v /root/mysql/conf.d:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=root -d mysql:tag
    
    # 6.将容器数据位置与宿主机位置挂载保证数据安全
    	docker run --name mysql -v /root/mysql/data:/var/lib/mysql -v /root/mysql/conf.d:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=root -p 3306:3306 -d mysql:tag
    
    # 7.通过其他客户端访问 如在window系统|macos系统使用客户端工具访问
    	
    # 8.将mysql数据库备份为sql文件
    
    	数据卷不利于数据迁移,要想数据迁移的话还得用sql文件
    	mysqldump可以导出现有数据库的所有信息为sql文件
    一:
    	a. 导出全部数据(所有库、所有表)
    
      docker exec mysql容器id或名字 sh -c 'exec  mysqldump --all-databases -uroot  -p"$MYSQL_ROOT_PASSWORD"' > /root/all-databases.sql   
    		
    			sh代表在容器里执行一个脚本,执行哪个脚本呢
    			-c 代表传了一段参数 ' '
    			进入这个容器不想与这个容器交互,仅仅想执行一条命令,这条命令的结果只想放到sql文件中
    			将数据备份到指定文件中
    			$MYSQL_ROOT_PASSWORD会自动获取mysql的密码,不用改 
    
    	b. 导出指定库的数据(表和数据都会导出)
      docker exec mysql容器id或名字 sh -c 'exec mysqldump --databases 库名 -uroot -p"$MYSQL_ROOT_PASSWORD"' > /root/ems-databases.sql 
      
      例: docker exec mysql02 sh -c 'exec mysqldump --databases ems  -uroot -p"$MYSQL_ROOT_PASSWORD"' > /root/ems-databases.sql
    
    	c. 备份指定库中的结构(只要结构,不要数据)
    	docker exec mysql容器id或名字 sh -c 'exec mysqldump --no-data --databases 库表 -uroot -p"$MYSQL_ROOT_PASSWORD"' > /root/ems.sql
    
    	例: docker exec mysql02 sh -c 'exec mysqldump --no-data --databases ems -uroot -p"$MYSQL_ROOT_PASSWORD"' > /root/ems.sql
    
    二:
    	使用Navicat提供的数据备份
    	直接在对应库中选择备份的表即可,导出即可
    
    # 9.执行sql文件到mysql中
    	docker exec -i mysql sh -c 'exec mysql -uroot -p"$MYSQL_ROOT_PASSWORD"' < /root/xxx.sql
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79

    image-20220730200724333

    image-20220730205612140

    10.2 安装Redis服务
    # 1.在docker hub搜索redis镜像
    	docker search redis
    
    # 2.拉取redis镜像到本地
    	docker pull redis:版本号
    	
    	例:docker pull redis:5.0.12
    
    # 3.启动redis服务运行容器
    
    	docker run -d -p 6379:6379 --name redis01 --restart=always redis:tag       映射端口
    
    
    	--restart=always表示只要docker已启动,就启动redis容器
    
    	例:	docker run -d -p 6379:6379 --name redis01 --restart=always redis:5.0.12
    
    	不推荐:docker run --name redis -d redis:tag            没有映射端口
    
    # 4.查看启动日志
    	docker logs -t -f 容器id|容器名称
    
    # 5.进入容器内部查看
    	docker exec -it 容器id或名称 bash
    
      进入容器以后进入redis客户端
      redis-cli
    
    # 6.开启aof持久化以及将数据目录映射到到宿主机
    
    	redis支持内存数据持久化(rdb默认开启,aof需要手动开启,这两种持久化可以同时开启,也可以同时不开启,
    			 								 但同时开启时恢复数据一定是aof优先)
    		1.rdb持久化:快照Redis服务器将某一时刻数据以快照文件形式写入到磁盘
    			redis-cli
    			进入redis客户端后执行 save  直接就可以生成快照
    		2.aof持久化:redis服务器将所有redis客户端的写操作以命令方式记录到日志文件中  AOF更加安全,每s同步
    		  开启aof持久化在启动redis容器时加上参数
    					redis-server --appendonly yes
    
    	redis中默认开启rdb持久化,aof持久化需要手动开启
    	docker运行redis如何开启持久化
    	开启aof持久化在启动redis容器时加上参数
    		redis-server --appendonly yes
    
    	--restart=always表示只要docker启动这个容器启动
    
    开启aof持久化并使用数据卷机制将redis容器中持久化的数据映射到宿主机目录:
    
    docker run -d -p 6379:6379 --name redis01 --restart=always -v /root/redisdata:/data redis:5.0.12 redis-server --appendonly yes
    
    容器中映射的路径必须是 /data ,因为aof持久化的文件在这个目录
    
    只要aof文件在,日后启动新的redis时数据也会恢复(前提是数据卷映射)
    注意:只要开启了持久化,会将持久化的文件生成到容器中的 /data/ 目录中
    
    
    
    	docker run --name redis -v /root/redis/data:/data -v /root/redis/redis.conf:/usr/local/etc/redis/redis.conf -p 6379:6379 -d redis redis-server 					/usr/local/etc/redis/redis.conf 
    
    # 7.加载自定义配置启动redis容器
    一、使用完整的配置文件启动
    	默认情况下redis官方镜像中没有redis.conf配置文件 需要去官网下载指定版本的配置文件
    	如何获取redis配置文件
    	1. wget http://download.redis.io/releases/redis-5.0.8.tar.gz  下载官方安装包
    	2. 将官方安装包中配置文件进行复制到宿主机指定目录中如 /root/redis/redis.conf文件
    	3. 修改需要自定义的配置
    		 bind 0.0.0.0 开启远程权限
    		 appenonly yes 开启aof持久化
    	4. 加载配置启动(数据卷挂载,将配置挂载到容器内任意目录即可)
    	
    	docker run -d -p 6379:6379 --name redis01 --restart=always -v /root/redis:/data redis:5.0.12 redis-server  容器内配置文件路径
    	
    例:docker run -d -p 6379:6379 --name redis01 --restart=always -v /root/redis:/data redis:5.0.12 redis-server  /data/redis.conf
    
    二、[推荐]自己写一个配置,创建指定的配置文件名称,文件内部只写自己需要修改的属性(像下面图展示的)
    		(注意:日后所有的服务都建议这样写,比如tomcat、nginx等)
    		这种方式仍然使用上面方式挂载,但是这种方式只会覆盖自己写的配置文件中的,剩下的还是容器中的
        启动的时候还是以上面方式启动 
    		docker run -d -p 6379:6379 --name redis01 --restart=always -v /root/redis:/data redis:5.0.12 redis-server  /data/redis.conf
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81

    image-20220730225104294

    image-20220730225909116

    10.3 安装Nginx
    # 1.在docker hub搜索nginx
    	docker search nginx
    
    # 2.拉取nginx镜像到本地
    	[root@localhost ~]# docker pull nginx
        Using default tag: latest
        latest: Pulling from library/nginx
        afb6ec6fdc1c: Pull complete 
        b90c53a0b692: Pull complete 
        11fa52a0fdc0: Pull complete 
        Digest: sha256:30dfa439718a17baafefadf16c5e7c9d0a1cde97b4fd84f63b69e13513be7097
        Status: Downloaded newer image for nginx:latest
        docker.io/library/nginx:latest
    
    # 3.启动nginx容器
    		docker run -p 80:80 --name nginx01 -d nginx
    
    # 4.进入容器
    		docker exec -it nginx01 /bin/bash
    		查找目录:  whereis nginx
    		配置文件:  /etc/nginx/nginx.conf
    
    # 5.复制配置文件到宿主机
    		docker cp nginx01(容器id|容器名称):/etc/nginx/nginx.conf 宿主机名录
    
    # 6.挂在nginx配置以及html到宿主机外部
    		docker run --name nginx02 -v /root/nginx/nginx.conf:/etc/nginx/nginx.conf -v /root/nginx/html:/usr/share/nginx/html -p 80:80 -d nginx		
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    10.4 安装Tomcat
    # 1.在docker hub搜索tomcat
    	docker search tomcat
    
    # 2.下载tomcat镜像
    	docker pull tomcat
    
    # 3.运行tomcat镜像
    	docker run -p 8080:8080 -d --name mytomcat tomcat
    
    # 4.进入tomcat容器
    	docker exec -it mytomcat /bin/bash
    
    # 5.将webapps目录挂载在外部
    	docker run -p 8080:8080 -v /root/webapps:/usr/local/tomcat/webapps -d --name mytomcat tomcat
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    10.5 安装MongoDB数据库
    # 1.运行mongDB
    	docker run -d -p 27017:27017 --name mymongo mongo  ---无须权限
    	docker logs -f mymongo --查看mongo运行日志
    
    # 2.进入mongodb容器
    	docker exec -it mymongo /bin/bash
    		直接执行mongo命令进行操作
    
    # 3.常见具有权限的容器
    	docker run --name  mymongo  -p 27017:27017  -d mongo --auth
    
    # 4.进入容器配置用户名密码
    	mongo
    	use admin 选择admin库
    	db.createUser({user:"root",pwd:"root",roles:[{role:'root',db:'admin'}]})   //创建用户,此用户创建成功,则后续操作都需要用户认证
    	exit
    
    # 5.将mongoDB中数据目录映射到宿主机中
    	docker run -d -p 27017:27017 -v /root/mongo/data:/data/db --name mymongo mongo 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    10.6 安装ElasticSearch
    • 注意:调高JVM线程数限制数量
    0.拉取镜像运行elasticsearch
    # 1.dockerhub 拉取镜像
    	docker pull elasticsearch:6.4.2
    # 2.查看docker镜像
    	docker images
    # 3.运行docker镜像
    	docker run -p 9200:9200 -p 9300:9300 elasticsearch:6.4.2
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 启动出现如下错误
    • image-20200602184321790
    1. 预先配置
    # 1.在centos虚拟机中,修改配置sysctl.conf
    	vim /etc/sysctl.conf
    # 2.加入如下配置
    	vm.max_map_count=262144 
    # 3.启用配置
    	sysctl -p
    	注:这一步是为了防止启动容器时,报出如下错误:
    	bootstrap checks failed max virtual memory areas vm.max_map_count [65530] likely too low, increase to at least [262144]
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    2.启动EleasticSearch容器
    # 0.复制容器中data目录到宿主机中
    	docker cp 容器id:/usr/share/share/elasticsearch/data /root/es
    # 1.运行ES容器 指定jvm内存大小并指定ik分词器位置
    	docker run -d --name es -p 9200:9200 -p 9300:9300 -e ES_JAVA_OPTS="-Xms128m -Xmx128m" -v /root/es/plugins:/usr/share/elasticsearch/plugins -v /root/es/data:/usr/share/elasticsearch/data elasticsearch:6.4.2
    
    • 1
    • 2
    • 3
    • 4
    3.安装IK分词器
    # 1.下载对应版本的IK分词器
    	wget https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.4.2/elasticsearch-analysis-ik-6.4.2.zip
    
    # 2.解压到plugins文件夹中
    	yum install -y unzip
    	unzip -d ik elasticsearch-analysis-ik-6.4.2.zip
    
    # 3.添加自定义扩展词和停用词
    	cd plugins/elasticsearch/config
    	vim IKAnalyzer.cfg.xml
    	
    		IK Analyzer 扩展配置
    		
    		ext_dict.dic
    		
    		ext_stopwords.dic
    	
    
    # 4.在ik分词器目录下config目录中创建ext_dict.dic文件   编码一定要为UTF-8才能生效
    	vim ext_dict.dic 加入扩展词即可
    # 5. 在ik分词器目录下config目录中创建ext_stopword.dic文件 
    	vim ext_stopwords.dic 加入停用词即可
    
    # 6.重启容器生效
    	docker restart 容器id
    # 7.将此容器提交成为一个新的镜像
    	docker commit -a="xiaochen" -m="es with IKAnalyzer" 容器id xiaochen/elasticsearch:6.4.2
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    4. 安装Kibana
    # 1.下载kibana镜像到本地
    	docker pull kibana:6.4.2
    
    # 2.启动kibana容器
    	docker run -d --name kibana -e ELASTICSEARCH_URL=http://10.15.0.3:9200 -p 5601:5601 kibana:6.4.2
    
    • 1
    • 2
    • 3
    • 4
    • 5
  • 相关阅读:
    分布式存储之hash取余算法
    CMake 坑之添加文件后不修改CMakeList.txt,则文件加不进来
    api-ms-win-crt-runtime-l1-1-0.dll文件加载失败是怎么造成的?怎么修复?
    leetcode做题笔记126. 单词接龙 II
    uniapp: 本应用使用HBuilderX x.x.xx 或对应的cli版本编译,而手机端SDK版本是 x.x.xx。不匹配的版本可能造成应用异常。
    【51单片机系列】C51基础
    一文读懂区块链隐私技术系列之环签名
    【C++】模拟实现STL容器:vector
    魏牌拿铁PHEV获E-NCAP五星安全认证,搭载毫末智行方案
    基于SSM的网络安全宣传网站设计与实现
  • 原文地址:https://blog.csdn.net/qq_50313418/article/details/126491258