通过Dockerfile文件来将springboot构建docker镜像
首先看下项目的目录结构
bin目录作为宿主机和容器的挂载目录。下属两个文件夹一个config用于放配置文件,一个log用于保存容器内运行产生的日志:
在配置文件中配置了springboot日志生成的路径
logging:
file:
path: bin/log
Dockerfile中配置的内容
将springboot添加到镜像里,启动时读取容器内部bin/config下的配置文件。启动容器时会进行挂载的操作,因为bin目录是挂载的宿主机的目录。相当于容器内能看到宿主机的文件,实现外部配置文件。
通过docker exec -it 容器id bash 进入容器命令行就能看到挂载的bin目录
FROM openjdk:8
WORKDIR /usr/local/project/sass
ADD ./deyi-his-sass.jar /usr/local/project/sass/docker-deyi-his-sass.jar
ENTRYPOINT ["java","-jar","-Xms256M","-Xmx256M","/usr/local/project/sass/docker-deyi-his-sass.jar","--spring.config.location=/usr/local/project/sass/bin/config/application.yml"]
之后通过docker build去生成镜像
重点启动也就是通过docker run 启动一个容器时
docker run --hostname $1 --net=host --name $1 -v /usr/local/project/$1/bin:/usr/local/project/$1/bin -d $projectname:$DATE
1.–net=host
docker会自动生成一个默认的网卡docker0
容器会默认分配一个docker0下的一个ip地址,而在微服务中客户端注册到eureka就会使用这个docker分配的ip进行注册
这时如果服务存在跨机器调用是无法访问的。
需要在启动容器时通过–net=host,相当于是走宿主机的网络而不是走docker0,这样在实例注册时显示的就是实际的ip地址
2.-v /usr/local/project/$1/bin:/usr/local/project/$1/bin
来挂载宿主机的目录
在容器启动后,对应的日志就可以在宿主机的bin/log目录下看到