Docker 从springBoot项目到docker容器 |
您所在的位置:网站首页 › 将springboot项目部署到docker › Docker 从springBoot项目到docker容器 |
从springBoot项目到docker容器
引一些总结1. 项目 >> 镜像(Docker插件)创建一个简单的springBoot工程安装docker插件配置Dockerfile部署镜像
2. 项目 >> 镜像上传jar包和Dockerfile部署镜像
3. 镜像 >> 容器4. 容器 >> 镜像5. 镜像 >> 持久化6. 离线镜像 >> 镜像7. 本地镜像 >> dockerHub注册,登陆,创建仓库适配镜像名登陆,同送拉取测试
引
docker各类容器的运行,往往依赖相应的镜像,大家可以在dockerHub上找到绝大多数常用的开发中间件或者是工具,比如Mysql,Redis,Nacos,gitlab,jenkins等等。这类开源工具有很多版本的镜像,通过docker pull命令可以拉到本地,再通过docker run命令运行容器。 而我们自定义开发的软件,比如一个springBoot项目,想要通过docker容器运行,同样也绕不开镜像这一环。借助Dockerfile,我们可以将springBoot项目打包的jar或war,build成指定的镜像,再通过镜像运行容器即可。idea有docker插件,可以很方便的通过Dockerfile创建镜像并自动上传到我们的服务器上。 同样的,从容器可以反向保存为新的镜像,镜像可以生成本地压缩文件便于离线环境部署,也可以push到我们的dockerHub上,方便多环境重复使用。 下面来实际操作springBoot项目,镜像,容器之间的一些转换。 1. 项目 >> 镜像(Docker插件) 创建一个简单的springBoot工程这一步大家都信手拈来了,通过idea的向导,我们快速创建了一个名为docker-learning的工程,并添加一个简单的hello接口,便于测试。 @RestController public class HelloController { @GetMapping("/hello") public String hello(){ return "hello docker".concat("").concat(System.currentTimeMillis()+""); } }本地启动一下,测试服务和接口可用。 安装docker插件在File >> Settings >> >> Plugins >> Marketplace 搜索docker并安装 填写好后,Apply >> OK 这里如果连接不成功,需要配置一下docker的配置文件,打开/usr/lib/systemd/system/docker.service,在ExecStart这一行后追加 -H tcp://0.0.0.0:2375 回到idea主界面,下方菜单栏中有Services选项,可查看并操作docker镜像和容器。 在项目根路径下创建名为Dockerfile的文件,添加如下内容 FROM openjdk:8-jdk-slim MAINTAINER Rosen COPY target/*.jar /docker-hello.jar ENTRYPOINT ["java","-jar","/docker-hello.jar"] 第一行,以openjdk8作为基础镜像第二行,记录作者信息指定维护者信息第三行,将项目打包生成的jar拷贝到容器的根目录下,并命名为docker-hello.jar第四行,运行容器时执行的shell命令,jar -jar /docker-hello.jar添加一个configuration,新增一个Docker Dockerfile配置如下
配置好后,就运行该Configuration. 来到服务器上docker images查看一下
idea的docker插件,其实完成了从jar包到到镜像,镜像再上传这两步。通过将项目打包后的jar包和Dockerfile放到相应的位置,再执行docker buildi命令来完成。 将项目的Dockerfile上传至/docker/docker-file/docker-hello/目录下,项目打包后的jar包上传至/docker/docker-file/docker-hello/target/目录下(这里根据我们Dockerfile的配置,需要保证jar包在Dockerfile所在目录下的/target目录下) 部署镜像在/docker/docker-file/docker-hello/目录下执行docker build -t docker-hello:1.0.1 .,这里的-t后面跟的是tag信息,和idea插件一样,tag信息包含镜像名和版本号,特别注意命令后的一个点号,指代镜像构建过程中的上下文环境的目录(此处比较晦涩,我选择机械记忆)。
docker容器往往根据镜像创建,如果通过修改容器内部数据或配置的方式,改变应用并希望模板化这种修改,比如更新tomcat容器的首页端口等信息,可用通过docker commit命令将容器提交为新的镜像。
-a 记录维护者信息,-m记录更新的信息,和git commit比较类似。 提交成功后,我们再次查看镜像信息如下。 对于需要离线部署的应用,可以将镜像离线保存为tar文件,在新的docker环境在执行为镜像。 下面我们将刚刚提交的docker-hello:1.0.2镜像通过docker save命令持久化。 docker save -o /docker/docker-1.0.2.tar docker-hello:1.0.2-o 指定输出的文件 本来想写/docker/docker-hello-1.0.2.tar的,写错了,将错就错吧。 接着,我们需要测试在新的服务器上将该离线镜像部署。下面为了方便,将本地的镜像删掉,模拟这种场景。 先停掉容器并卸载,再删掉docker-hello相关的镜像 执行docker load命令并查看加载后的镜像列表信息 docker load -i /docker/docker-1.0.2.tar注册并登陆Docker Hub这一步我就跳过了。 在repositories中新建一个仓库如下 本地的docker-hello:1.0.2还不能直接push到dockerHub上去,因为名字不匹配,通过上图可以发现,dockerHub上创建的repository是带有我们自己账户信息的,镜像名应该为wuwanlong/docker-hello,所以这里我们要将本地的镜像名通过docker tag命令来适配。 docker tag docker-hello:1.0.2 wuwanlong/docker-hello:1.0.2执行命令后,生成了一个符合要求的新镜像wuwanlong/docker-hello:1.0.2 此时,直接使用docker push命令推镜像会被denied,需要先通过docker login输入用户名和密码先登录。
刷新dockerHub的仓库,可以看到我们刚刚上传的镜像 试了一下,通过docker search命令可能搜不到,但应该不影响拉取。 将本地的wuwanlong/docker-hello镜像删掉,执行docker pull wuwanlong/docker-hello:1.0.2,拉取成功。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |