Docker部署之Luckyframe服务端
2019-09-11 14:47:15
牛创老王
  • 访问次数: 2
  • 注册日期: 2019-09-11
  • 最后登录: 2019-09-11
  • 我的积分: 14

什么是Docker

说实话关于Docker是什么并太好说,下面我通过四点向你说明Docker到底是个什么东西。


  • Docker是世界领先的软件容器平台。
  • Docker使用Google公司推出的Go语言进行开发实现,基于Linux内核的cgroup,namespace,以及AUFS类的UnionFS等技术,对进程进行封装隔离,属于操作系统层面的虚拟化技术。 由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器。Docke最初实现是基于LXC。
  • Docker能够自动执行重复性任务,例如搭建和配置开发环境,从而解放了开发人员以便他们专注在真正重要的事情上:构建杰出的软件。
  • 用户可以方便地创建和使用容器,把自己的应用放入容器。容器还可以进行版本管理、复制、分享、修改,就像管理普通的代码一样。


为什么要用Docker

  • Docker的镜像提供了除内核外完整的运行时环境,确保了应用运行环境一致性,从而不会再出现“这段代码在我机器上没问题啊”这类问题;——一致的运行环境
  • 可以做到秒级、甚至毫秒级的启动时间。大大的节约了开发、测试、部署的时间。——更快速的启动时间
  • 避免公用的服务器,资源会容易受到其他用户的影响。——隔离性
  • 善于处理集中爆发的服务器使用压力;——弹性伸缩,快速扩展
  • 可以很轻易的将在一个平台上运行的应用,迁移到另一个平台上,而不用担心运行环境的变化导致应用无法正常运行的情况。——迁移方便
  • 使用Docker可以通过定制应用镜像来实现持续集成、持续交付、部署。——持续交付和部署

更多的Docker介绍大家可以参考下这篇文章: https://juejin.im/post/5b260ec26fb9a00e8e4b031a

Docker安装

docker安装请下载docker桌面版本,安装即可,请参考:

https://www.docker.com/products/docker-desktop

下面来看看如何将服务端和客户端与Docker部署集成。


  • 服务端(LuckyFrameWeb)

 现将服务端的源码导入到IDEA或者Eclipse中,这里会以IDEA来例子来进行说明。

  1. 新建Dockerfile
打开服务端项目,然后在项目根目录下新建一个Dockerfile文件,如下图所示:

  2.编辑Dockerfile内容


FROM java:8


WORKDIR /app

#拷贝文件到容器

ADD target/LuckyFrameWeb.jar /app/app.jar


EXPOSE 80


ENV JAVA_OPTS="-server -Xms1024m -Xmx1024m"

ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app/app.jar" ]

  •             FROM java:8 的意思是以java 8为基础镜像来构建我们的docker项目,因为luckyframeweb是用java开发的,所以我们就以java8为基础镜像。

                WORKDIR /app  指定docker打包之后镜像的运行目录,可以根据需求自行自定目录

               ADD target/LuckyFrameWeb.jar /app/app.jar 将当前项目build好之后的jar包 拷贝到容器指定目录下

                EXPOSE 80 将容器的80端口暴露出去,以方便和主机连接

               ENV和ENTRYPOINT 是设置运行环境和指定容器的运行入口。当我们拿到LuckyFrameWeb.jar包的时候,可以直接执行java -jar LuckyFrameWeb.jar 来启动项目,但是在容器中,已经将 LuckyFrameWeb.jar 修改成名称为app.jar了,所在在容器中以java -jar app.jar来启动项目。


 3. 构建Docker image

  在build image的时候,请确保你所有的源代码或者配置都已经修改完毕了,这个时候最重要的一点来了, 你需要重新rebuild你的项目,这样才能保证你打包出来的docker镜像集成了你最新的代码和配置。

   如果你是用的IDEA,可以执行在maven选项卡中先执行clean操作,然后再执行package操作即可


这样就能保证在target/classes目录下是最新的资源了。接下来进行构建docker镜像的操作。

执行docker镜像构建操作请确保你的dockerfile存在并且内容没有语法或者逻辑错误。

然后打开终端或者CMD窗口,进入到当前项目所在的更目录,执行以下命令:

docker build -t autotest . --rm

    -t 以“name:tag”格式命名和选择标记,其中name就是auotest,不指定tag就是latest

    . 表示当前目录下

    --rm 表示如果之前存在这个镜像则删除

当执行命令之后会得到以下输出,就证明镜像打包成功


然后 我们在终端输入 docker image ls 查看,会显示以下镜像

   

启动docker 镜像

执行以下命令:

docker run -p 80:80 -d --rm autotest:latest

 -p 80:80 指的是 将docker容器的80端口映射成主机的80端口上,这样输入主机IP可以直接访问web端

 -d 表示后台运行

 --rm 表示如果当前如果之前容器正在运行,则删除

autotest:latest   其中的autotest是镜像的名称,tag就是latest,当然这里也可以将 autotest:latest 更改为image id。


启动之后, 执行docker ps命令:

如果有类似0.0.0.0:80->80/tcp就证明你这个容器已经启动了,然后在浏览器输入http://服务器IP  查看是否打开了luckyframeweb的登录界面

如果看见了 证明你已经完成了对luckyframeweb docker容器的部署






牛创老王 最后编辑, 2019-09-11 16:34:52
沙发
2019-09-18 16:16:13
Seagull
  • 访问次数: 32
  • 注册日期: 2018-03-16
  • 最后登录: 2021-05-24
  • 我的积分: 76
这个我必须要点个赞
板凳
2020-03-03 15:35:32
stacey
  • 访问次数: 4
  • 注册日期: 2020-03-03
  • 最后登录: 2020-03-31
  • 我的积分: 16
用docker部署后,客户端如何连接呢?
#3
2020-03-31 21:01:32 回复 #2
stacey
  • 访问次数: 4
  • 注册日期: 2020-03-03
  • 最后登录: 2020-03-31
  • 我的积分: 16
原帖由 stacey 于 2020-03-03 15:35:32 发表

用docker部署后,客户端如何连接呢?

3.2-beta以上版本已修复

#4
2020-05-18 21:35:47
老王
  • 访问次数: 2
  • 注册日期: 2020-05-18
  • 最后登录: 2020-05-18
  • 我的积分: 14
可以的话push个镜像来耍耍。。感谢哈~~~
1/1