本地docker部署中间件和应用

Docker Desktop搭建

安装完成之后使用docker下载镜像,报以下错误:

解决办法:

Docker Engine配置能访问的镜像地址:

java 复制代码
{
  "builder": {
    "gc": {
      "defaultKeepStorage": "20GB",
      "enabled": true
    }
  },
  "experimental": false,
  "registry-mirrors": [
    "https://docker.1panel.live",
    "https://cr.console.aliyun.com",
    "https://hub-mirror.c.163.com",
    "https://docker.mirrors.ustc.edu.cn",
    "https://mirror.ccs.tencentyun.com"
  ]
}

Mysql部署

拉取镜像:

bash 复制代码
docker pull mysql:8.4

启动并运行:

docker run --name mysql-8.4 -p 3306:3306 -v D:/data/dockerData/mysql8/data:/var/lib/mysql -v D:/data/dockerData/mysql8/logs:/var/log/mysql -v D:/data/dockerData/mysql8/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 --restart=always -d mysql:8.4

中间件Apollo部署

拉取并运行镜像:

bash 复制代码
docker pull apolloconfig/apollo-configservice:latest

docker pull apolloconfig/apollo-adminservice:latest

docker pull apolloconfig/apollo-portal:latest

其中:

  • apollo-adminservice:Admin Service提供配置的修改、发布等功能,服务对象是Apollo Portal(管理界面)
  • apollo-configservice:Config Service提供配置的读取、推送等功能,服务对象是Apollo客户端
  • apollo-portal:Portal通过域名访问Meta Server获取Admin Service服务列表(IP+Port),而后直接通过IP+Port访问服务,同时在Portal侧会做load balance、错误重试
bash 复制代码
docker run -p 8082:8080 -e SPRING_DATASOURCE_URL="jdbc:mysql://172.17.0.2:3306/Apolloconfigdb?characterEncoding=utf8" -e SPRING_DATASOURCE_USERNAME=root -e SPRING_DATASOURCE_PASSWORD=123456 -d -v D:/data/apollo/logs:/opt/logs --name apollo-configservice apolloconfig/apollo-configservice

docker run -p 8091:8090 -e SPRING_DATASOURCE_URL="jdbc:mysql://172.17.0.2:3306/Apolloconfigdb?characterEncoding=utf8" -e SPRING_DATASOURCE_USERNAME=root -e SPRING_DATASOURCE_PASSWORD=123456 -d -v D:/data/apollo/logs:/opt/logs --name apollo-adminservice apolloconfig/apollo-adminservice

docker run -p 8071:8070 -e SPRING_DATASOURCE_URL="jdbc:mysql://172.17.0.2:3306/Apolloportaldb?characterEncoding=utf8" -e SPRING_DATASOURCE_USERNAME=root -e SPRING_DATASOURCE_PASSWORD=123456 -e APOLLO_PORTAL_ENVS=pro -e PRO_META=http://172.17.0.1:8082 -d -v D:/data/apollo/logs:/opt/logs --name apollo-portal apolloconfig/apollo-portal

其中:

  • 172.17.0.2:3306 为mysql容器IP和端口,如下图所示:
  • 172.17.0.1:8082 为configservice容器IP地址和端口号,如下图所示:

导入Apollo SQL脚本

创建ApolloPortalDB 并导入如下sql:

bash 复制代码
https://github.com/ctripcorp/apollo/blob/master/scripts/db/migration/portaldb/V1.0.0__initialization.sql

创建ApolloConfigDBDev 并导入如下sql:

bash 复制代码
https://github.com/ctripcorp/apollo/blob/master/scripts/db/migration/configdb/V1.0.0__initialization.sql

需要我们改一下数据库的Eureka服务连接地址Url,需要连接上configservice的配置中心,不然启动会报错。在ApolloConfigDB数据库ServerConfig表的eureka.service.url的value的值进行修改:

配置Meta Servers地址,也就是configservice的连接地址,在ApolloPortalDB数据库的ServerConfig表的apollo.portal.meta.servers的value中进行配置。和上面的DEV_META一致:

使用Spring boot连接配置中心

  1. 引入依赖:
bash 复制代码
 <!--携程开源框架 配置中心-->
        <dependency>
            <groupId>com.ctrip.framework.apollo</groupId>
            <artifactId>apollo-client</artifactId>
            <version>2.2.0</version>
        </dependency>
  1. 配置文件 application.yml修改配置:
java 复制代码
apollo:
  meta: http://127.0.0.1:8082  #configService地址
  bootstrap:
    enabled: true   #springboot在启动阶段就会加载
    namespaces: application
    eagerLoad:
      enabled: true  #将Apollo配置加载提到初始化日志系统之前
  1. 在启动的时候,启动类需要加上@EnableApolloConfig注解开启配置中心

  2. IDEA配置环境(指定config service地址):否则会报配置中心连接超时错误

