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

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


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		

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


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 
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
  • 启动出现如下错误
  • 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]

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
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
	<properties>
		<comment>IK Analyzer 扩展配置</comment>
		<!--用户可以在这里配置自己的扩展字典 -->
		<entry key="ext_dict">ext_dict.dic</entry>
		<!--用户可以在这里配置自己的扩展停止词字典-->
		<entry key="ext_stopwords">ext_stopwords.dic</entry>
	</properties>

# 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
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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


学习编程是顺着互联网的发展潮流,是一件好事。新手如何学习编程?其实不难,不过在学习编程之前你得先了解你的目的是什么?这个很重要,因为目的决定你的发展方向、决定你的发展速度。
IT行业是什么工作做什么?IT行业的工作有:产品策划类、页面设计类、前端与移动、开发与测试、营销推广类、数据运营类、运营维护类、游戏相关类等,根据不同的分类下面有细分了不同的岗位。
女生学Java好就业吗?女生适合学Java编程吗?目前有不少女生学习Java开发,但要结合自身的情况,先了解自己适不适合去学习Java,不要盲目的选择不适合自己的Java培训班进行学习。只要肯下功夫钻研,多看、多想、多练
Can’t connect to local MySQL server through socket \'/var/lib/mysql/mysql.sock问题 1.进入mysql路径
oracle基本命令 一、登录操作 1.管理员登录 # 管理员登录 sqlplus / as sysdba 2.普通用户登录
一、背景 因为项目中需要通北京网络,所以需要连vpn,但是服务器有时候会断掉,所以写个shell脚本每五分钟去判断是否连接,于是就有下面的shell脚本。
BETWEEN 操作符选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期。
假如你已经使用过苹果开发者中心上架app,你肯定知道在苹果开发者中心的web界面,无法直接提交ipa文件,而是需要使用第三方工具,将ipa文件上传到构建版本,开...
下面的 SQL 语句指定了两个别名,一个是 name 列的别名,一个是 country 列的别名。**提示:**如果列名称包含空格,要求使用双引号或方括号:
在使用H5混合开发的app打包后,需要将ipa文件上传到appstore进行发布,就需要去苹果开发者中心进行发布。​
+----+--------------+---------------------------+-------+---------+
数组的声明并不是声明一个个单独的变量,比如 number0、number1、...、number99,而是声明一个数组变量,比如 numbers,然后使用 nu...
第一步:到appuploader官网下载辅助工具和iCloud驱动,使用前面创建的AppID登录。
如需删除表中的列,请使用下面的语法(请注意,某些数据库系统不允许这种在数据库表中删除列的方式):
前不久在制作win11pe,制作了一版,1.26GB,太大了,不满意,想再裁剪下,发现这次dism mount正常,commit或discard巨慢,以前都很快...
赛门铁克各个版本概览:https://knowledge.broadcom.com/external/article?legacyId=tech163829
实测Python 3.6.6用pip 21.3.1,再高就报错了,Python 3.10.7用pip 22.3.1是可以的
Broadcom Corporation (博通公司,股票代号AVGO)是全球领先的有线和无线通信半导体公司。其产品实现向家庭、 办公室和移动环境以及在这些环境...
发现个问题,server2016上安装了c4d这些版本,低版本的正常显示窗格,但红色圈出的高版本c4d打开后不显示窗格,
TAT:https://cloud.tencent.com/document/product/1340