使用Docker 安装jdk8

1,205 阅读3分钟

拿到新的服务器后,第一步就是先搞定环境了,这里是安装docker环境后,开始安装服务器的软件。

安装jdk8:

1. 拉取jdk镜像

这里使用的是我原来打包的jdk镜像,上传到服务器的/usr/目录下了
在这里插入图片描述

2. 导入镜像

使用命令:docker load -i 镜像绝对路径

这里直接使用:docker load -i /usr/centos_jdk8.tar
在这里插入图片描述
可以看到,成功导入docker镜像了。

接着改下jdk镜像的名称,也就是从新打个tag:

使用命令:docker tag <原镜像IMAGE ID> <新镜像名称>:<tag>
在这里插入图片描述
运行jdk镜像:

docker run -i -t -v /usr/soft/java/:/mnt/software 镜像名称:版本 /bin/bash

这里将容器的jdk安装路径/jdk1.8.0_121/挂载到宿主机的/usr/soft/java/jdk1.8.0_121,这样访问宿主机的该文件夹,就可以看到jdk所需要的相关文件。

这里使用的是交互模式启动的镜像,启动成功后直接进入容器内部。
在这里插入图片描述
可以看到镜像运行成功了,并且自动进入容器内部了。可对比命令行root@后面的主机名称,已经改变了。

刚开始试了下这样运行镜像,直接将镜像内部的jdk文件夹映射到宿主机上:

docker run -i -t -v /usr/soft/java/jdk1.8.0_121:/jdk1.8.0_121/ 镜像名称:版本 /bin/bash

这里将容器的jdk安装路径/jdk1.8.0_121/挂载到宿主机的/usr/soft/java/jdk1.8.0_121

命令正常执行了,镜像也正常启动了。按照docker容器挂载目录的方式,这样也确实没毛病,这样访问宿主机的/usr/soft/java/jdk1.8.0_121文件夹,就可以看到镜像运行时,/jdk1.8.0_121/文件夹下产生的文件了。

但是在我启动后,进入容器内部,发现java -version命令不好使了,提示找不到java命令。

这就很神奇了哈。。。。。第一次运行就正常,这次只不多改了下挂载目录,就崩了????

脑子瓦特了半天才反应过来,容器启动时挂载目录的作用是:将容器运行期间对应文件夹产生的新文件,放于挂载目录下。这里强调下新文件,意思就是,如果宿主机在运行期间产生的新文件,通过挂载目录,宿主机可以直接访问。这点很容易理解。

还有一种情况就是,启动镜像时,镜像内部的某个文件夹如果不为空,也就是上面命令中使用的/jdk1.8.0_121/文件夹不为空,但是恰巧又被挂载到宿主机上某个文件夹了,恰好该文件夹是空的,那么镜像运行后,镜像内部的文件夹也会被置空。

这就是为什么我用了上面命令后,进入容器内部,发现java命令不好使了的原因。因为/jdk1.8.0_121/是空的,java命令怎么可能会正常。

退出容器内部,使用命令:ctrl+D 或者exit,退出后,容器会自动停止,再次启动,可使用docker ps -a 查看镜像运行痕迹,使用docker start 容器ID重启容器。