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即可。