小编最近在实习公司帮忙做项目部署,对方要求需要把jar包再次进行docker镜像封装,小编呢也没有了解过docker镜像,于是就去百度了一波,发现了这个Docker中文文档,感觉还不错,大家不会的可以来看看,很详细的介绍了有关Docker的东西,不多说,直接做。
系统:Ubuntu16.04
要求:apt、wget、ssh、docker、linux版的JDK以及交互界面(xshell、xftp)
备注:有的文档说要在Ubuntu上用yum安装软件,那是不用的,因为Ubuntu上有一个很好用的安装软件的应用:apt
首先,我们需要对系统进行更新:
sudo apt-get update
然后确保我们安装了wget:
which wget
如果没有安装:
sudo apt-get update $ sudo apt-get install wget
安装wget之后,进行docker安装:
wget -qO- https://get.docker.com/ | sh
我们可以先运行一个例子:
sudo docker run hello-world
然后运行
sudo docker images
如果大家不想运行docker命令时一直加sudo,docker也提供了权限进行扩充:
sudo usermod -aG docker <你的Ubuntu名称>
这样就不用加sudo了,可以直接运行docker命令。
我们就可以看到相关的镜像文件了。
以上是安装docker的步骤,接下来进行docker镜像打包jar。
各位都是高手,如何对java项目进行打包就不用多说了,相信大家都会,不会的请自行百度。
首先我们进入到一个目录中,我是Documents目录,大家随便,随后创建一个文件夹
mkdir ming
里面有这样的文件:Dockerfile和你的jar包。
Dockerfile中有这样几个东西:
FROM <其他依赖>
MAINTAINER username <用户名>
这里是操作命令,大家按照自己的来进行编写,不会的参考文档
CMD /usr/sbin/sshd -D #这是cmd命令,最后运行该命令
我们把Dockerfile写好后,连同jar包和JDK一起放到创建的文件夹ming中,其他两个提前准备的就用到了,为什么要用xshell和xftp呢,就是为了我们可以方便的上传下载文档。
文件齐全后,开始进行创建docker镜像:
创建自己的docker镜像:
切换到Dockerfile文件所在目录,执行下面脚本(注意最后有个点)
docker build -t limq:2 .
启动容器:
docker run -it -p 8080:8080 limq:2 /bin/bash
在容器中进行以下命令:
cd home
mkdir soft
cd soft
mkdir tools
有什么用稍后再说
随后退出容器并提交改变后进行保存:
exit
docker commit 容器ID 镜像名:标签
查看容器ID(docker ps -a)
查看镜像名:标签(docker images)
我们复制JDK到容器中:
我们需要对建立好的镜像进行java配置,就用到了刚开始的两个文件夹
docker cp jdk-8u192-linux-x64.tar.gz 容器ID:/home/soft/tools
启动容器:
docker start容器ID
docker exec -it 容器ID bash
安装java:
tar -zxvf jdk-8u192-linux-x64.tar.gz -C /home/soft/
修改环境变量:
mkdir /usr/lib/jvm
mv jdk1.8.0_192 /usr/lib/jvm
vi ~/.bashrc
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_192
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
让环境立刻生效:
source ~/.bashrc
查看java是否装好:
java -version
退出容器并进行修改:
exit
docker commit 容器ID 镜像名:标签
导出镜像文件:
docker save -o 本地存放路径/**.tar 镜像名:标签
至此呢,docker打包jar镜像已经完成了,大家可以将打包好的镜像文件下载下来放到本地。
另附上一些docker命令:
停止所有容器运行:docker stop $(docker ps -a -q)
删除所有容器:docker rm $(docker ps -a -q)
删除指定镜像:docker rmi <image id>
删除所有的镜像:docker rmi $(docker images -q)