mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
简介: mall在linux环境下的部署(基于Docker容器),docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongodb、minio详细教程,拉取镜像、运行容器

文章目录

前言

一、拉取镜像、运行容器

  • 1.1 MySQL安装

  • 1.2 Redis安装

  • 1.3 Nginx安装

  • 1.4 RabbitMQ安装

    • 1.4.1 安装步骤
    • 1.4.2 Web-UI界面无法访问
  • 1.5 Elasticsearch安装

    • 1.5.1 安装步骤
    • 1.5.2 9200端口无法访问
  • 1.6 Logstash安装

    • 1.6.1 安装步骤
    • 1.6.2 插件安装失败
    • 1.6.3 修改镜像地址
  • 1.7 Kibana安装

  • 1.8 MongoDB安装

  • 1.9 MinIO安装

  • 1.10 docker全部环境安装完成

二、SpringBoot应用部署

  • 2.1 构建所有Docker镜像并上传

  • 2.2 部署mall-admin

  • 2.3 部署mall-search

  • 2.4 部署mall-port

  • 2.5 开启防火墙

  • 2.6 访问接口进行测试

  • 2.7 补充:docker启动容器时报错:iptables: No chain/target/match by that name

    • mall-admin
    • mall-search
    • mall-portal
    • 接口文档

前言

1)docker cp 复制文件和目录

Docker是一种流行的容器化平台,它允许开发人员在独立、可移植的环境中构建、打包和部署应用程序。在使用Docker时,常常需要在Docker容器和主机之间进行文件的复制和共享。Docker提供了一个名为docker cp的命令,可以轻松地在容器和主机之间复制文件和目录。

docker cp是Docker提供的一个用于在主机和容器之间复制文件和目录的命令,语法如下:

  • 从容器复制文件到主机(将容器中的文件复制到主机):docker cp 容器id:容器内目录 主机目录。容器id或名称均可
docker cp 容器id:容器内目录 主机目录
docker cp 容器id:容器内文件 主机目录

#将mysql容器/etc/mysql目录下的文件复制到宿主机/mydata/mysql/conf目录下
docker cp 4b1a0fe53315:/etc/mysql/ /mydata/mysql/conf
  • 从主机复制文件到容器(将主机中的文件复制到容器):docker cp 主机目录 容器id:容器内目录。容器id或名称均可
docker cp 主机目录 容器id:容器内目录

#将主机mall.sql文件复制到mysql容器的/目录下
docker cp /mydata/mall.sql mysql:/

注:docker cp命令会假定容器路径相对于容器的 /(根)目录,主机路径则是相对于执行 docker cp 命令的当前目录

2)修改虚拟内存vm.max_map_count大小

vm.max_map_count是一个与内核虚拟内存子系统相关的参数,用于控制进程可以拥有的内存映射区域的最大数量。它通常用于限制一个进程可以打开的文件数量,特别是在使用大量内存映射文件的情况下。

在Linux系统上,vm.max_map_count参数的默认值通常是较小的数值,例如65530。然而,对于一些需要大量内存映射的应用程序或者特定的使用场景,可能需要修改虚拟内存区域大小、增加该参数的值,以便支持更多的内存映射区域,否则可能会因为过小而无法启动。有两种方式可以设置虚拟内存:

#法一(临时修改,不推荐)
sysctl -w vm.max_map_count=262144   #使用sysctl命令在运行时临时修改参数的值
sysctl -a | grep vm.max_map_count   #查看vm.max_map_count配置
cat /proc/sys/vm/max_map_count

#法二(永久设置,推荐)
vi /etc/sysctl.conf
vm.max_map_count=262144     #在打开的文件中新增内容,设置虚拟内存
sysctl -p                   #重新加载/etc/sysctl.conf文件中的所有参数值,使设置的虚拟内存生效(如果你修改了/etc/sysctl.conf中的值,需要使用该命令才能生效)

3)重启网络、检查Docker网络配置

如果网络配置修改、导致某些服务起不来,可通过如下命令重启网络:

