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