java 复制代码
WARN 12344 --- [ngPollService-1] c.c.f.a.i.RemoteConfigLongPollService    : Long polling failed, will retry in 1 seconds. appId: spring-cloud-config-dev, cluster: default, namespaces: spring-cloud-management, 
long polling url: http://172.17.0.3:8080/notifications/v2?cluster=default&appId=spring-cloud-config-dev&ip=192.168.1.108&notifications=%5B%7B%22namespaceName%22%3A%22spring-cloud-management%22%2C%22notificationId%22%3A-1%7D%5D,
reason: Could not complete get operation [Cause: connect timed out]

中间件Nginx部署

拉取镜像并运行

  1. 拉取镜像:
bash 复制代码
docker pull nginx:latest
  1. 简单启动镜像(为了后面拷贝文件):
bash 复制代码
docker run -d -p 8092:80 --name nginx_01 nginx
  1. 本地宿主机建三个文件夹:如下如所示:
  1. 拷贝文件到宿主机:
bash 复制代码
# 将容器nginx.conf文件复制到宿主机
docker cp nginx_01:/etc/nginx/nginx.conf D:/data/nginx/conf/nginx.conf
# 将容器conf.d文件夹下内容复制到宿主机
docker cp nginx_01:/etc/nginx/conf.d D:/data/nginx/conf/conf.d
# 将容器中的html文件夹复制到宿主机
docker cp nginx_01:/usr/share/nginx/html D:/data/nginx/html
  1. 停掉并删除刚才启动的容器 ,重新启动并挂载目录:
bash 复制代码
docker run -d -p 8092:80 -v D:/data/nginx/html:/usr/share/nginx/html:ro -v D:/data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v D:/data/nginx/conf/conf.d:/etc/nginx/conf.d -v D:/data/nginx/log:/var/log/nginx --restart=always --name nginx_01 nginx

启动容器命令的详细解释:

  • docker run:运行一个新的容器。
  • -d:以后台模式运行容器。
  • -p 8092:80:将容器内的端口 80 映射到主机的端口 8092。这样可以通过主机的端口访问 Nginx 服务。
  • -v D:/data/nginx/html:/usr/share/nginx/html:ro:使用卷挂载功能,将本地目录 D:/data/nginx/html 挂载到容器内的 /usr/share/nginx/html 目录,并设置为只读(ro)。这样可以将自定义的 HTML 文件挂载到 Nginx 容器,用于网站内容的展示。
  • -v D:/data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf:使用卷挂载功能,将本地文件 D:/data/nginx/conf/nginx.conf 挂载到容器内的 /etc/nginx/nginx.conf 文件。这样可以使用自定义的 Nginx 配置文件。
  • -v D:/data/nginx/conf/conf.d:/etc/nginx/conf.d:使用卷挂载功能,将本地目录 D:/data/nginx/conf/conf.d 挂载到容器内的 /etc/nginx/conf.d 目录。这样可以挂载自定义的 Nginx 配置文件片段。
  • -v D:/data/nginx/log:/var/log/nginx:使用卷挂载功能,将本地目录 D:/data/nginx/log 挂载到容器内的 /var/log/nginx 目录。这样可以将 Nginx 的日志文件存储到本地目录。
  • --restart=always:设置容器在退出时自动重启。
  • --name nginx_01:为容器指定一个名称
  • nginx:基于 Nginx 镜像运行容器。
  1. 修改目录conf.d下配置文件default.conf,添加如下配置:
bash 复制代码
location /apollo {
	    proxy_pass http://172.25.176.1:8088;  #本地Java服务IP地址+端口号(这里不能写成localhost)
		proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
	}
  1. 调用本地接口验证:
bash 复制代码
http://localhost:8092/apollo/getConfig

参考文章

使用Docker安装Apollo并使用SpringBoot连接配置中心 - sowler - 博客园

docker部署常见中间件_docker 中间件-CSDN博客

docker部署nginx-CSDN博客

相关推荐
Mao.O2 小时前
RabbitMQ延迟消息插件安装(Docker环境)
docker·rabbitmq·延迟消息发送
pyliumy3 小时前
docker的安装配置与基本简单命令
运维·docker·容器
winkee3 小时前
Skopeo 工具介绍
docker·容器·devops
test12805 小时前
局域网 docker pull 使用代理拉取镜像
docker·容器·代理·docker pull·http_proxy
sudo_Ene5 小时前
Isaac Sim Docker 部署并使用过程记录
笔记·学习·docker·1024程序员节·isaacsim
天幕繁星5 小时前
docker占用磁盘过多问题
docker·容器
26293526746 小时前
Docker常用命令
java·docker·eureka
bala55696 小时前
Docker-在Centos中部署Shell脚本获取镜像并构建容器
linux·阿里云·docker·容器·centos·maven
知数SEO6 小时前
Centos如何卸载docker
linux·docker·centos
水w10 小时前
docker怎么实现资源隔离的?
运维·开发语言·后端·docker·容器