阿里云容器镜像服务和容器服务搭建springboot项目容器
前言
Github:https://github.com/HealerJean
1、开通阿里云容器镜像服务
1.1、创建命名空间
1.2、创建镜像仓库(这里不需要执行,因为我使用代码登录的时候就会自动创建)
创建的仓库名称(不需要创建,在下面上传代码的时候,我们根据sh命令中的信息会进行创建,当然我们也可以自行创建)
2.1、sh命令
PREFIX=registry.cn-qingdao.aliyuncs.com/duodianyouhui/com-hlj-springboot-docker
PROJECT=com-hlj-springboot-docker
tag=1
docker login --username=HealerJean registry.cn-qingdao.aliyuncs.com --password=123456789
echo "清理项目..."
mvn clean install
#cd ${PROJECT}/
echo "开始打包${PROJECT}..."
mvn package
echo "删除之前保留在电脑中的版本..."
docker images | grep registry.cn-qingdao.aliyuncs.com/duodianyouhui/com-hlj-springboot-docker | xargs docker rmi
echo "开始构建..."
docker build -t ${PREFIX}:${tag} .
echo "${PROJECT}构建成功,开始上传至阿里云"
docker push ${PREFIX}:${tag}
echo "镜像${PROJECT}构建并上传至阿里云成功"
PREFIX=registry.cn-qingdao.aliyuncs.com/duodianyouhui/dev-server
PROJECT=dev-server
MODULE=admin
#tag=1
tag=`date +%m%d%H%M`
docker login --username=HealerJean registry.cn-qingdao.aliyuncs.com --password=123456789
#123499916@qq.com
echo "清理项目..."
mvn clean install
cd ${MODULE}/
echo "开始打包${PROJECT}..."
mvn package
echo "删除之前保留在电脑中的版本..."
# 服务器上删除
docker images | grep registry.cn-qingdao.aliyuncs.com/duodianyouhui/dev-server | xargs docker rmi
echo "开始构建..."
docker build -t ${PREFIX}:${tag} .
docker -v ${PREFIX}:${tag}
echo "${PROJECT}构建成功,开始上传至阿里云"
docker push ${PREFIX}:${tag}
echo "镜像${PROJECT}构建并上传至阿里云成功 标签为:${tag} "
2.2、Dockerfile 文件(这里需要注意一下)
第一次上传From写java:8,,因为我们的镜像仓库中是空的,没有基础镜像, 表示使用 Jdk8 环境 为基础镜像,如果镜像不是本地的会从 DockerHub 进行下载,FROM java:8
MAINTAINER HealerJean
ADD target/com-hlj-springboot-docker-0.0.1-SNAPSHOT.jar app.jar
CMD ["java","-jar","/app.jar"]
2.3、执行命令
删除之前版本...
Error: No such image: registry.cn-qingdao.aliyuncs.com/duodianyouhui/com-hlj-springboot-docker:latest
开始构建...
Sending build context to Docker daemon 16.41MB
Step 1/4 : FROM java:8
---> d23bdf5b1b1b
Step 2/4 : MAINTAINER HealerJean
---> Running in e526e7154026
Removing intermediate container e526e7154026
---> 8c8985e663a9
Step 3/4 : ADD target/com-hlj-springboot-docker-0.0.1-SNAPSHOT.jar app.jar
---> ab8d3e75b4d8
Step 4/4 : CMD ["java","-jar","/app.jar"]
---> Running in 252ce7fac08b
Removing intermediate container 252ce7fac08b
---> c9b3b1f00fa9
Successfully built c9b3b1f00fa9
Successfully tagged registry.cn-qingdao.aliyuncs.com/duodianyouhui/com-hlj-springboot-docker:latest
com-hlj-springboot-docker构建成功,开始上传至阿里云
The push refers to repository [registry.cn-qingdao.aliyuncs.com/duodianyouhui/com-hlj-springboot-docker]
955c377870ab: Pushed
35c20f26d188: Layer already exists
c3fe59dd9556: Layer already exists
6ed1a81ba5b6: Layer already exists
a3483ce177ce: Layer already exists
ce6c8756685b: Layer already exists
30339f20ced0: Layer already exists
0eb22bfb707d: Layer already exists
a2ae92ffcd29: Layer already exists
latest: digest: sha256:218917c3411a807842ca66f6bb8baccd29b45746d49524611584271d3605c465 size: 2212
镜像com-hlj-springboot-docker构建并上传至阿里云成功
2.4、观察浏览器发现多出来一个镜像仓库,观察仓库的版本信息
2.5、修改Dockerfile 文件的From ,修改为基础镜像为阿里云仓库镜像,设置为标签为 1 ,这个镜像我们在阿里云上不要删除,否则执行命令的时候,会报错招不到该镜像
FROM registry.cn-qingdao.aliyuncs.com/duodianyouhui/com-hlj-springboot-docker:1
MAINTAINER HealerJean
ADD target/com-hlj-springboot-docker-0.0.1-SNAPSHOT.jar app.jar
CMD ["java","-jar","/app.jar"]
删除之前版本...
Untagged: registry.cn-qingdao.aliyuncs.com/duodianyouhui/com-hlj-springboot-docker:latest
Untagged: registry.cn-qingdao.aliyuncs.com/duodianyouhui/com-hlj-springboot-docker@sha256:4e44ea57cd18e70bce93ba8609dd5dee9721f62b02cdb34fdeacc0b2049c21ea
Deleted: sha256:8627ddcbf358330568a54d786dc27e2d6948759a2e55257620af761bec30650d
Deleted: sha256:b4c461e3c679783a8015e04b36ad00daf592c590b17ceac84597dd12b818bf9e
Deleted: sha256:3642a8cf34b64fc809ba03a381626d61e35dbced37429f8e288f42827049a220
Deleted: sha256:45d1e620ebd673688433d8dc1b14fc100a5650c702224b288d520fe8d71a7d7f
开始构建...
Sending build context to Docker daemon 16.41MB
Step 1/4 : FROM registry.cn-qingdao.aliyuncs.com/duodianyouhui/com-hlj-springboot-docker:latest
latest: Pulling from duodianyouhui/com-hlj-springboot-docker
3、观察阿里云镜像信息
3.2、修改仓库类型,不可使用:修改仓库类为为公开,否则后面容器服务不能够搭建web成功,但是这样的话,就会泄漏我们的源码镜像文件
3.2.2、修改仓库类型,建议使用:需要到docker集群进行仓库登录,之后之后就可以使用私有仓库了。安全
使用的是阿里云镜像仓库,仓库域名 应填写阿里云镜像仓库域名,如 registry.cn-hangzhou.aliyuncs.com,并使用您的阿里云用户名和仓库独立登录密码以及注册邮箱进行登录。登录成功也不会给提示
3.2.2.1、仓库密码的设置,到容器镜像服务中去
4、容器服务启动web应用尽心访问
4.1、创建应用
4.2、不勾选,检测最新,防止我们发布版本的时候,出现错误的版本(通过上面我们可以看到版本是一模一样的,都是latest,当然这个我们可以自己选择版本是最好的,这里是为了方便,最好是版本我们可以自己进行输入,第二章节会讲)
4.3、使用镜像进行创建
4.3.1、选择镜像
4.3.2、端口映射
主机端口为空,表示随机暴露一个主机的端口(暴露 HTTP/HTTPS 服务时,您可以不需要知道主机暴露的具体端口是什么,可以使用 overlay 网络或者 VPC 网络来直接访问容器的端口),容器端口为 8080。您使用 wordpress-web 服务的 8080 端口来提供 HTTP 服务,使用的协议是 TCP 协议。,但是这里我们还是最好制定一个端口吧,主机端口也是8080 ,最好不要用80端口,小心出问题吧
4.3.3、简单路由配置(配置域名)(写不写http://都可以)
1、配置阿里云提供的子域名
springboot;http://springboothttp;http://rongqi.dangqugame.cn;httprongqi.dangqugame.cn
观察有没有http;//会不会报错
阿里云提供的子域名服务
springboot;
http://springboothttp;
我们自己的域名
http://rongqi.dangqugame.cn;
httprongqi.dangqugame.cn
2、配置自己提供的域名
1、集群,找到这个集群容器
2、查看这个容器的负载均衡id
lb-m5eezyl4kqkux3
3、打开负载均衡控制台,通过这个id查看ip地址,然后域名这个ip分配过去
3、配置启动的环境
## 可写 可不写(也可以写一个我们配置文件中没有声明的端口,注意要和上面的其他端口同意) server.port=8080
spring.profiles.active=dev
4.3.4、创建成功
1、观察该应用所有域名(可以观察到有我们自己设置的,也有阿里云给我们提供的)
2、重新配置(建议使用yml配置文件配置,不建议瞎用下面的进行配置)
1、 服务->变更配置
5、更新版本(下面是标准发布,会将服务停止,建议看下一篇蓝绿发布进行更新)
1、如果所有的使用现在的tag:1版本,则每次从本地发布到阿里云镜像文件之后,点击重新部署即可自动完成发布新版本,但是回退版本是不可能的事情了,
2、如果想每次的旧版本不删除,则我们在打包命令的时候,taq就要发生变化,tag变成日期的格式
tag=1
#tag=`date +%m%d%H%M`
2、容器服务中->应用->变更配置,这个时候出来一个配置文件,我们修改后面的版本即可
image: 'registry-vpc.cn-qingdao.aliyuncs.com/duodianyouhui/duodian-youhui-server:08224522'
duodian-youhui-server:
restart: always
ports:
- '8080:8080/tcp'
environment:
- LANG=C.UTF-8
- JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
- server.port=8080
- spring.profiles.active=dev
memswap_limit: 0
labels:
aliyun.scale: '1'
aliyun.routing.port_8080: test.dangqugame.cn;test
shm_size: 0
image: 'registry-vpc.cn-qingdao.aliyuncs.com/duodianyouhui/duodian-youhui-server:08224522'
memswap_reservation: 0
kernel_memory: 0
mem_limit: 0
通过编排模板创建,当我们使用这种容器多了之后,发现上面填表格清单并不好用,建议使用下面的这种方式
2、复制之前点击变更配置的时候,出现的yml文件内容
1、创建编排模板
2、复制之前
server-dev:
restart: always
ports:
- '8081:8081/tcp'
environment:
- LANG=C.UTF-8
- JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
- spring.profiles.active=dev
- server.port=8081
memswap_limit: 0
labels:
aliyun.scale: '1'
aliyun.routing.port_8081: serverdev
shm_size: 0
image: 'registry-vpc.cn-qingdao.aliyuncs.com/duodianyouhui/dev-server:08241834'
memswap_reservation: 0
kernel_memory: 0
mem_limit: 0
2.1、复制-可以直接 创建编排(未删减版)
2.1、复制进入-右面点击编辑,可以自己看看修改下内容,点击保存(这样就会把系统提供的默认的删除)
server-dev:
image: 'registry-vpc.cn-qingdao.aliyuncs.com/duodianyouhui/dev-server:08241834'
ports:
- '8081:8081/tcp'
restart: always
environment:
- LANG=C.UTF-8
- JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
- spring.profiles.active=dev
- server.port=8081
labels:
aliyun.scale: '1'
aliyun.routing.port_8081: serverdev
3、根据模板创建应用
3.1、创建应用
3.2、现在我们需要的模板
3.3、模板里面直接改或者编辑即可,完成该项目
应用版本:12111735-12121502 上次的版本和本次的版本
应用描述: 8082-12121502 端口号和本次的版本
duodian-node2-8082:
image: 'registry-vpc.cn-qingdao.aliyuncs.com/duodianyouhui/dev-server:12121502'
ports:
- '8082:8082/tcp'
restart: always
environment:
- LANG=C.UTF-8
- JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
- spring.profiles.active=prod
- server.port=8082
- 'constraint:aliyun.node_index==2'
labels:
aliyun.scale: '1'
aliyun.routing.port_8082: 'http://server.duoquapp.net;server.dangqugame.cn;duodian;server.z.dangdianyouhui.cn;server.z.dangquyouhui.cn;'