docker是基于go语言而开发的容器,和虚拟机如Oracle Vm有着异曲同工之妙,不同的是docker属于轻量级的容器,在虚拟机上创建的应用可能需要几G但在docker中可能只需要几十kb到几十M。如今,随着单体架构逐渐演变为微服务架构,通过容器的手段来管理各种各样的应用无疑是一种有效的方式。
安装前可以输入下面命令查看Linux的内核版本,3.10以上味道较佳,低于这个版本据说容易卡壳~下面的命令都是在root权限下进行的,如果不是root的话,记得命令前面加一个sudo
uname -r
安装前可以对yum进行更新
yum update
安装的话可以用centos自带的yum进行安装,-y表示不询问,直接使用默认配置进行安装
yum install -y docker
或
yum install docker-ce
如果想安装指定版本,需要先将yum源指向docker的版本库
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
ps:有些yum似乎没有提供yum-config-manager模块,这时需要先安装
yum install -y yum-utils device-mapper-persistent-data lvm2
查看docker的所有版本
yum list docker-ce --showduplicates | sort -r
查看版本
yum list docker-ce --showduplicates | sort -r
安装指定版本
yum install docker-ce-18.06.3.ce
systemctl start docker
查看版本
docker version
查看镜像,一开始应该是啥都没有,什么都还没装
docker images
查看服务
docker ps
由于SpringBoot内置了Tomcat,当然你也可以配置成jetty,我们无需要安装多余的依赖,只需要可以运行jar包的jdk即可,然后就可以把我们的Springboot项目的jar包打包成镜像了,然后跑在docker上。
首先将jar包上传到服务器,可以用xfttp,我用的是Linux的lrzsz模块进行上传的
yum install lrzsz
安装后输入rz命令,在弹出的界面中找到对应路径下的jar包然后点击上传即可
关于jdk,docker hub已经给我们安排的明明白白的,所以我们只需要在编写Dockerfile文件的时候引入即可
FROM java
VOLUME /tmp
ADD live-code-web-manage.jar code.jar
RUN bash -c 'touch /code.jar'
ENV JAVA_OPTS=""
ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /code.jar"]
其中,FROM java定义基础的jdk环境,Docker hub官方提供了java镜像,有了这个基础镜像后,Dockerfile可以通过FROM指令直接获取它的状态,即容器中java是已经安装的,接下来通过自定义的命令来运行SpringBoot应用即可。
VOLUME /tmp:创建/tmp目录并持久化到Docker数据文件夹,因为SpringBoot使用的内嵌Tomcat容器默认使用/tmp作为工作目录。
ADD live-code-web-manage.jar code.jar和RUN bash -c 'touch /code.jar’将本地应用jar包复制到镜像中,并另取了名字code.jar等同于ADD live-code-web-manage.jar /code.jar。
ENTRYPOINT:表示容器运行后默认执行的命令。
开始构建镜像,它会读取Dockfile文件,然后给镜像打标签,这里的标签就是-t后的code-v1.0,不要漏了命令最后面的.
它表示当前目录。第一次构建有点慢,因为需要配置jdk
docker build -t code-v1.0 .
打包完毕后,如下命令查看
docker images
第一次运行需要如下命令,其中-p是端口映射,镜像对外暴露的接口映射到机器中的接口,–name是镜像运行时的名字,-d是返回镜像运行后在容器中的id
查看日志
docker logs -f -t
或
docker logs -f -t --since="时间" --tail=100 code
--since :指定了输出日志开始日期,即只输出指定日期之后的日志。
-f : 查看实时日志
-t : 查看日志产生的日期
-tail=100 : 查看最后的100条日志。
code: 容器名称
关于这方面的内容比较繁琐,我直接贴一下原文的作者,我就是跟着他来的,遇到的问题也是在评论中解决的~
点击跳转
在搭建后,我也是遇到一个问题,节点之间可以互相连通,但启动服务的时候总是报错:ssh : could not resolve hostname spark-worker1/2 : Name or Service not know,一开始很纳闷,关于spark模块我都修改了,怎么会出现这个鬼东西,后来看了评论,才知道Master节点中在hadoop安装的目录下的配置文件slaves存放着其他节点的主机名,之前是spark-worker1和2修改成Slave1和Slave2后成功解决。