背景

上周看脉脉的时候看到下面这个帖子,领导让搞项目容器化,但是楼主没搞过,对新东西有畏惧感,怂了,然后把机会白白送给其他同事了。

想来我也是差不多这样的,刚到阿里工作的时候,有个好的项目机会来了,领导让我做,我总觉得需要时间准备,等准备好了再上。然后等着等着,项目就给别人做了,别人就成长了,而我在畏首畏尾中止步不前。现在领导也是时不时拿这件事来调侃我。。。

所以嘛,咱的主要目的是学习成长,这周按脉脉帖子上的内容,学一下容器化,实际操作一把。

docker容器化

1.什么是docker

做Java开发的同学应该都知道Java代码要运行在服务器上,都是先打包为jar包,再通过java -jar xxx.jar命令运行,将jar文件在虚拟机上运行。虚拟机就是通过虚拟出一套硬件后,在上面运行一个完整的操作系统的,如阿里云ECS服务器。而docker容器不需要虚拟硬件,而是将容器内的进程直接运行在宿主机的内核,因此容器比传统虚拟机更为轻便。下图是传统虚拟化和Docker容器的对比:

2.docker创建镜像

安装docker步骤可自行搜索,安装完成后我们用京豆脚本的代码做示例

这一步将京豆脚本的jar包构建为镜像,项目目录下创建Dockerfile文件,文件内容如下,注释已经说明每一行的作用

#使用jdk8作为基础镜像
FROM openjdk:8
#指定作者
MAINTAINER dnboy
#暴漏容器的8080端口
EXPOSE 8080
#将复制指定的docker-demo-0.0.1-SNAPSHOT.jar为容器中的job.jar,相当于拷贝到容器中取了个别名
ADD ./target/application.jar /application.jar
#相当于在容器中用cmd命令执行jar包  指定外部配置文件
ENTRYPOINT ["java","-jar","/application.jar"]

然后命令行执行如下命令:

docker build -t jdou

这一步将jdk和jar包都构建为docker镜像,镜像名称为jdou

3.上传镜像

上一步的镜像可以在本地docker里运行,为了让镜像公开,所有人都可以使用,需要将镜像上传到docker hub上,具体步骤是
(1)给镜像打标签

命令行执行

# 修改tag,示例:docker tag ae4ed59c dnboy985/jdou:1.0
docker tag IMAGEID(镜像ID) 仓库:标签

# 给镜像打tag,示例:docker tag dnboy985/jdou:1.0 dnboy985/jdou:v1.0
docker tag <上一步的tag> <hub-user>/<repo-name>:<tag>  # tag不指定默认为latest

(2)上传镜像

# 登录docker hub账号,无账号可先自行注册
docker login

# push tag,示例:docker push dnboy985/jdou:v1.0
docker push <hub-user>/<repo-name>:<tag>

上传完成后可在docker hub官网上查到镜像,如图是我刚上传完的镜像

所有代码已提交到Github上,有兴趣了解的同学可公众号内回复 京豆 查看源代码,下面是脚本的运行操作步骤

操作步骤

1.安装docker

Windows系统上安装docker步骤:Windows安装docker步骤

docker官网下载地址:Docker Windows下载

按照上面的教程先在电脑上安装好docker

2.拉取镜像

这一步是将京豆脚本镜像拉取到本地电脑,步骤:

  • Window上打开命令行的方式是:按WIN + R 键,在运行窗口里输入cmd 回车之后弹出,Mac上直接打开终端就行
  • 在命令行窗口输入docker pull dnboy985/jdou:v1.0,大概等待10分钟左右就下载完成了

博主这里用的Mac,下载完成后,打开docker,在images选项里找到刚下载的镜像,名称为:dnboy985/jdou

3.运行镜像

在命令行窗口里运行镜像,需要先获取自己京东账号登录后的pt_pinpt_key数据,获取方式见我之前的文章:[[奶奶看了都会]教你用脚本薅京东签到羊毛](https://blog.csdn.net/qq_3662...)

然后命令行里输入:(注意下面需要替换pt_pin和pt_key)

docker run -d -p 8080:8080 --env PT_PIN=替换为你的pt_pin --env PT_KEY=替换为你的pt_key --name jdou dnboy985/jdou:v1.0

执行之后可在docker的Containers页面查看是否有名称为jdou的容器在运行

4.测试效果

上一步执行完成后,电脑上已经有定时任务在跑了,为了测试京豆脚本是否生效,可以测试一下效果

具体步骤是:

  • 浏览器上打开:http://localhost:8080/doc.html#/default/jd-service/getJDUsingGET,如页面无法打开,可文章底部留言反馈
  • 页面打开后,选到 调试 页面,在参数值里分别测试输入123后,再点击发送按钮,查看是否有信息返回,如有则项目运行成功!!!

最后给一下完整代码获取方式:关注公众号卷福同学,公众号内回复京豆


卷福同学
28 声望5 粉丝

全网同名,阿里巴巴Java资深开发,终身学习者,持续文章撰写者,福报厂修福报中