1. 背景
将系统拆分成微服务,一个系统可能拆分成十几个服务,服务太多会影响发布和管理,所以容器话之后易于管理和版本发布,鉴于此将spring cloud微服无docker容器化。
2.依赖环境
Centos7.5,Maven环境 和 Docker环境
本人机器不是Windows系统,直接装的Centos系统,可能系统有差异,Windows下应该也可以,没有具体测试。
3.编写demo程序
@RestController public class ProviderController { private static Logger logger = LoggerFactory.getLogger(ProviderController.class); @RequestMapping("/hello") public String hello(){ logger.info("hello debug world "+new Date()); logger.debug("hello debug world "+new Date()); logger.error("hello debug world "+new Date()); return "Hello World"; } }
4.先用maven编译
在编译时会下载相应的依赖jar包。
# 在模块下面,具有pom文件的那层,执行以下命令 mvn clean && mvn install
5.编写Dockerfile
FROM openjdk:8-jdk-alpine VOLUME /tmp COPY target/*.jar app.jar ENTRYPOINT ["java","-jar","/app.jar"]
这是一个简单的Dockerfile,
From是需要的依赖,
COPY是将target下编译好的包拷贝到docker虚拟环境的根目录下
ENTRYPOINT是启动后要执行的命令
6.docker命令编译image
docker build -t docker-cloud/provider:1.0 .
编译完成之后执行查看镜像命令,会看到编译出来的镜像,可以制定不同的tag版本。
# 查看docker镜像
docker images
7.启动编译好的镜像
docker run --name provider -p 8090:8090 -d doceker-cloud/provider:1.0
--name 指定启动的容器名称
-p 8090:8090 将本地的8090端口和docker容器的8090端口做映射
-d 是后台运行docker程序
最后面根的是要启动的镜像,我选择启动的是docker-cloud/provider镜像,并且TAG是1.0的版本。
8.启动之后查看docker有没有启动
#查看docker启动的进程 docker ps
9. 启动之后可以看一下容器里面的样子
docker exec -it provider /bin/sh
其中app.jar就是我们打包镜像时拷贝过去的jar文件,logs目录是我打的日志
10.我想看日志怎么办?
在docker里面命令是很有限的,很多命令用不了,像tailf这种命令就没法实时查看日志,所以我们就要把日志文件挂载到磁盘的目录下面。
docker run --name provider -v /home/zhaowei/docker-provider/logs:/logs -d docker-cloud/provider:1.0
-v 就是将目录 /home/zhaowei/docker-provider/logs 挂载到容器的logs目录下,这样产生的日志文件就直接可以在磁盘目录下查看了。
11. 我的想改启动端口怎么办?
spring cloud程序一般可以在applicaiton.properties里指定启动的端口号,但这样有个局限,就是写死了,但是也无所谓,命令行可以指定端口参数,命令行里的参数优先级比配置文件的高,所以在启动的时候指定端口参数就可以了,但是我们的启动参数是写在Dockerfile里面的,所以这里要修改Dockerfile文件了。
FROM openjdk:8-jdk-alpine VOLUME /tmp COPY target/*.jar app.jar ENTRYPOINT ["sh","-c","java ${JAVA_OPTS} -jar /app.jar ${0} ${@}"]
我们在启动docker容器时命令是这样的:
docker run --name provider2 -p 9090:9090 -v /home/zhaowei/docker-provider/logs:/logs -d docker-cloud/provider:2.0 --server.port=9090
12. 其他
demo:https://github.com/liuzwei/docker-app.git
参考:这里是更详细的说明 https://github.com/spring-guides/top-spring-boot-docker