# 重新加载系统环境变量文件/etc/profile,以便使修改后的环境变量生效
source /etc/profile

#检查Docker网络设置
docker network ls
docker network inspect <network_name>

4)获取容器内部的IP地址

docker inspect <container_id_or_name> | grep IPAddress
curl http://<ip_address>:9200/    #测试连接

一、拉取镜像、运行容器

1.1 MySQL安装

  • 下载MySQL5.7的docker镜像:
docker pull mysql:5.7
  • 使用如下命令启动MySQL服务:
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
  • 参数说明
    • -p 3306:3306:将容器的3306端口映射到主机的3306端口
    • -v /mydata/mysql/conf:/etc/mysql:将配置文件夹挂在到主机
    • -v /mydata/mysql/log:/var/log/mysql:将日志文件夹挂载到主机
    • -v /mydata/mysql/data:/var/lib/mysql/:将数据文件夹挂载到主机
    • -e MYSQL_ROOT_PASSWORD=root:初始化root用户的密码,可自行设置
  • 进入运行MySQL的docker容器:
docker exec -it mysql /bin/bash
  • 使用MySQL命令打开客户端:
mysql -uroot -proot --default-character-set=utf8
  • 创建mall数据库:
create database mall character set utf8
  • 安装上传下载插件,并将document/sql/mall.sql上传到Linux服务器上:
yum -y install lrzsz
  • mall.sql文件拷贝到mysql容器的/目录下:
docker cp /mydata/mall.sql mysql:/
  • 将sql文件导入到数据库:
use mall;
source /mall.sql;
  • 创建一个reader:123456帐号并修改权限,使得任何ip都能访问:
grant all privileges on *.* to 'reader' @'%' identified by '123456';

1.2 Redis安装

  • 下载Redis7的docker镜像:
docker pull redis:7
docker run -p 6379:6379 --name redis \
-v /mydata/redis/data:/data \
-d redis:7 redis-server --appendonly yes


#本人选用该方式,主机端口改为36379,以免与本地的redis冲突;--restart=always  设置redis随docker自启动
docker run --restart=always -p 36379: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


#在网上看到更详细的,将日志文件也挂载到主机目录。第二种就行,可根据自己需要 选择是否将日志文件挂载到主机指定目录
docker run --name redis --restart=always -p 6379:6379 \
-v /data/redis/conf/redis.conf:/data/redis/conf/redis.conf \
-v /data/redis/data:/data/redis/data \
-v /data/redis/log/redis.log:/data/redis/log/redis.log \
-d redis redis-server /data/redis/conf/redis.conf

各参数的意义:

1)-restart=always 总是开机启动

2)-p 6379:6379 将6379端口挂载出去

3)–name 给这个容器取一个名字

4)-v 数据卷挂载 /home/dj/redis/redis.conf:/etc/redis/redis.conf

此处是将宿主机 /home/dj/redis/redis.conf 文件映射到 redis 容器下的 /etc/redis/redis.conf,此处你也可以理解为docker容器和宿主机共享这个文件。

5)-d redis:7.0.12 后台运行容器,不加-d就是直接在控制台输出,关闭窗口即停止容器。

6) redis-server /etc/redis/redis.conf 以配置文件启动redis,加载容器内的 redis.conf文件,最终找到的是挂载的目录 /etc/redis/redis.conf 也就是宿主机下共享的 /home/dj/redis/redis.conf。

补充:如果有权限相关的问题,可以给容器一个特权模式。加一个 --privileged

7)--log-opt max-size=100m --log-opt max-file=3

max-size:指定日志文件大小上限

max-file:指定日志文件个数

8)--appendonly yes redis启动后数据持久化

redis.conf内容

#redis.conf
#bind 127.0.0.1   #注释掉bind,允许远程访问
#bind 0.0.0.0   
daemonize no
port 6379
logfile "/run/mall/logs/redis/redis.log"

requirepass boelink123
appendonly no
save 900 1
save 300 10
save 60 10000
tcp-keepalive 300
  • 进入Redis容器使用redis-cli命令进行连接:
docker exec -it redis redis-cli

