阿里云serverless部署docker镜像

2 篇文章 0 订阅
1 篇文章 0 订阅

一:Docker
本质上就是容器
内容:我们可以在docker上挂载多个container容器,而这个容器可以放不同的内容:比如说springboot项目,前端项目,数据库向mysql,sqlserver,oracle,之前刚刚接触docker就是因为oracle安装一直有问题,使用docker去安装数据库可以通过几行命令就可以搞定,轻松快捷。
环境:docker可以在mac,linux,windows环境运行,受环境的影响较小。也就是说如果只有一套部署环境下,docker可以部署多个不同项目,且这些项目都是属于独立的,不受其他项目的影响,每个容器之间属于不关联的,不用担心一些软件端口冲突,这些容器共享一个操作系统。
优点:
1.迁移方便,如果需要将一个项目部署到另外一台环境,只需要将项目镜像save成一个tar包,直接在tar包放到一个有docker环境的系统中,docker环境也是很好搭建的,很快。在这docker环境中加载这个tar包即可,适合一些交付的项目。
2.版本迭代方便,如果需要更新版本,可将之间的容器停掉即可,生成一个新的版本的镜像再运行即可,如果需要回退版本的话,可以将新上的版本的容器停掉,运行上一个版本的容器即可。
3.一般来说,镜像占的内存并不多,主要是看镜像运行起来的项目占用的内存情况,就项目启动和容器来说,容器启动的时间是比较快的。

演示将springboot项目打包成镜像的过程
1.将项目打包成镜像
docker build -f /home/docker-TarPackage/test/Dockerfile -t test:0.0.2 .
解释:
docker build -f Dockerfile的文件位置 镜像名:版本号 .

2.查看镜像
docker images

3.利用镜像生成一个容器,并指定其对外端口号
docker run -p 8082:8080 test:0.0.1
解释
docker run -p 对外暴露端口:项目内部端口 镜像名:版本号
这个时候项目其实已经启动成功了,但是如果命令操作页面,容器会自动关闭
4.查看生成的容器
docker ps -a
5.启动对应的容器
docker start d2c1107efdc1
docker start 容器id
6.查看容器日志
docker logs d2c
docker logs 容器id
7.删除容器和镜像
docker rm 容器id
⚠️删除容器之前需要将容器stop,启动的容器是删除不了的
docker stop 容器id
docker rmi 镜像id
⚠️删除镜像之前需要删除对应的容器
8.如果需要将镜像拉出来去另外的docker环境中去运行需要将现有docker环境的image打成tar包即可
docker save test > /home/docker-TarPackage/test.tar
解释:docker save 镜像名 > 生成tar的地址/需要生成tar包的名称
9.将tar上传到另外的服务器上加载
docker load< /home/docker-TarPackage/test.tar
docker load< 生成tar的地址/tar包的名称
剩下的就是生成容器和启动的过程了,和上面描述的过程一样
Dockerfile 内容讲解

FROM java:8
指定基础镜像,其实就是一个jdk8的环境,这里的jdk其实也是一个基础镜像

VOLUME /tmp
这个是指定一个挂载目录,创建一个可以从本地主机或其他容器挂载的挂载点,一般用来存放数据库和需要保持的数据等

ADD gem-fc-0.0.1-SNAPSHOT.jar app.jar
类似于copy,gem-fc-0.0.1-SNAPSHOT.jar是我们项目打成的jar包,名字要和项目jar保持一致,app.jar是在容器中的名字。功能就是把项目jar复制到容器当中

RUN bash -c ‘touch /app.jar’
这个就是启动容器中生成的app.jar的命令

EXPOSE 8080
指定容器要打开的端口,告诉 Docker 服务端容器暴露的端口号,供互联系统使用。在启动容器时需要通过 -P,Docker 主机会自动分配一个端口转发到指定的端口,其实就是项目配置文件的端口号

ENTRYPOINT [“java”,"-Djava.security.egd=file:/dev/AES.java./urandom","-jar","/app.jar"]
ENTRYPOINT 执行项目 app.jar。为了缩短 Tomcat 启动时间,添加一个系统属性指向 “/dev/urandom” 作为 Entropy Source

总结:
VOLUME 指定了临时文件目录为/tmp。其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp。改步骤是可选的,如果涉及到文件系统的应用就很有必要了。/tmp目录用来持久化到 Docker 数据文件夹,因为 Spring Boot 使用的内嵌 Tomcat 容器默认使用/tmp作为工作目录
项目的 jar 文件作为 “app.jar” 添加到容器的
ENTRYPOINT 执行项目 app.jar。为了缩短 Tomcat 启动时间,添加一个系统属性指向 “/dev/urandom” 作为 Entropy Source

