spring cloud各个微服务打包到docker容器内

spring cloud各个微服务打包到docker容器内

一、添加maven项

12345678910111213141516<plugin>
    <groupId>com.spotify</groupId>
    <artifactId>docker-maven-plugin</artifactId>
    <version>0.4.13</version>
    <configuration>
        <imageName>boss-gateway</imageName>
        <dockerDirectory>src/main/docker</dockerDirectory>
        <resources>
            <resource>
                <targetPath>/</targetPath>
                <directory>${project.build.directory}</directory>
                <include>${project.build.finalName}.war</include>
            </resource>
        </resources>
    </configuration>
</plugin>

二、Dockerfile 文件

1234567891011121314FROM openjdk:8-jre-alpine

ENV SPRING_OUTPUT_ANSI_ENABLED=ALWAYS \
    JHIPSTER_SLEEP=0 \
    JAVA_OPTS=""

CMD echo "The application will start in ${JHIPSTER_SLEEP}s..." && \
    sleep ${JHIPSTER_SLEEP} && \
    java ${JAVA_OPTS} -Djava.security.egd=file:/dev/./urandom -jar /app.war

EXPOSE 8080

ADD *.war /app.war

三、使用docker命令打包项目

1mvn package docker:build -Dmaven.test.skip=true

-Dmaven.test.skip=true 不编译测试类
可用以上命名依次打包 project-eureka(注册中心项目) uaa(认证中心) (微服务)project-0…project-n

1234docker run --name eurekaName -p 8761:8761 -d eurekaName:latest  --注册中心eureka
docker run --name uaaName -p 9999:9999 -d uaaName:latest   --认证中心oauth2
docker run --name getaweyName -p 8080:8080 -d getaweyName:latest -- 网关zuul
docker run --name serviceName -p 8083:8083 -d serviceName:latest  -- 微服务

到这里项目就可以运行了。http://localhost:8761/


docker常用命令

12345678910111213docker run --name uaaName -p 9999:9999 -d uaaName:latest 
-d 代表后台运行
-t 代表当前运行类似于java -jar ...能看到docker运行的日志
-p 设置端口号
docker images 查看容器
docker rmi <CONTAINER ID>  删除容器 必须停止镜像后才能删除
docker logs <CONTAINER ID>   查看当前容器日志
docker ps 查看正在运行的docker镜像
docker ps -a 查看全部docker镜像
docker rm <CONTAINER ID> 删除镜像
docker start <CONTAINER ID> 启动docker镜像
docker stop <CONTAINER ID> 停止docker镜像

在研究docker的同时也是碰见一些坑在这里分享

  • 问题一、微服务部署到docker镜像内如何连接数据库的,微服务docker镜像内本地没有安装mysql。

研究了几天原本以为 --link mysql:latest 是指向docker容器内的mysql呢。(目前不知道–link真正实际的作用。 应该是在宿机内使用的吧(192.168.99.100)
曾经傻傻的写了:docker run --name base-uaa -p 9999:9999 --link mysql:latest --link base-registry -t base-uaa:latest 意思是启动uaa项目并且找到mysql容器,后面的link是找到base-redgistry项目.

  • 问题二、当eureka 项目打包到docker后,微服务如何注册到eureka注册中心。
    其实当你在外部安装docker后,比如mysql


0.0.0.0:3306其实是127.0.0.1:3306

直接当成mysql已安装到本地即可。用客户端直接连即可。

但是如果我微服务要注册到eureka上,就不能写127.0.0.1了,因为docker镜像内会自动映射出一个内部的IP地址
如下图:


172.17.0.6 Ip是镜像内分配的ip外部无法访问,不能直接http://172.17.0.6:8080

但是你可以http:localhost:8080

需要写真正的ip地址


打包到docker容器后,需要将所有的127.0.0.1或者localhost都修改成真实IP即可。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值