1-1.png

bind 127.0.0.1 #注释掉这部分,使redis可以外部访问
daemonize no#用守护线程的方式启动
requirepass 你的密码#给redis设置密码
appendonly yes#redis持久化  默认是no
tcp-keepalive 300 #防止出现远程主机强迫关闭了一个现有的连接的错误 默认是300

################################ SNAPSHOTTING  ################################

# 持久化保存策略配置
# 在900s内,如果至少有1个key进行了修改,就进行持久化操作
save 900 1
# 在300s内,如果至少有10个key进行了修改,就进行持久化操作
save 300 10
# 在60s内,如果至少有10000个key进行了修改,就进行持久化操作
save 60 10000
# 配置如果持久化出错,Redis是否禁止写入命令 yes:禁止写入命令,no:允许写入命令(存在数据丢失风险)
stop-writes-on-bgsave-error yes
# 配置是否压缩rdb文件。[开启(yes)的话,会消耗一定的cpu资源]
rdbcompression yes
# 保存rdb文件的时候,进行错误的检查校验
rdbchecksum yes
# 默认持久化保存后的文件名
dbfilename dump.rdb
# rdb文件保存的目录
dir ./

# 设置访问、登录的密码,设置requirepass 您的密码
requirepass 123456


############################## APPEND ONLY MODE ###############################


# 是否开启aof持久化模式,默认值:no,不开启。redis的默认持久化策略是edb模式
appendonly no

# 持久化文件名称
appendfilename "appendonly.aof"

# 持久化策略设置
# appendfsync always # 每次修改都进行持久化操作
appendfsync everysec # 每秒执行一次持久化操作
# appendfsync no     # 不执行持久化操作,相当于未开启aof持久化策略

# 设置为yes表示rewrite期间对新写操作不fsync,暂时存在内存中,等rewrite完成后再写入,默认为no,建议yes
no-appendfsync-on-rewrite no

# AOF自动重写配置,默认值为100
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb

# Redis在以AOF方式恢复数据时,对最后一条可能出问题的指令的处理方式,默认值yes
aof-load-truncated yes

# 当重写AOF文件时,Redis能够在AOF文件中使用RDB前导码,以便更快地重写和恢复,启用此选项时,重写的AOF文件由两个不同的节组成:[RDB file][AOF tail],当加载AOF文件时,Redis通过以 “REDIS” 字符串开头的AOF文件识别出此文件是由RDB和AOF组合而成的,Redis会先加载RDB部分,然后再加载AOF部分,默认值yes
aof-use-rdb-preamble yes



################################### CLIENTS ####################################

# 设置客户端最大连接数,该配置一般无需修改,使用默认值即可
# maxclients 10000

############################## MEMORY MANAGEMENT ################################

# redis配置的最大内存容量
# maxmemory <bytes>

# 到达内存容量限制之后的处理策略
# maxmemory-policy noeviction

1.3 Nginx安装

  • 下载Nginx1.22的docker镜像:
docker pull nginx:1.22
  • 先运行一次容器(为了拷贝配置文件):
docker run -p 80:80 --name nginx \
-v /mydata/nginx/html:/usr/share/nginx/html \
-v /mydata/nginx/logs:/var/log/nginx  \
-d nginx:1.22


#在网上看到更详细的,将配置文件也挂载到主机目录。上述第一种就行,可根据自己需要 选择是否将配置文件挂载到主机指定目录
docker run -p 380: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.22
  • 将容器内的配置文件拷贝到指定目录:
docker container cp nginx:/etc/nginx /mydata/nginx/
  • 修改文件名称:
mv nginx conf
  • 终止并删除容器:
docker stop nginx
docker rm nginx
  • 使用如下命令启动Nginx服务:
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.22

1.4 RabbitMQ安装

1.4.1 安装步骤

  • 下载rabbitmq3.9-management的docker镜像:
docker pull rabbitmq:3.9-management
  • 使用如下命令启动RabbitMQ服务:
docker run -p 5672:5672 -p 15672:15672 --name rabbitmq \
-v /mydata/rabbitmq/data:/var/lib/rabbitmq \
-d rabbitmq:3.9-management
  • 开启防火墙:
firewall-cmd --zone=public --add-port=15672/tcp --permanent
firewall-cmd --reload

1-2.png

如果,Web-UI界面无法访问 :

docker exec -it {rabbitmq容器名称或者id} /bin/bash
rabbitmq-plugins enable rabbitmq_management
#重启rabbitmq容器
docker retart rabbitmq容器id/名称
  • 输入账号密码并登录:guest guest
  • 创建帐号并设置其角色为管理员:mall mall

1-3.png

  • 创建一个新的虚拟host为:/mall

1-4.png

  • 点击mall用户进入用户配置页面

1-5.png

  • 给mall用户配置该虚拟host的权限

1-6.png

1.4.2 Web-UI界面无法访问

docker ps,通过 docker exec -it 容器id /bin/bash 进入容器内部;再
运行 rabbitmq-plugins enable rabbitmq_management。此时可以通过访问http://linuxip:15672,访问web界面,用户名和密码默认都是guest

docker exec -it {rabbitmq容器名称或者id} /bin/bash
rabbitmq-plugins enable rabbitmq_management
#重启rabbitmq容器
docker retart rabbitmq容器id/名称

1.5 Elasticsearch安装

1.5.1 安装步骤

  • 下载Elasticsearch7.17.3的docker镜像:
docker pull elasticsearch:7.17.3
  • 修改虚拟内存区域大小,否则会因为过小而无法启动:
sysctl -w vm.max_map_count=262144

补充vm.max_map_count是一个与内核虚拟内存子系统相关的参数,用于控制进程可以拥有的内存映射区域的最大数量。它通常用于限制一个进程可以打开的文件数量,特别是在使用大量内存映射文件的情况下。

在Linux系统上,vm.max_map_count参数的默认值通常是较小的数值,例如65530。然而,对于一些需要大量内存映射的应用程序或者特定的使用场景,可能需要增加该参数的值,以便支持更多的内存映射区域。有两种方式可以设置虚拟内存:

#法一(临时修改,不推荐)
sysctl -w vm.max_map_count=262144   #使用sysctl命令在运行时临时修改参数的值
sysctl -a | grep vm.max_map_count   #查看vm.max_map_count配置
cat /proc/sys/vm/max_map_count

#法二(永久设置,推荐)
vi /etc/sysctl.conf
vm.max_map_count=262144     #在打开的文件中新增内容,设置虚拟内存
sysctl -p                   #重新加载/etc/sysctl.conf文件中的所有参数值,使设置的虚拟内存生效(如果你修改了/etc/sysctl.conf中的值,需要使用该命令才能生效)
  • 使用如下命令启动Elasticsearch服务,内存小的服务器可以通过ES_JAVA_OPTS来设置占用内存大小:
docker run -p 9200:9200 -p 9300:9300 --name elasticsearch \
-e "discovery.type=single-node" \
-e "cluster.name=elasticsearch" \
-e "ES_JAVA_OPTS=-Xms512m -Xmx1024m" \
-v /mydata/elasticsearch/plugins:/usr/share/elasticsearch/plugins \
-v /mydata/elasticsearch/data:/usr/share/elasticsearch/data \
-d elasticsearch:7.17.3

通常情况下,Elasticsearch的HTTP API监听在9200端口上,而集群通信则监听在9300端口上。

  • 启动时会发现/usr/share/elasticsearch/data目录没有访问权限,只需要修改/mydata/elasticsearch/data目录的权限,再重新启动即可;
chmod 777 /mydata/elasticsearch/data/

1-7.png

  • 下载完成后解压到Elasticsearch的/mydata/elasticsearch/plugins目录下;

1-8.png

  • 重新启动服务:
docker restart elasticsearch

通过浏览器访问 http://ip:9200,会返回版本信息。

1-9.png

1.5.2 9200端口无法访问

先尝试将vm.max_map_count设置得大点、重启elasticsearch,如果此方式能解决问题,就永久化修改配置:

sysctl -w vm.max_map_count=655360

#永久化修改配置
vi /etc/sysctl.conf
vm.max_map_count=655360     #在打开的文件中新增内容,设置虚拟内存
sysctl -p

sysctl -a | grep vm.max_map_count   #查看vm.max_map_count配置
cat /proc/sys/vm/max_map_count

一般修改vm.max_map_count大小后,就能正常访问。如果还是无法访问,尝试以下步骤。

2)修改elasticsearch配置

正常情况下docker拉取es,9200端口(api)可以访问到,5.0版本后9300端口(client)访问不到,解决方法如下:

  • 拉取docker中elasticsearch配置文件到本地目录

之前已启动elasticsearch的情况下,复制es配置文件到本地

#containerName为elasticsearch容器的名称或id
docker cp containerName:/usr/share/elasticsearch/config/elasticsearch.yml /usr/share/elasticsearch.yml

1-10.png

  • 修改配置文件(重要)
vi /usr/share/elasticsearch.yml

#放开transport.host这一行

#配置跨域
http.cors.enabled: true
http.cors.allow-origin: "*"

docker restart elasticsearch
tcping ip:9200      #外部也可ping通

其作用是允许任何ip地址访问elasticsearch,开发测试阶段可以这么做,生产环境下指定具体的IP。

1-11.png

3)使用curl测试链接

netstat -tuln | grep 9200    #检查宿主机的端口监听情况,确保9200端口没有被其他进程占用

curl http://localhost:9200/  #从宿主机尝试直接连接到Elasticsearch
#或者使用容器内部的IP地址
docker inspect <container_id_or_name> | grep IPAddress
curl http://<ip_address>:9200/   #用得到的IP地址尝试连接

curl连接elasticsearch.png

1.6 Logstash安装

1.6.1 安装步骤

  • 下载Logstash7.17.3的docker镜像:
docker pull logstash:7.17.3
output {
  elasticsearch {
    hosts => "es:9200"
    index => "mall-%{type}-%{+YYYY.MM.dd}"
  }
}

从上述路径下载logstash.conf,修改output

1-12.png

  • 创建/mydata/logstash目录,并将Logstash的配置文件logstash.conf拷贝到该目录;
mkdir /mydata/logstash
  • 使用如下命令启动Logstash服务;
docker run --name logstash -p 4560:4560 -p 4561:4561 -p 4562:4562 -p 4563:4563 \
--link elasticsearch:es \
-v /mydata/logstash/logstash.conf:/usr/share/logstash/pipeline/logstash.conf \
-d logstash:7.17.3
  • 进入容器内部,安装json_lines插件。
docker exec -it logstash /bin/bash
logstash-plugin install logstash-codec-json_lines

1.6.2 插件安装失败

进入容器然后按照json_lines插件这一步总是安装失败,OpenJDK 64-Bit Server VM warning: Option UseConcMarkSweepGC was deprecated in version 9.0 and will likely be removed in a future release.

1-13.png

或者报错Unable to download data from https://rubygems.org

1-14.png

问题原因:这是由于Logstash默认从国外的镜像网下载插件的,所以很慢,甚至无法下载

解决方案

  • 方案一:修改镜像地址(此处我们使用该方式)
  • 方案二:离线安装

1.6.3 修改镜像地址

1)首先确保linux上有gem,没有则安装yum install gem

gem -v
yum install gem      #或者 yum install -y gem
gem -v

2)检查并修改安装源

镜像地址有以下几种:

#检查当前镜像
gem sources -l

#修改镜像源
gem sources --add https://gems.ruby-china.com/ --remove https://rubygems.org/
gem sources -l    #检查一下,确保只有 gems.ruby-china.com

#如果https://gems.ruby-china.com/还是无法下载,试试清华的镜像源
#gem sources --add https://mirrors.tuna.tsinghua.edu.cn/rubygems/ --remove https://rubygems.org/

1.7 Kibana安装

  • 下载Kibana7.17.3的docker镜像:
docker pull kibana:7.17.3
  • 使用如下命令启动Kibana服务:
docker run --name kibana -p 5601:5601 \
--link elasticsearch:es \
-e "elasticsearch.hosts=http://es:9200" \
-d kibana:7.17.3
  • 开启防火墙:
firewall-cmd --zone=public --add-port=5601/tcp --permanent
firewall-cmd --reload

1-15.png

1.8 MongoDB安装

  • 下载MongoDB4的docker镜像:
docker pull mongo:4
  • 使用docker命令启动:
docker run -p 27017:27017 --name mongo \
-v /mydata/mongo/db:/data/db \
-d mongo:4

-v:将宿主机的/docker_volume/mongodb/data映射到容器的/data/db目录,将数据持久化到宿主机,以防止删除容器后,容器内的数据丢失。

补充

如果使用docker pull mongo拉取最新版本的mongo,mongo启动后会停止、无法启动,使用docker logs mongo有如下提示,WARNING: MongoDB 5.0+ requires a CPU with AVX support, and your current system does not appear to have that!

1-16.png

可切换到 4.4.9的mongo,重新启动mongo、正常运行

docker stop mongo
docker rm mongo

docker pull mongo:4.4.9
docker run -p 27017:27017 --name mongo \
-v /mydata/mongo/data:/data/db \
-d mongo:4.4.9

docker ps -a

1-17.png

1.9 MinIO安装

  • 下载MinIO的Docker镜像;
docker pull minio/minio
  • 下载完成后使用如下命令运行MinIO服务,注意使用--console-address指定MinIO Console的运行端口(否则会随机端口运行):
docker run -p 9090:9000 -p 9001:9001 --name minio \
-v /mydata/minio/data:/data \
-e MINIO_ROOT_USER=minioadmin \
-e MINIO_ROOT_PASSWORD=minioadmin \
-d minio/minio server /data --console-address ":9001"
  • 运行成功后就可访问MinIO Console的管理界面了,输入账号密码minioadmin:minioadmin即可登录,访问地址:http://192.168.3.101:9090

1-18.png

1-19.png

1.10 docker全部环境安装完成

  • 所有下载镜像文件:

1-20.png

  • 所有运行在容器里面的应用:

1-21.png

二、SpringBoot应用部署

使用IDEA打开mall项目。

2.1 构建所有Docker镜像并上传

  • 修改项目根目录下的pom.xml中的docker.host属性:
<!-- 改为自己服务器ip -->
<properties>
    <docker.host>http://192.168.56.11:2375</docker.host>
</properties>

2-1.png

  • 如果项目根目录的pom.mxldocker-maven-plugin<executions>节点被注释掉了就打开注释,使项目在打包时直接构建Docker镜像;

2-2.png

  • 修改.yml配置文件,运行MallAdminApplication、MallDemoApplication、MallPortalApplication、MallSearchApplication,确保都能跑起来

或者先 maven clean、package,直接修改target目录下的配置文件

包括mall-admin、mall-demo、mall-admin、mall-portal下的

2-3.png

  • 直接双击根项目mallpackage命令可以一次性打包所有应用的Docker镜像;

2-4.png

2-5.png

如果报错[ERROR] DOCKER> Cannot create docker access object [Connect to 192.168.56.11:2375 [/192.168.56.11] failed: Connection refused: connect],表明外部无法访问2375端口。解决方法如下:

/usr/lib/systemd/system/docker.service文件添加-H tcp://0.0.0.0:2375,配置远程访问

[Service]
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock
vim /usr/lib/systemd/system/docker.service
# ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock

#重启docker
systemctl daemon-reload
systemctl start docker

#经过上述操作后外部仍然无法访问2375端口,这时就需要查看是否是防火墙在作怪
firewall-cmd --zone=public --list-ports
#如果没有开放2375端口,需要开发2375端口
firewall-cmd --zone=public --add-port=2375/tcp --permanent  #permanent 是永久打开端口,否则重启系统后该端口仍然未对外开放
firewall-cmd --reload       #防火墙重启
netstat -tunlp | grep 2375