二.阿里云Serverless
sae我之前测试的是基于docker镜像部署的,实质上他是支持镜像,war包和jar包部署
我觉得sae部署好处在于减少运维压力,只需要把镜像放上去直接部署就行,不需要关注服务器方面的事情,因为那些sae已经做过了,还有就是减少成本人力,sae有的是按照项目启动的时间收费的。

阿里云serverless镜像部署前提是需要把服务器上打包的镜像上传到阿里云
1.登陆阿里云
2.找到容器镜像服务并创建命名空间

3. 随后创建镜像仓库

4.使用的代码源是本地仓库的

5.登陆阿里云docker
sudo docker login --username=justin@1703206802674361 registry.cn-shanghai.aliyuncs.com
密码需要在访问凭证中设置固定密码
演示
6.先查看docker中有哪些镜像
docker images

7.给镜像设置标签
docker tag f03ec99cd2a2 registry.cn-shanghai.aliyuncs.com/gemdev/test:v0.0.1
解释
Docker tag 镜像id 仓库地址/命名空间/仓库名称 :版本号

8.将镜像推送到阿里云仓库
docker push registry.cn-shanghai.aliyuncs.com/gemdev/test:v0.0.1
解释
Docker push 仓库地址/命名空间/仓库名称 :版本号

9.推送成功,查看仓库的镜像版本

10.上传完以后可以把本地镜像删除,拉取阿里云镜像测试一下

后面就是进行serverless部署镜像了

1.登陆Serverless应用引擎SAE

2.创建应用

需要提前配置好安全组
阿里云会要求客户设置安全组,如果不设置,阿里云会指定默认的安全组。那么,这个安全组是什么呢?顾名思义,就是为了服务器安全设置的。安全组其实就是一个虚拟的防火墙,可以让用户从端口、IP的维度来筛选对应服务器的访问者,从而形成一个云上的安全域。

3.应用配置部署
这里可以选择部署的方式和应用的类型
部署方式分为docker镜像,war包部署,jar包部署
应用类型分为java,php,还有其他
如果选择镜像部署
镜像部署的来源也分多种:
1)自己私有的阿里云镜像
这个就是由本地服务器上传到阿里云镜像库中的镜像
2)Demo镜像
这个是阿里云为了给初学者测试的一些demo镜像
3)公有镜像
这个是存在其他的镜像仓库的镜像,要保证公网可以拉取到这些镜像即可
4)其他阿里云帐号私有镜像

选择我的阿里云镜像,然后选择对应的仓库命名空间和仓库名,然后在这个仓库中选择想要部署的镜像版本即可
1.启动命令设置
这个就等同于生成镜像中的DockerFile里面的ENTRYPOINT属性

也就是容器的启动命令
由于Docker运行时仅支持一条ENTRYPOINT命令,所以SAE控制台中设置的启动命令,将会覆盖制作应用容器Docker镜像时Dockerfile中所设置的ENTRYPOINT
如果不属于这些命令,建议不要改
2.环境变量设置
这个是为了设置容器环境的一些环境变量,可以去自定义一些变量名称和变量值,也可以提前配好

配置完成以后点击完成,应用会重启,重启完以后环境变量就会生效
3.Host绑定设置
这个是使用域名绑定ip,部署完成以后通过域名访问,这个我没试过
4.应用健康检查设置
分http请求 tcp请求 执行命令检查
HTTP请求检查:通过向实例发送HTTP请求检查健康情况。通过HTTP访问获得的HTTP状态码位于[200,399]之间,则认为访问成功,实例健康;否则认为失败,实例不健康。

TCP端口检查:通过向实例发送一个TCP Socket来检查实例的健康情况。如果可以建立连接,则认为实例健康;如果连接失败,则认为不健康。

执行命令检查:通过在实例中执行探针检测命令来检查实例的健康情况。如果执行命令后返回的状态码为0,则认为执行成功,实例健康;如果不为0,则认为执行失败,实例不健康

后面这些阿里云文档上都有,就不多解释了

4.确实规格-确认创建
5.可以查看变更记录查看应用是否部署完成

这样就属于部署完成
6.可以去日志管理中查看实时日志

查看是否有报错情况,如果没有,就进行下一步的发布了
7.去应用的基本信息中查看
可以选择访问地址,我之前试过私网访问,一直访问不了,后来选择了公网访问的方式
8.添加公网slb访问

9.选择tcp协议,填写slb端口和容器端口
slb端口可以自定义,容器端口要和容器中项目端口号保持一直,不然会导致,发布成功以后,访问不了其地址。
10.发布完成以后,查看变更记录,如果变更完成以后,应用详情页面会生成一个公网的访问地址+端口号,访问地址+端口号+方法地址即可

11.访问
12。删除应用需要先将应用停掉,然后才能删除应用。
缺点:部署在阿里云sae上有时候会和一些端口有冲突,就像之前的邮箱服务,修改端口号也登陆不了网易云邮箱。这个还需进一步研究,毕竟阿里云sae和linux服务器有些配置可能不一样。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值