1 概述
1.1 背景介绍
在当今软件开发领域,容器化技术正在迅速流行。容器化是一种将应用程序及其所有的依赖项封装在一个独立的环境中,以便于在不同的计算环境中进行部署和运行的技术。容器化技术能够将应用程序与底层的操作系统解耦,使得应用程序能够以一种一致、可移植和可靠的方式在不同的环境中运行。 Docker 是目前最流行的容器化平台之一,它提供了完整的容器化解决方案。Docker 使用了一种名为 Docker 镜像的轻量级模板来构建和分发容器。开发人员可以使用 Dockerfile 来定义镜像的构建过程,然后使用 Docker 镜像来创建和运行容器。Docker 提供了丰富的命令行工具和 API,使得容器的创建、管理和部署变得简单和高效。
1.2 适用对象
- 企业
- 个人开发者
- 学生
1.3 案例时间
本案例总时长预计30分钟。
1.4 案例流程
{{{width="40%" height="auto"}}} 说明: ① 用户申请并云主机; ② 在云主机的CodeArts IDE上运行项目 ③ 用户申请容器镜像服务SWR; ④ 容器化改造demo项目并上传至SWR。
1.5 资源总览
本次实验预计花费总计0元。 |资源名称| 规格| 单价(元)| 时长(分钟)| |-|-|-|-| |开发者空间——云主机 |鲲鹏通用计算增强型 kC2 | 4vCPUs | 8G | Ubuntu |0 |30| |容器镜像服务SWR| 正式版 |0 |30|
2 申请容器镜像服务SWR资源并初始化
在浏览器中输入华为云网址:https://www.huaweicloud.com/进入华为云首页。点击首页右上方的“登录”,在弹出的对话框中输入自己的用户名和密码。 
登录华为云首页后,在控制台输入“容器镜像服务SWR”点击控制台登录容器镜像服务SWR控制台。
在弹出的授权说明对话框,仔细阅读说明内容,然后单击“确认”进行授权。 
授权后进入到服务的控制台页面,区域选择北京四,然后单击页面右上角的“创建组织”。 

在弹出的“创建组织”窗口中,自定义组织名,注意要有独特性避免冲突。
创建成功。 
单击页面的“登录指令”,即可查看镜像登录指令。
3 容器化改造demo项目
3.1 前置条件
参考基于云主机的CodeArts IDE运行Java电商项目完成云主机的申请并在CodeArts IDE上运行自己的项目。改造后的项目代码可以通过https://gitcode.com/CaseDeveloper/E-Commerce-Java-Docker.git直接下载,具体改造步骤可参考下面详细步骤。
3.2 Docker环境安装
进入华为开发者空间工作台界面,点击打开云主机 > 进入桌面连接云主机。 如果还没有领取云主机进入工作台界面后点击配置云主机,选择Ubuntu操作系统。
云主机桌面右键选择“Open Terminal Here”,打开命令终端窗口。 
逐步执行以下命令,进行虚拟机上的docker安装。 更新软件包索引。
sudo apt-get update
允许APT使用HTTPS。
sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common
如果遇到下图直接按回车确认。(无此页面请忽略)
双击“取消”,按回车确认不重启。后面再遇到这两个页面都是相同处理。
添加Docker官方GPG密钥。
wget -qO - https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/docker.gpg

