Docker+SpringCloud微服务部署

Docker+SpringCloud微服务部署

  • 1、背景
  • 2、服务器环境搭建
    • 2.1docker准备
    • 2.2 docker安装
  • 3、本地项目配置
    • 3.1、注册阿里云私有仓库
    • 3.2、项目配置
  • 4、启动服务
    • 4.1 启动nacos
    • 4.2 启动redis
    • 4.3 从阿里云拉取所需的镜像,启动镜像
  • 5、总结

1、背景

微服务架构下,原来所有服务均部署在一台云服务器上,时常会过载。现在增加了一台,总共七个微服务,加上nacos和redis,利用docker部署在两台云服务器上。

2、服务器环境搭建

2.1docker准备

系统要求
Docker 运行在 CentOS 7.X 之上 (不支持内核在 3.8 以下的老版本)
通过以下命令查看您的 CentOS 内核

uname -r

需要保证Docker安装在 64 位平台。
设置 Yum 源
Docker 有多种安装方式,例如 Yum 安装、PRM 包安装、Shell安装等。以下以 Yum 安装方式进行, Docker 分 Docker EE 和 Docker CE 两种版本(EE:企业版,收费的;CE:社区版,不收费)。

1、安装 yum-utils , 这样就能使用 yum-config-manager 工具设置 Yum 源。

$ sudo yum install -y yum-utils device-mapper-persistent-data lvm2

2、执行以下命令,添加 Docker 的 Yum 源。

$ sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

2.2 docker安装

1、更新 Yum 包的索引

$ sudo yum makecache fast

2、安装最新版本的 Docker

$ sudo yum install docker-ce

3、在生产系统中,可能需要安装指定版本的 Docker ,而并不总是安装最新的版本。

执行以下命令,即可列出可用的 Docker 版本

$ yum list docker-ce --showduplicates | sort -r

列出 Docker 版本后,可使用以下命令安装指定版本的 Docker 。

例如:

$ sudo yum -y install docker-ce-17.09.0.ce

4、启动 Docker

$ sudo systemctl start docker

5、执行以下命令,验证安装是否正确

$ sudo docker run hello-world

6、查看 Docker 版本

docker version

3、本地项目配置

3.1、注册阿里云私有仓库

服务打包成镜像后需要上传到私有仓库,然后服务器每次从私有仓库中拉取镜像,这里私服仓库选择阿里云镜像仓库。
注册阿里云账号,搜索容器镜像服务,然后创建命名空间、镜像仓库即可。如下图
Docker+SpringCloud微服务部署_第1张图片

3.2、项目配置

使用了docker-maven-plugin插件来打包、推送镜像。
配置主要是在各个需要打包的微服务下的pom.xml里做配置,我这里结合了Dockerfile文件。
上传私有库,需要配置maven,找到setting.xml( linux可以使用find / -name settings.xml)加入以下配置

<servers>
  <server>
    <id>docker-aliyun-myid>
    <username>adminusername>
    <password>12345password>
  server>
servers>

然后是pom文件的配置

        
        
        <docker.repository.url>registry.cn-hangzhou.aliyuncs.com/danel-hub/momi-dockerdocker.repository.url>
        
        <docker.repository.namespace>danel-hubdocker.repository.namespace>
        
        <docker.repository.serverId>docker-aliyun-mydocker.repository.serverId>
        <docker.plugin.version>1.2.0docker.plugin.version>
    
    <build>
        <plugins>
            <plugin>
            
                <groupId>com.spotifygroupId>
                <artifactId>docker-maven-pluginartifactId>
                <version>${docker.plugin.version}version>
                <configuration>
                	
                    <imageName>${docker.repository.url}:${project.artifactId}-${project.version}imageName>
                    
                    <dockerDirectory>${project.basedir}dockerDirectory>
                    <resources>
                        <resource>
                            <targetPath>/targetPath>
                            <directory>${project.build.directory}directory>
                            <include>${project.build.finalName}.jarinclude>
                        resource>
                    resources>
                    <registryUrl>${docker.repository.url}registryUrl>
                    <serverId>${docker.repository.serverId}serverId>
                    
                    
                configuration>
                
                <executions>
                    <execution>
                        <id>build-imageid>
                        <phase>packagephase>
                        <goals>
                            <goal>buildgoal>
                        goals>
                    execution>
                executions>
            plugin>

每个服务下的Dockerfile文件

FROM sapmachine/jdk11 
VOLUME /tmp           
ADD /target/momi-user.jar app.jar
RUN bash -c 'touch /app.jar'
ENV JAVA_OPTS="\
-Dfile.encoding=UTF8 \
-XX:SurvivorRatio=8 \
-XX:+UseConcMarkSweepGC \
"
EXPOSE 8102
ENTRYPOINT ["sh", "-c","java $JAVA_OPTS  -Djava.security.egd=file:/dev/./urandom -jar /app.jar --spring.profiles.active=test"]

以上就是相关的配置,注意的是本地打包镜像上传阿里云仓库的时候,需要你本机安装有docker。

4、启动服务

4.1 启动nacos

安装、启动nacos只需下面几行命令

docker search nacos
docker pull nacos/nacos-server:1.2.1
docker run --env MODE=standalone --name nacos -d -p 8848:8848 nacos/nacos-server:1.2.1

这里-p参数是端口映射,docker容器启动nacos是以容器的内网ip启动的,外网没法访问,做了端口映射的话我们就可以通过服务器的ip来访问nacos了,这里注意下,项目里配置的nacos地址就是服务器ip:8848端口 而不是172开头的内网ip,所以这里必须做端口映射。
启动之后通过docker ps 查看运行中的容器。然后可以登录nacos的界面去导入配置文件(主要是redis、mysql数据库的配置)。
Docker+SpringCloud微服务部署_第2张图片

4.2 启动redis

redis 可以用docker部署,也可以不用,我这里没用docker部署,直接在服务器装的redis。

4.3 从阿里云拉取所需的镜像,启动镜像

根据阿里云镜像仓库的操作指南操作即可。完成之后执行docker images查看镜像。
然后用以下命令启动容器,–name容器名称,–net=host网络模式,以host模式容器是以宿主机的ip启动的,而不是内网ip,端口也会对应到宿主机的端口,所以也不必再做端口映射。所以这样服务注册到nacos上的也是外网ip,这样的话两台服务器上的微服务就可以互相调用了。

docker run --name mo-auth --net=host -d registry.cn-hangzhou.aliyuncs.com/danel-hub/mo-docker:mo-auth-1.0-SNAPSHOT

全部启动成功后,打开nacos界面查看对应部署的服务是否都注册上来了;
测试接口的调用发现调用都没有问题,则基于docker的部署已经成功。

5、总结

1、微服务本身就可以放在不同的服务器上,只要保证网络互通,就可以互相调用,所以这里不需要做集群。
2、如果服务注册不上nacos,一是查看项目里nacos的地址配置了没有,配置对了没有,我这里nacos的地址是写在配置文件中的。二是查看每个微服务暴露的端口在服务器上开放了没有。
3、如果所有服务都注册到nacos上,而两台服务器上的微服务无法互相调用,先查看nacos的服务是以哪个ip注册上来的,启动容器时不加–net=host会默认以内网ip启动注册到nacos,这样是无法给外部调用的。
4、Dockerfile里一开始用的基础镜像是open-jdk的slim 版本,运行后测试获取验证码的接口会报错Could not initialize class sun.awt.X11FontManager,替换了jdk11的基础镜像后问题解决。

你可能感兴趣的:(java,java,docker,spring,cloud,spring,boot)