Docker 使用
-
使用阿里云镜像加速服务
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://6o89qzug.mirror.aliyuncs.com"] } EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
docker 基本命令
-
启动docker
systemctl start docker
-
查看镜像
docker images
-
搜索镜像
docker search
-
删除镜像
docker rmi mysql:8.0.16
-
拉取镜像
docker pull redis
docker 容器基本操作
-
docker run -it --name=cl mysql:8 /bin/bash
-i: 一直运行
-t: 终端
-d:后台(守护)运行容器
-
docker exec -it mysql /bin/bash 进入容器内部
-
docker ps 查看正在运行的容器
-
docker ps -a 查看所有的容器
-
docker start mysql 启动容器
-
docker stop mysql 停止容器
-
docker rm mysql 删除容器(容器关闭后才能删除)
-
docker 容器设置自启动
docker
update --restart
no
mysql
docker
update
--restart=always mysql
docker 容器的数据卷
数据卷:宿主机的一个目录或文件
数据卷的作用:
-
数据持久化,数据同步
-
一个数据卷可以被多个容器同时挂载
-
一个容器可以挂载多个数据卷
-
配置数据卷
-
docker run ... -v 宿主机目录(文件):容器内目录(文件)
-
注意事项:
-
目录必须是绝对路径
-
如果目录不存在,会自动创建
-
可以挂载多个数据卷
-
-
-
数据卷容器
-
创建一个容器,挂载一个目录,让其他容易继承自该容器(--volume-from)
-
通过简单方式实现数据卷配置
-
多容器进行数据交换:
1、多个容器挂载同一个数据卷
2、数据卷容器
docker 常用应用部署
-
docker + mysql
启动mysql
docker run -di --name=mysql -p 3306:3306 \
-v $PWD/conf:/etc/mysql/conf.d \
-v $PWD/logs:/logs \
-v $PWD/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=mima \ mysql
安装mysql 8
docker pull mysql
此时,用navicat for mysql连接mysql发现报错:Client does not support authentication protocol requested by server。。
解决方案:
进入容器:
docker exec -it mysql /bin/bash
进入mysql:
mysql -uroot -p
授权:
mysql> GRANT ALL ON *.* TO 'root'@'%';
刷新权限:
mysql> flush privileges;
更新加密规则:
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'mima' PASSWORD EXPIRE NEVER;
更新root用户密码:
mysql> ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'mima';
刷新权限:
mysql> flush privileges;
-
docker + Zookeeper
下载Zookeeper镜像
docker pull zookeeper
启动容器并添加映射
docker run --privileged=true -d --name zookeeper --publish 2181:2181 -d zookeeper:latest
-
docker + redis mongo es rabbitmq
启动redis
docker run -di --name=redis -p 6379:6379 redis
启动mongo
docker run -di --name=mongo -p 27017:27017 mongo
启动logstash
logstash -e 'input { stdin { } } output { stdout {} }'
启动 elasticsearch
1修改配置
docker exec -it tensquare_elasticsearch /bin/bash (/usr/share/elasticsearch)
docker cp tensquare_elasticsearch:/usr/share/elasticsearch/config/elasticsearch.yml /usr/share/elasticsearch.yml
vi /usr/share/elasticsearch.yml
# transport.host: 0.0.0.0 (把此行的注释去掉)
2启动
docker run -di --name=elasticsearch -p 9200:9200 -p 9300:9300 -v /usr/share/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml elasticsearch:5.6.8
3启动报错
修改宿主机配置
vim /etc/security/limits.conf ,追加内容
* soft nofile 65536 # nofile是单个进程允许打开的最大文件个数 soft nofile 是软限制 hard nofile是硬限制
* hard nofile 65536
vim /etc/sysctl.conf ,追加内容
vm.max_map_count=655360
执行,修改参数后立即生效
sysctl ‐p
4添加ik分词器
docker cp ik elasticsearch:/usr/share/elasticsearch/plugins
5重启
docker restart elasticsearch
启动 es head
docker run -di --name=head -p 9100:9100 mobz/elasticsearch-head:5
docker安装Kibana
1、
docker run -it -d -e ELASTICSEARCH_URL=http://127.0.0.1:9200 --name kibana --network=container:elasticsearch kibana:7.4.1
2、
启动rabbitmq
创建容器,rabbitmq需要有映射以下端口: 5671 5672 4369 15671 15672 25672
docker run -di --name=tensquare_rabbitmq -p 5671:5671 -p 5672:5672 -p 4369:4369 -p 15671:15671 -p 15672:15672 -p 25672:25672 rabbitmq:management
-
使用 logstash 将 MySQL 数据导入 Elasticsearch
logstash -e 'input { stdin { } } output { stdout {} }'
-e 执行
logstash -f ../mysqletc/mysql.conf
--config 或 -f 配置文件,后跟参数类型可以是一个字符串的配置或全路径文件名或全路径 路径(如:/etc/logstash.d/,logstash会自动读取/etc/logstash.d/目录下所有*.conf 的文 本文件,然后在自己内存里拼接成一个完整的大配置文件再去执行)
(1)在logstash-5.6.8安装目录下创建文件夹mysqletc (名称随意)
(2)文件夹下创建mysql.conf (名称随意) ,内容如下:
input {
jdbc {
# mysql jdbc connection string to our backup databse
jdbc_connection_string => "jdbc:mysql://192.168.2.130:3306/tensquare_article"
# the user we wish to excute our statement as
jdbc_user => "root"
jdbc_password => "mima"
# the path to our downloaded jdbc driver
jdbc_driver_library => "D:\scf\logstash-5.6.8\mysqletcmysql-connector-java-5.1.46.jar"
# the name of the driver class for mysql
jdbc_driver_class => "com.mysql.jdbc.Driver"
jdbc_paging_enabled => "true"
jdbc_page_size => "50"
#以下对应着要执行的sql的绝对路径。
#statement_filepath => ""
statement => "SELECT id, title, content, state FROM tb_article"
#定时字段 各字段含义(由左至右)分、时、天、月、年,全部为*默认含义为每分钟都更新(测试结果,不同的话请留言指出)
schedule => "* * * * *"
}
}
output {
elasticsearch {
#ESIP地址与端口
hosts => "127.0.0.1:9200"
#ES索引名称(自己定义的)
index => "tensquare_article"
#自增ID编号
document_id => "%{id}"
document_type => "article"
}
stdout {
#以JSON格式输出
codec => json_lines
}
}
dockerfile
FROM
run
docker build -t
systemctl stop firewalld.service 关闭防火墙
SpringDataRedis 使用说明
stringRedisTemplate.opsForValue().set("test", "100",60*10,TimeUnit.SECONDS);//向redis里存入数据和设置缓存时间
stringRedisTemplate.opsForValue().get("test")//根据key获取缓存中的val
stringRedisTemplate.boundValueOps("test").increment(-1);//val做-1操作
stringRedisTemplate.boundValueOps("test").increment(1);//val +1
stringRedisTemplate.getExpire("test")//根据key获取过期时间
stringRedisTemplate.getExpire("test",TimeUnit.SECONDS)//根据key获取过期时间并换算成指定单位
stringRedisTemplate.delete("test");//根据key删除缓存
stringRedisTemplate.hasKey("546545");//检查key是否存在,返回boolean值
stringRedisTemplate.expire("red_123",1000 , TimeUnit.MILLISECONDS);//设置过期时间
stringRedisTemplate.opsForSet().add("red_123", "1","2","3");//向指定key中存放set集合
stringRedisTemplate.opsForSet().isMember("red_123", "1")//根据key查看集合中是否存在指定数据
stringRedisTemplate.opsForSet().members("red_123");//根据key获取set集合