跳到主要内容

Docker部署微服务(单机版)

备注

以繁琐的方式尝试部署微服务项目,基本步骤Hare觉得都是一样的!会一个就能会其他~~~ 本次部署主要针对三个服务其中包括使用了Nacos,Redis,OpenFegin服务间调用!

环境准备

  • 一个微服务项目 三个服务 A,B,C(B,C存在fegin调用)
  • Nacos1.4.6
  • Redis6.0.8
  • Mysql8.0.27
容器启动顺序

启动前,考虑下每个容器的启动顺序! Mysql->Nacos/Redis->A,B,C服务,服务排在最后!

部署服务

部署Mysql
部署Redis
部署Nacos

部署微服务

总体思路

本地打好Jar包,上传服务器自创建的一个目录里,在该目录里同时创建Dockerfile文件。然后docker build 构建images,最后docker run 启动~~~

只拿一个服务说事,其余俩都是照猫画虎 cv的事。

  • 创建jar&Dockerfile存放目录: /usr/local/myBroad
  • 构建服务镜像
    docker build -t broad:1.1 .
  • 启动容器
    docker images
    docker run --name broadA -p 7780:7780 -d broad:1.1
  • 查看日志
    docker ps
    docker logs 容器ID
注意
  1. 上述启动服务时,Hare是没有给服务日志挂载数据卷,大佬们如有需要 自行创建挂载目录挂载。
  2. fegin调用配置的url的ip地址,得是提供者服务的ip也就是容器的内网ip(172开头的)。

FAQ

  1. 本地nacos配置的地址写的是容器内网ip(172开头),启动服务后那Nacos注册的地址是容器内网IP(172开头)
备注

Docker中网络部分默认使用的就是bridge模式,也就是每个容器都有一个属于自己的IP。即注册到nacos的地址就是每个服务自己的内网ip 单机情况下,只要是使用的就是默认的bridge网络模式~~容器之间是相通的。

查看容器IP
docker ps
docker inspect 容器ID
  1. 本地nacos配置的地址写的是宿主机的内网ip
备注

这个能行吗?答案是能行~但是有一点需要非常注意
网络模式 要换成 Host模式,所有容器都要在启动的时候换成host模式。

docker run --name myname --network host

注意了,使用Host模式时 -p 8080:8080 端口映射就没必要了

  1. bridge模式中,容器IP是会改变的问题!!!
备注

docker提供了另一种方式,使用 容器服务名:port方式。
这种方式模式需要自己创建一个网络,默认还是bridge~但自己创建的就是可以容器服务名:port使用这种方式
这样就解决,容器ip会变动问题

创建自己的网络
docker network create myNet
docker network ls #查看

#启动时指定网络
docker run --name myname --network myNet

这样在服务配置文件中,即可使用 容器名:port的方式。

Loading Comments...