一、前言
关于docker的知识,在这里我就不再赘述,相信大家都玩过虚拟机,那么你可以把docker的镜像当做是迷你版的虚拟机,它可以宿主在多种操作系统中,容器之间相互都是独立,它的优点就是占用内存小,方便部署,有点拎包入住的意思。
二、部署步骤
1、安装docker
这里就不再细说了,网上有很多详细的安装步骤,我这边安装的18.03.1-ce
2、将springboot打包的jar文件上传至服务器/home/springboot/docker_springboot_demo/
3、在jar文件同级目录创建Dockerfile文件->#vim Dockerfile
附上粘贴板:
FROM java:8
VOLUME /tmp
ADD DOCKERDEMO.jar app.jar
EXPOSE 8401
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
3、创建docker镜像
在/home/springboot/docker_springboot_demo/ 执行命令 docker build -t docker_springboot_demo . (温馨提示:注意最后的点)
创建成功,可以用docker命令查下:docker images
4、运行镜像
执行命令(这里的8080端口是映射到外界的真实访问端口):docker run -p 8080:8401 -d docker_springboot_demo
可以执行命令查看运行的镜像:docker ps
5、验证springboot工程是否正常启动
执行命令查看工程运行日志:docker logs {容器ID}
我们看日志是成功启动的,到浏览器访问下->
OK,没问题,当然我们还可以启动多个服务,比如再开一个8081端口的:docker run -p 8081:8401 -d docker_springboot_demo
三、扩展
1、平常我们启动springboot服务一般会设置内存堆大小、回收模式,我们可以这样启动镜像:docker run --rm -e JAVA_OPTS='-Xmx2048m -Xms2048m' -p 8080:8401 -d docker_springboot_demo
2、这里我还要特意提一下域名映射,有的同学平常的一些项目会会使用hostname来替代频繁变化的IP,那么这个IP在宿主机/etc/homts里面的配置的默认是不会生效的,进入到容器内部:docker exec -it {容器ID} bash 查询下:cat /etc/hosts 是没有的;解决:你可以在运行镜像的时候指定:
docker run --rm -e JAVA_OPTS='-Xmx2048m -Xms2048m' --add-host mysql_host:172.16.16.17 --add-host redis_host:172.16.16.18 -p 8080:8401 -d docker_springboot_demo
3、镜像一次创建,无限使用(有点免安装软件的味道),你可以把镜像压缩打包,然后传到其他服务器解压加载就行了
<1>导出镜像
docker save
<2>导入镜像
gunzip -c
四、采坑
1、在运行镜像时报错:WARNING: IPv4 forwarding is disabled. Networking will not work.
解决:在docker的宿主机中更改以下
[root@localhost ~]# vi /usr/lib/sysctl.d/00-system.conf
添加如下代码:
net.ipv4.ip_forward=1
重启network服务
# systemctl restart network
五、后语
小生才疏学浅,有不对的地方请指教,谢谢大家!