容器化技术 —— 自定义镜像并发布到公服

为了从根本上解决开发和运维环境不一致的问题。也就是说,在安装时,把原始环境一模一样地复制过来,开发人员利用 Docker 可以消除协作编码时“在我的机器上可正常工作”的问题。开发在打包应用时,将应用所需要的文件打包成一个镜像文件,将镜像运行在docker中。从而达到一次镜像,处处运行。这也是 Docker 官方的口号:Build once,Run anywhere.

一、准备阶段

1、环境准备

准备一台已经装好 Docker 的服务器,安装教程
CentOS 7.8
Docker 24.0.6

2、docker 仓库准备

docker hub 是docker最大的公有仓库,没有账号的话在 docker hub 上注册一个账号,为我们后续发布镜像做准备。

在 docker hub 上创建仓库,名字任意,一个用来保存前端的 react 镜像,一个用来保存后端的 SpringBoot 镜像。
在这里插入图片描述

3、项目准备

本文主要内容是教学如何部署项目,所以示例项目使用最简单的不作任何开发的初始项目。

准备一个前端项目和后端项目
以 React 作为前端,Java 作为后端

3.1 前端项目

由于不做开发,就直接在服务器上创建了

# 在服务器上安装 npm
yum install -y npm
# 安装 React 脚手架
npm install -g create-react-app
# 创建项目
create-react-app my-react-app
# 运行项目确保正常
cd my-react-app
npm start

# 打包,目录下生成 build 文件夹
npm run build

3.2 后端项目

随便创建一个最简单的 SpringBoot 项目,写一个 HelloWorld 接口,测试接口是否可用
在这里插入图片描述
测试通过后,项目打 jar 包上传到服务器。

至此,项目准备阶段结束,准备开始容器化改造

二、容器化改造

前端

  1. 前端项目的部署一般会用到 Nginx,所以我们需要准备一下 Nginx 的配置文件,当然用默认配置也是可以的
# 创建并编辑 配置文件
vim default.conf


## 内容
server {
  # 监听 80 端口
  listen 80;
  server_name _;
  
  location / {
    # 首页位置
    root /usr/share/nginx/html;
    index index.html index.htm;
  }
  
  # 异常页
  error_page 500 502 503 504 /50x.html;
  location = /50x.html {
    root /usr/share/nginx/html;
  }
}

## 输入完成
## 键盘 esc 键后输入 :wq 保存并退出 vim 编辑器
  1. 准备好 build 包和 Nginx 配置文件之后就要开始写 Dockerfile 了
# 创建并编辑 Dockerfile 
## 注意!!!文件名必须叫 Dockerfile
vim Dockerfile

## 内容

# 基于 nginx 镜像构建
FROM nginx
# 拷贝 宿主机当前目录下的 build 文件夹下的内容到 容器中的 /usr/share/nginx/html/ 目录下
## 容器内部的路径主要看 Nginx 配置文件的路径,如果没有特别指定,/usr/share/nginx/html/ 为默认路径
COPY build/ /usr/share/nginx/html/
# 拷贝我们自己写的配置文件,到容器中的 Nginx 默认配置存放路径,并且会覆盖原文件
COPY default.conf /etc/nginx/conf.d/default.conf

## 保存并退出 vim 编辑器

到这里我们就完成前端项目的容器化改造了。
3. 构建项目镜像,并且运行容器

# 构建镜像
## my-react --- 镜像名称
## 语句末尾的点 " . " 一定要加!!!表示使用当前路径下的 Dockerfile 文件构建镜像
docker build -t my-react .

# 构建成功后可以查看一下镜像
docker images

# 运行容器
## -d 表示后台运行
## -p 3000:80 表示端口映射,3000为宿主机的端口,80是容器的端口(nginx 默认 80)
## --name myreact  指定容器的名字,不指定也可以
docker run -d -p 3000:80 --name myreact my-react

# 查看运行状态
docker ps

如果容器运行成功的话,就可以通过 ip:3000 访问到 React 的默认首页,那么前端项目的部署也就完成了。
在这里插入图片描述
4. 现在我们就可以进行打包发布了

# 第一次发布需要登录一下 docker hub
## 输入指令后 按提示输入账号密码登录
docker login

# 为镜像打 tag 标签
## my-react --- 本地镜像
## lavaclone/react:1.0   docker hub 上创建的仓库名字,再加上版本号
docker tag my-react lavaclone/react:1.0

# 推送到仓库
docker push lavaclone/react:1.0

现在就完成了一个前端项目的创建打包部署发布全流程了,只需要把仓库给别人,就可以直接pull镜像后访问了。
在这里插入图片描述

后端

  1. 在jar包所在的路径下直接开始编写 Dockerfile 文件
vim Dockerfile

# 基于 jdk8 的环境,记得找符合自己项目环境的镜像,
FROM openjdk:8
# 拷贝 jar 包到容器内部
COPY demo.jar /app.jar
# 项目运行在 8080 端口,所以对外暴露 8080 端口
EXPOSE 8080
# 运行jar包
CMD ["java","-jar","/app.jar"]


## 保存并退出
  1. 构建并运行
# 同样的,不要忘记最后的 “ . ”
docker build -t spring-hello .

# 运行
docker run -d -p 8080:8080 spring-hello

如果运行成功的话,直接访问 ip:8080/hello,就可以看到我们自己写的 Hello World 接口。

  1. 剩下发布上传的步骤和前端一样,不再重复教学,参考前文。
  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值