Docker
# 一、Centos中安装docker
1.**卸载旧版本**
```shell
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
```
2.**设置仓库**
```shell
sudo yum-config-manager --add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
```
3.**docker社区**
```shell
sudo yum install docker-ce docker-ce-cli containerd.io
```
4.**启动 Docker**
```shell
sudo systemctl start docker
```
5.**设置开机启动**
```shell
sudo systemctl enable docker
```
6.**镜像加速器**
```shell
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://2azy7usq.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
```
# 二、docker中安装mysql
```shell
[root@hadoop-104 module]# docker pull mysql:5.7
5.7: Pulling from library/mysql
123275d6e508: Already exists
27cddf5c7140: Pull complete
c17d442e14c9: Pull complete
Digest: sha256:82b72085b2fcff073a6616b84c7c3bcbb36e2d13af838cec11a9ed1d0b183f5e
Status: Downloaded newer image for mysql:5.7
docker.io/library/mysql:5.7
```
查看镜像
```shell
[root@hadoop-104 module]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql 5.7 f5829c0eee9e 2 hours ago 455MB
[root@hadoop-104 module]#
```
启动mysql
```shell
sudo docker run -p 3306:3306 --name mysql \
-v /mydata/mysql/log:/var/log/mysql \
-v /mydata/mysql/data:/var/lib/mysql \
-v /mydata/mysql/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7
```
修改配置
```properties
[root@hadoop-104 conf]# pwd
/mydata/mysql/conf
[root@hadoop-104 conf]# cat my.cnf
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
skip-name-resolve
[root@hadoop-104 conf]#
[root@hadoop-104 conf]# docker restart mysql
mysql
[root@hadoop-104 conf]#
```
进入容器查看配置:
```shell
[root@hadoop-104 conf]# docker exec -it mysql /bin/bash
root@b3a74e031bd7:/# whereis mysql
mysql: /usr/bin/mysql /usr/lib/mysql /etc/mysql /usr/share/mysql
root@b3a74e031bd7:/# ls /etc/mysql
my.cnf
root@b3a74e031bd7:/# cat /etc/mysql/my.cnf
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
skip-name-resolve
root@b3a74e031bd7:/#
```
设置启动docker时,即运行mysql
```shell
[root@hadoop-104 ~]# docker update mysql --restart=always
mysql
[root@hadoop-104 ~]#
```
## 整合SpringCache简化缓存开发
```java
1)、引入依赖
spring-boot-starter-cache、
spring-boot-starter-data-redis
2)、写配置
(1)自动配置了哪些
CacheAuroConfiguration会导入 RedisCacheConfiguration
自动配好了缓存管理器RedisCacheManager
(2)配置使用redis作为缓存
spring.cache.type=redis
3)、测试使用缓存
@Cacheable: Triggers cache population.:触发将数据保存到缓存的操作
@CacheEvict: Triggers cache eviction.:触发将数据从缓存删除的操作
@CachePut: Updates the cache without interfering with the method execution.:不影响方法执行更新缓存
@Caching: Regroups multiple cache operations to be applied on a method.:组合以上多个操作
@CacheConfig: Shares some common cache-related settings at class-level.:在类级别共享缓存的相同配置
1)、开启缓存功能 @EnableCaching
2)、只需要使用注解就能完成缓存操作
4)、原理:
CacheAutoConfiguration -> RedisCacheConfiguration ->自动配置了RedisCacheManager->初始化所有的缓存->每个缓存决定使用什么配置->
如果redisCacheConfiguration有就用已有的,没有就用默认配置->想改缓存的配置,只需要给容器中放一个RedisCacheConfiguration即可->
就会应用到当前RedisCacheManager管理的所有缓存分区中
```
# 三、docker中安装redis
下载docker
```shell
[root@hadoop-104 ~]# docker pull redis
Using default tag: latest
latest: Pulling from library/redis
123275d6e508: Already exists
f2edbd6a658e: Pull complete
66960bede47c: Pull complete
Digest: sha256:1d0b903e3770c2c3c79961b73a53e963f4fd4b2674c2c4911472e8a054cb5728
Status: Downloaded newer image for redis:latest
docker.io/library/redis:latest
```
启动docker
```shell
[root@hadoop-104 ~]# mkdir -p /mydata/redis/conf
[root@hadoop-104 ~]# touch /mydata/redis/conf/redis.conf
[root@hadoop-104 ~]# echo "appendonly yes" >> /mydata/redis/conf/redis.conf
[root@hadoop-104 ~]# docker run -p 6379:6379 --name redis -v /mydata/redis/data:/data \
> -v /mydata/redis/conf/redis.conf:/etc/redis/redis.conf \
> -d redis redis-server /etc/redis/redis.conf
ce7ae709711986e3f90c9278b284fe6f51f1c1102ba05f3692f0e934ceca1565
[root@hadoop-104 ~]#
```
连接到docker的redis
```shell
[root@hadoop-104 ~]# docker exec -it redis redis-cli
127.0.0.1:6379> set key1 v1
OK
127.0.0.1:6379> get key1
"v1"
127.0.0.1:6379>
```
设置redis容器在docker启动的时候启动
```shell
[root@hadoop-104 ~]# docker update redis --restart=always
redis
[root@hadoop-104 ~]#
```
# 四、docker中安装Nginx
* 随便启动一个nginx实例,只是为了复制出配置
```shell
docker run -p 80:80 --name nginx -d nginx:1.10
```
* 将容器内的配置文件拷贝到/mydata/nginx/conf/ 下
```shell
mkdir -p /mydata/nginx/html
mkdir -p /mydata/nginx/logs
mkdir -p /mydata/nginx/conf
docker container cp nginx:/etc/nginx . #拷贝到当前文件夹
#由于拷贝完成后会在config中存在一个nginx文件夹,所以需要将它的内容移动到conf中
mv /mydata/nginx/conf/nginx/* /mydata/nginx/conf/
rm -rf /mydata/nginx/conf/nginx
```
* 终止原容器:
```shell
docker stop nginx
```
* 执行命令删除原容器:
```shell
docker rm nginx
```
* 创建新的Nginx,执行以下命令
```shell
docker run -p 80:80 --name nginx \
-v /mydata/nginx/html:/usr/share/nginx/html \
-v /mydata/nginx/logs:/var/log/nginx \
-v /mydata/nginx/conf/:/etc/nginx \
-d nginx:1.10
```
* 设置开机启动nginx
```
docker update nginx --restart=always
```
* 创建“/mydata/nginx/html/index.html”文件,测试是否能够正常访问
```
echo '<h2>hello nginx!</h2>' >/mydata/nginx/html/index.html
```
访问:http://ngix所在主机的IP:80/index.html
## nginx配置
Nginx.conf
```nginx
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
keepalive_timeout 65;
# 配置微服务网关的地址
upstream gulimall{
server 192.168.56.1:88;
}
#加载配置
include /etc/nginx/conf.d/*.conf;
}
```
gulimall.conf
```nginx
server {
listen 80;
server_name gulimall.com;
#动静分离
location /static/ {
root /usr/share/nginx/html;
}
location / {
# proxy_set_header 给通过 nginx 的请求添加请求头的部分信息,这里需要注意,经过 nginx 的请求会丢失请求头的部分信息。这里添加域名信息,方便在网关处拦截并转发到对应的微服务。
proxy_set_header Host $host;
# proxy_pass 将监听到的请求转发到 nginx.conf 文件中的 对应的upstream 中,即 192.168.202.1:88 (网关地址)。即在此完成了访问网址-> nginx -> 网关
proxy_pass http://gulimall;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
```
# 五、docker安装RabbitMQ
下载安装启动
```shell
docker run -d --name rabbitmq -p 5671:5671 -p 5672:5672 -p 4369:4369 -p 25672:25672 -p 15671:15671 -p 15672:15672 rabbitmq:managem
```
# 六、docker安装Elasticsearch
```
mkdir -p /mydata/elasticsearch/config
mkdir -p /mydata/elasticsearch/data
echo "http.host: 0.0.0.0" >> /mydata/elasticsearch/config/elasticsearch.yml
chmod -R 777 /mydata/elasticsearch/ 保证权限
docker run --name elasticsearch -p 9200:9200 -p 9300:9300 \
-e "discovery.type=single-node" \
-e ES_JAVA_OPTS="-Xms64m -Xmx512m" \
-v /mydata/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v /mydata/elasticsearch/data:/usr/share/elasticsearch/data \
-v /mydata/elasticsearch/plugins:/usr/share/elasticsearch/plugins \
-d elasticsearch:7.4.2
```
# 七、docker安装Kibana
```
docker run --name kibana -e ELASTICSEARCH_HOSTS=http://192.168.56.10:9200 -p 5601:5601 \
-d kibana:7.4.2
http://192.168.56.10:9200 改为自己虚拟机的地址
```
开机启动
```shell
docker update redis --restart=always
```
查看200行
tail -fn 200 catalina.out