2.2 部署mall-admin

docker run -p 8080:8080 --name mall-admin \
--link mysql:db \
--link redis:redis \
-v /etc/localtime:/etc/localtime \
-v /mydata/app/admin/logs:/var/logs \
-d mall/mall-admin:1.0-SNAPSHOT

#为了避免与本地其他程序的8080端口冲突,此处使用38080,以下类似
docker run -p 38080:8080 --name mall-admin \
--link mysql:db \
--link redis:redis \
-v /etc/localtime:/etc/localtime \
-v /mydata/app/admin/logs:/var/logs \
-d mall/mall-admin:1.0-SNAPSHOT

注意:如果想使用Logstash收集日志的话,需要将应用容器连接到Logstsh,添加如下配置即可

--link logstash:logstash \

2.3 部署mall-search

docker run -p 8081:8081 --name mall-search \
--link elasticsearch:es \
--link mysql:db \
-v /etc/localtime:/etc/localtime \
-v /mydata/app/search/logs:/var/logs \
-d mall/mall-search:1.0-SNAPSHOT

docker run -p 38081:8081 --name mall-search \
--link elasticsearch:es \
--link mysql:db \
-v /etc/localtime:/etc/localtime \
-v /mydata/app/search/logs:/var/logs \
-d mall/mall-search:1.0-SNAPSHOT

2.4 部署mall-port

docker run -p 8085:8085 --name mall-portal \
--link mysql:db \
--link redis:redis \
--link mongo:mongo \
--link rabbitmq:rabbit \
-v /etc/localtime:/etc/localtime \
-v /mydata/app/portal/logs:/var/logs \
-d mall/mall-portal:1.0-SNAPSHOT

docker run -p 38085:8085 --name mall-portal \
--link mysql:db \
--link redis:redis \
--link mongo:mongo \
--link rabbitmq:rabbit \
-v /etc/localtime:/etc/localtime \
-v /mydata/app/portal/logs:/var/logs \
-d mall/mall-portal:1.0-SNAPSHOT

2.5 开启防火墙

firewall-cmd --zone=public --add-port=8080/tcp --permanent
firewall-cmd --zone=public --add-port=8081/tcp --permanent
firewall-cmd --zone=public --add-port=8085/tcp --permanent
firewall-cmd --reload

2.6 访问接口进行测试

如果部署mall-admin映射到主机38080端口,此处就要使用 http://192.168.56.11:38080/swagger-ui/,http://192.168.56.11:38080/swagger-ui.html

2-6.png

2-7.png

2-8.png

2.7 补充:docker启动容器时报错:iptables: No chain/target/match by that name

docker 服务启动的时候,docker服务会向iptables注册一个链,以便让docker服务管理的容器所暴露的端口之间进行通信

