# 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.在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.在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.在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.运行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
注意:
调高JVM线程数限制数量# 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.在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]
# 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.下载对应版本的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.下载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