01_使用Docker将Coding上项目部署到k8s平台
01_使用Docker将Coding上项目部署到k8s平台
一、将Coding代码拉取到本地
1.1 在本地 Git 登录自己的 Coding 账号(使用SSH或者GPA公钥均可)
- 使用SSH方式登录
在本地生成SSH令牌
ssh-keygen -t rsa -C '账号绑定邮箱'
-t 指定密钥类型,默认是 rsa ,可以省略。
-C 设置注释文字,比如邮箱。
复制账户的主目录下的 .ssh 文件夹下的 xxx.pub 文件(该文件为公钥)里的内容到 Coding 的账号设置的SSH公钥内。
- Windows系统路径在
C:\Users\用户\.ssh\
下
在本地运行首次连接时的公钥认证命令:
ssh -T git@e.coding.net
- 使用GPA公钥方式登录
这里省略这种方式。
1.2 初始化一个本地 Git 仓库
在本地创建一个文件夹,然后进入该文件夹内,使用如下命令将该文件夹初始化为 Git 仓库
git init
1.3 在本仓库内,拉取远程项目
git pull git@e.coding.net:xxx.git
需要注意的是,使用SSH登录,只能使用SSH方式拉取代码,无法使用HTTP方式拉取。
二、将项目打包为jar包
使用IDEA或者命令行等方式,将项目打包为jar包,如:使用Maven的Clean、Package。
三、将jar包打包为docker镜像
注意:将jar包打包为docker镜像时,需要编写dockerfile文件简化打包过程。
dockerfile文件编写示例:
# FROM 指定使用哪个镜像作为基准
FROM [docker.m.daocloud.io/(可写)]openjdk:8u191-jdk-alpine
# 创建目录, 并设置该目录为工作目录
RUN mkdir -p /xxx
WORKDIR /xxx
# 复制文件到镜像中
COPY target/aaa-1.0.jar aaa.jar
# 设置时区
ENV TZ=Asia/Shanghai
# 设置 JAVA_OPTS 环境变量,可通过 docker run -e "JAVA_OPTS=" 进行覆盖
ENV JAVA_OPTS="-Xms300m -Xmx300m -Djava.security.egd=file:/dev/./urandom"
# 应用参数,可通过 docker run -e "ARGS=" 来设置,如 -e "ARGS=--spring.profiles.active=prod"
ENV ARGS=""
# 暴露 8080 端口
EXPOSE 8080
# 启动后端服务
CMD java ${JAVA_OPTS} -jar analyzer.jar $ARGS
使用docker进入项目下,然后执行:
docker build -t aaa:1.0 .
四、上传镜像至阿里云容器镜像仓库(ACR)
-
创建镜像仓库、命名空间,设置访问凭证(固定密码)
-
使用下述命令登录
docker login --username=<镜像仓库登录名> crpi-xxxx.cn-<个人版实例所在的地域>.personal.cr.aliyuncs.com
- 使用下述命令为镜像打标签
docker tag <镜像ID> crpi-xxxx.cn-<个人版实例所在地域>.personal.cr.aliyuncs.com/<命名空间名称>/<镜像仓库名称>:<镜像版本号>
- 使用下述命令上传镜像
docker push crpi-xxxx.cn-<个人版实例所在地域>.personal.cr.aliyuncs.com/<命名空间名称>/<镜像仓库名称>:<镜像版本号>
五、通过镜像部署到K8S上
-
创建集群。
-
在应用管理处,通过镜像创建应用
副本数量不能设置为 0,基本配置-所需资源-内存尽力设置1G以上。
-
需要创建服务(Service)
服务类型为NodePort时:
-
容器端口(targetPort)
这是 Pod 内部运行的容器监听的端口,对应 Dockerfile 里 EXPOSE 的端口。
在本项目中,Dockerfile 里暴露的是 8080,所以 targetPort: 8080。 -
服务端口(port)
这是 Service 内部的端口,其他 Pod 访问该 Service 时使用这个端口。
port 会转发流量到 targetPort,通常它们可以 相同,但不强制相同。
在本项目中,port: 8080(可以改,但建议与 targetPort 一致,避免混淆)。 -
节点端口(nodePort)
这是 Kubernetes 节点上的端口,集群外部访问 Service 时使用该端口。
这个端口是 30000-32767 之间的一个固定端口,由 Kubernetes 分配,也可以手动指定。
通过 < NodeIP >:nodePort,外部可以访问该应用。
例如,可以设定 nodePort: 30080,则外部访问 http://:30080 即可访问应用。
-