添加Docker的稳定版本仓库。
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
根据提示按回车继续添加。
再次更新软件包索引。
sudo apt-get update
安装Docker CE(社区版)。
sudo apt-get install -y docker-ce
验证Docker是否安装成功并运行。
sudo systemctl status docker
显示下图状态表示docker安装成功。
ctrl+c退出。
3.3 项目与运行环境整理
打开CodeArts IDE,保证项目已编译构建成功。
可在终端控制台中输入下列命令,将进程包复制到桌面,方便后续镜像制作。
cp /home/developer/Desktop/workspace/E-Commerce-Java/target/E-Commerce-Java-1.0-SNAPSHOT.jar /home/developer/Desktop/
返回桌面,打开终端输入下列命令,来测试我们可以正常启动进程包。
java -jar /home/developer/Desktop/E-Commerce-Java-1.0-SNAPSHOT.jar
显示如下表示项目包正常启动,ctrl+c退出控制台。 
3.4 Dockerfile文件编写
在云主机桌面右键打开终端,输入下面的命令。 编写服务启动程序。
vim start.sh
按i,进入编辑模式,然后将下面的代码复制到start.sh。
#!/bin/sh
echo "启动项目开始"
java -jar /E-Commerce-Java-1.0-SNAPSHOT.jar
echo "启动项目结束"
复制进去之后,按Esc,然后输入:wq,按回车进行保存。 
然后继续编写Dockerfile文件。
vim Dockerfile
按 i,进入编辑模式,将下面的代码复制到Dockerfile文件中。
FROM ubuntu:22.04
# 安装JDK 17
RUN apt-get update && \
apt-get install -y openjdk-17-jdk && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
# 添加项目包
ADD E-Commerce-Java-1.0-SNAPSHOT.jar /E-Commerce-Java-1.0-SNAPSHOT.jar
# 添加项目启动脚本
ADD start.sh /
# 镜像启动时执行项目启动脚本
CMD sh /start.sh
复制进去之后,按Esc,然后输入:wq按回车进行保存。 
3.5 制作镜像
3.5.1 配置云主机docker镜像源代理
在控制台中输入以下命令进行。
sudo vim /etc/docker/daemon.json
按 i,进入编辑模式,将下面的代码复制到daemon.json文件中。
{
"registry-mirrors":["https://hub-mirror.c.163.com","https://registry.aliyuncs.com","https://registry.docker-cn.com","https://docker.mirrors.ustc.edu.cn","https://mirror.baidubce.com","https://ccr.ccs.tencentyun.com"]
}
复制进去之后,按Esc,然后输入:wq,按回车进行保存。
然后在控制台输入以下命令,回车执行daemon文件和docker的重载。
sudo systemctl daemon-reload
sudo systemctl restart docker
3.5.2 制作镜像
在控制台中执行以下命令进行镜像制作。
sudo docker build -t e_commerce_java .
查看镜像
sudo docker images
4 在云主机上将镜像上传至SWR
登录华为云的容器镜像服务SWR首页,点击右上角的“登录指令”。
复制登录指令。 
将复制的指令替换下列命令中的“登录指令”,然后返回云主机,复制整个命令到控制台,回车,登录成功会显示“Login Succeeded”。
sudo 登录指令
执行以下命令,给本地镜像打标签版本。
docker tag [本地镜像名称:本地版本名称(忽略表示最新版本)] [镜像仓库地址]/[组织名称]/[镜像名称:版本名称](镜像信息获取请参考附录:镜像仓库信息获取)
sudo docker tag e_commerce_java swr.cn-north-4.myhuaweicloud.com/e_commerce_java/e_commerce_java:v1
执行docker push [镜像仓库地址]/[组织名称]/[镜像名称:版本名称]进行镜像推送。 (镜像信息获取请参考附录:镜像仓库信息获取)
sudo docker push swr.cn-north-4.myhuaweicloud.com/e_commerce_java/e_commerce_java:v1
成功后,可在SWR中查看到镜像存在。
至此,基于云主机的Java项目容器化改造全部完毕。
5 附录
5.1 镜像仓库地址获取
登录华为云首页,在控制台输入“容器镜像服务SWR”点击控制台登录容器镜像服务SWR控制台。
选择“北京四”,然后点击右上角的“登录命令”按钮。打开登录命令以后,点击复制按钮复制命令。
其中该命令中最后的地址:swr.cn-north-4.myhuaweicloud.com即为“镜像仓库地址”, 点击左侧的“组织管理”,该名称即为镜像“组织名称”。
“镜像名称和版本名称”为本地执行镜像标签设置时进行自定义设置的,例如e_commerce_java:v1。
Java项目容器化改造实践
6万+

被折叠的 条评论
为什么被折叠?



