1. 背景java
将系统拆分红微服务,一个系统可能拆分红十几个服务,服务太多会影响发布和管理,因此容器话以后易于管理和版本发布,鉴于此将spring cloud微服无docker容器化。git
2.依赖环境github
Centos7.5,Maven环境 和 Docker环境spring
本人机器不是Windows系统,直接装的Centos系统,可能系统有差别,Windows下应该也能够,没有具体测试。docker
3.编写demo程序app
@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编译maven
在编译时会下载相应的依赖jar包。ide
# 在模块下面,具备pom文件的那层,执行如下命令 mvn clean && mvn install
5.编写Dockerfilespring-boot
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