通过命令 ``iptables -L` 可以查看iptables 链。查看链路,发现并没有相关端口的iptables 链

  • 根本原因:在开发环境中,如果你删除了iptables中的docker链,或者iptables的规则被丢失了(例如重启防火墙,笔者就是重启防火墙导致),docker就会报iptables error例如:iptables: No chain/target/match by that name

2-9.png

  • 解决方案重启docker服务,之后,正确的iptables规则就会被创建出来。再次查看iptables 链,相关链路已经出现,服务也正常启动。

2-10.png

mall-admin

mall-search

mall-portal

接口文档

由于mall项目中的大部分接口需要登录认证之后才能访问,这里以mall-admin为例,介绍下接口文档的访问。

2-11.png

  • 接下来我们需要访问登录接口/admin/login来获取token;

2-12.png

  • 登录成功后,返回结果中将返回token和tokenHead;

2-13.png

  • 然后点击Swagger文档的Authorize按钮,输入tokenHead+token拼接的认证请求头,注意tokenHead后面有个空格;

2-14.png

  • 之后调用需要登录认证的接口,就可以正常访问了;

2-15.png

  • 对于mall-portal模块的接口调用也是一样的,登录获取token的接口为/sso/login

2-16.png

相关文章
|
6天前
|
关系型数据库 MySQL 数据安全/隐私保护
docker应用部署---MySQL的部署配置
这篇文章介绍了如何使用Docker部署MySQL数据库,包括搜索和拉取MySQL镜像、创建容器并设置端口映射和目录映射、进入容器操作MySQL,以及如何使用外部机器连接容器中的MySQL。
docker应用部署---MySQL的部署配置
|
9天前
|
NoSQL Linux Redis
linux安装单机版redis详细步骤,及python连接redis案例
这篇文章提供了在Linux系统中安装单机版Redis的详细步骤,并展示了如何配置Redis为systemctl启动,以及使用Python连接Redis进行数据操作的案例。
20 2
|
8天前
|
NoSQL Linux Redis
linux之centos安装redis
linux之centos安装redis
|
1月前
|
NoSQL Linux Redis
Linux Redis 服务设置开机自启动
【9月更文挑战第2天】在 Linux 系统中,可使用两种方法设置 Redis 开机自启动:一是通过创建 `redis.service` 文件并利用 systemd 进行管理,包括定义服务参数和启动脚本;二是编辑 `/etc/rc.local` 文件,在其中添加启动命令。推荐使用 systemd 方法,因为它更符合现代 Linux 系统的设计理念。设置完成后,可通过 `sudo systemctl status redis.service` 检查服务状态。
|
20天前
|
弹性计算 运维 持续交付
探索Docker容器化技术及其在生产环境中的应用
探索Docker容器化技术及其在生产环境中的应用
70 5
|
12天前
|
Linux iOS开发 Docker
Docker:容器化技术的领航者 —— 从基础到实践的全面解析
在云计算与微服务架构日益盛行的今天,Docker作为容器化技术的佼佼者,正引领着一场软件开发与部署的革命。它不仅极大地提升了应用部署的灵活性与效率,还为持续集成/持续部署(CI/CD)提供了强有力的支撑。
192 69
|
3天前
|
Kubernetes Cloud Native Docker
云原生时代的容器化实践:Docker与Kubernetes入门
【9月更文挑战第30天】在云计算的浪潮中,云原生技术正以前所未有的速度重塑着软件开发和运维领域。本文将通过深入浅出的方式,带你了解云原生的核心组件——Docker容器和Kubernetes集群,并探索它们如何助力现代应用的构建、部署和管理。从Docker的基本命令到Kubernetes的资源调度,我们将一起开启云原生技术的奇妙之旅。
|
13天前
|
运维 Cloud Native Docker
云原生技术入门:Docker容器化实战
【9月更文挑战第20天】本文将引导你走进云原生技术的世界,通过Docker容器化技术的实战演练,深入理解其背后的原理和应用。我们将一起探索如何在云平台上利用Docker简化部署、扩展和管理应用程序的过程,并揭示这一技术如何改变现代软件的开发和运维模式。
|
8天前
|
Cloud Native 持续交付 Docker
云原生技术入门与实践:Docker容器化部署示例
【9月更文挑战第25天】在数字化转型的浪潮下,云原生技术成为推动企业创新的重要力量。本文旨在通过浅显易懂的语言,为初学者揭示云原生技术的核心概念及其应用价值。我们将以Docker容器为例,逐步引导读者了解如何将应用程序容器化,并在云端高效运行。这不仅是对技术趋势的跟随,更是对资源利用和开发效率提升的探索。
27 4
|
1月前
|
应用服务中间件 nginx Docker
Docker同一台宿主机容器通信-通过容器名称互联
本文详细介绍了如何通过容器名称实现同一宿主机上容器间的互联,并提供了实战案例。首先,文章解释了容器间通过自定义名称访问的原理,随后演示了创建并连接Tomcat与Nginx容器的具体步骤。此外,还讨论了配置中可能出现的问题及解决方案,包括避免硬编码IP地址和使用自定义容器别名来增强系统的灵活性与可维护性。通过这些实践,展示了如何高效地配置容器间通信,确保服务稳定可靠。
28 1
Docker同一台宿主机容器通信-通过容器名称互联
下一篇
无影云桌面