编程随笔 编程随笔
  • 前端
  • 后端
  • 嵌入式
  • 星球项目
  • 开源项目
  • 海康AGV
  • 四向车
  • 工具类
  • 项目仓库

    • 部署仓库 (opens new window)
    • 代码仓库 (opens new window)
  • vuepress插件

    • 自动生成导航栏与侧边栏 (opens new window)
    • 评论系统 (opens new window)
    • 全文搜索 (opens new window)
    • 选项卡 (opens new window)
    • 自动生成sitemap (opens new window)
  • 自主开发插件

    • 批量操作frontmatter (opens new window)
    • 链接美化 (opens new window)
    • 折叠代码块 (opens new window)
    • 复制代码块 (opens new window)

liyao52033

走运时,要想到倒霉,不要得意得过了头;倒霉时,要想到走运,不必垂头丧气。心态始终保持平衡,情绪始终保持稳定,此亦长寿之道
  • 前端
  • 后端
  • 嵌入式
  • 星球项目
  • 开源项目
  • 海康AGV
  • 四向车
  • 工具类
  • 项目仓库

    • 部署仓库 (opens new window)
    • 代码仓库 (opens new window)
  • vuepress插件

    • 自动生成导航栏与侧边栏 (opens new window)
    • 评论系统 (opens new window)
    • 全文搜索 (opens new window)
    • 选项卡 (opens new window)
    • 自动生成sitemap (opens new window)
  • 自主开发插件

    • 批量操作frontmatter (opens new window)
    • 链接美化 (opens new window)
    • 折叠代码块 (opens new window)
    • 复制代码块 (opens new window)
  • vuepress1.x

    • vuepress搭建网站
    • 引入第三方组件库
    • 优化改进
    • 站点信息模块
    • 增加登录页面
    • 添加登录并启用全局前置守卫
  • kiftd使用docker部署
    • 1 在/usr/local/kiftd下新建文件夹,后续文件都在此目录
    • 2 上传kiftd文件到/usr/local/kiftd下
    • 3 新建Dockerfile如下
    • 4 新建kiftd-start.sh如下
  • 开源项目
华总
2023-11-24
0
0
目录

kiftd使用docker部署原创

# 1 在/usr/local/kiftd下新建文件夹,后续文件都在此目录

# 2 上传kiftd (opens new window)文件到/usr/local/kiftd下

# 3 新建Dockerfile如下

提示

Dockerfile必须跟文件同一目录,如果只有一个jar包,则跟jar包同一个目录;

# 使用jdk8镜像
FROM openjdk:8-jre-alpine

# 设置工作目录
WORKDIR /app

# 设置时区,否则跟北京时间有8个小时时间差
RUN rm -f /etc/localtime \
&& ln -sv /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
&& echo "Asia/Shanghai" > /etc/timezone

# 将kiftd-1.1.1-release文件夹拷贝到工作目录下,最后一个/表示是目录
# 如果只有一个jar包,则为COPY kiftd.jar /app/kiftd.jar
COPY kiftd-1.1.1-release/ /app/kiftd-1.1.1-release/

# 暴露端口
EXPOSE 8080

# 启动程序,如果只有一个jar包,则为 "/app/kiftd.jar"
CMD ["java","-jar","/app/kiftd-1.1.1-release/kiftd.jar","-start"]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

# WORKDIR /app跟VOLUME /tmp区别

WORKDIR 和 VOLUME 是 Dockerfile 中两个不同的指令,它们分别用于不同的目的。

  1. WORKDIR:
    • WORKDIR /app 设置容器内部的工作目录为 /app。这意味着在之后的命令中,相对路径将以 /app 为基础。这对于在容器中运行命令或设置路径时非常有用,可以简化命令并提高可读性。
    • 例如,如果有一个命令是 COPY ./source /app/destination,那么它会将主机上的 source 目录中的文件复制到容器内的 /app/destination 目录中。
    • WORKDIR 不会在主机上创建任何目录,它只是在容器内部切换当前工作目录。
  2. VOLUME /tmp:
    • VOLUME /tmp 声明在容器中创建一个挂载点(volume),并将其关联到主机上的 /tmp 目录。这个挂载点在容器中是一个持久化的存储位置,允许容器之间共享数据,也可以在容器停止后保留数据。
    • 这通常用于存储容器中的临时文件、日志文件或其他需要在容器之间或容器启动停止周期中保留的数据。

总体而言,WORKDIR 用于设置容器内的当前工作目录,而 VOLUME 用于声明一个挂载点,将容器内的某个目录挂载到主机上,以实现数据的持久性和共享。

# COPY 与ADD区别

在大多数情况下,COPY 和 ADD 在 Dockerfile 中可以互相替代,但它们有一些不同之处:

  1. COPY:
    • 主要用于将本地文件复制到容器中。
    • COPY 只能复制本地文件或目录到容器中,不支持 URL。
    • 语法:COPY <src>... <dest>。
  2. ADD:
    • 除了复制本地文件,还支持从 URL 复制文件、解压缩 tar 文件等额外功能。
    • ADD 指令会自动解压缩 tar 文件,因此如果要复制的是一个本地 tar 文件,可以使用 ADD。
    • 语法:ADD <src>... <dest>。

在你的例子中,如果 ./kiftd-1.1.1-release 是一个本地目录,而且不需要额外的 ADD 功能(如自动解压缩 tar 文件),那么可以将 COPY 换成 ADD,语法基本相同:

ADD ./kiftd-1.1.1-release /app/kiftd-1.1.1-release/
1

但请注意,一般来说,推荐使用 COPY,因为它更明确,更容易理解,并且不引入不必要的复杂性。只有在需要 ADD 的额外功能时才使用它。

# 4 新建kiftd-start.sh如下

# 创建的docker部署根目录
SOURCE_PATH=/usr/local/kiftd

# 镜像名称
SERVER_NAME=kiftd/docker
# 版本
TAG=latest
# 端口号
SERVER_PORT=8080

CID=$(docker ps | grep "$SERVER_NAME" | awk '{print $1}')
IID=$(docker images | grep "$SERVER_NAME" | awk '{print $3}')
if [ -n "$CID" ]; then
  echo "存在容器$SERVER_NAME,CID-$CID"
  docker stop $CID
  echo "成功停止容器$SERVER_NAME,CID-$CID"
  docker rm $CID
  echo "成功删除容器$SERVER_NAME,CID-$CID"
fi
if [ -n "$IID" ]; then
  echo "存在镜像$SERVER_NAME:$TAG,IID=$IID"
  docker rmi $IID
  echo "成功删除镜像$SERVER_NAME:$TAG,IID=$IID"
fi
echo "开始构建镜像$SERVER_NAME:$TAG"
# 进入创建的docker部署根目录
cd $SOURCE_PATH
# 构建docker镜像
docker build -t $SERVER_NAME:$TAG .
echo "成功构建镜像$SERVER_NAME:$TAG"

# 运行docker容器
# 无挂载模式,容器删除数据也被删除
# docker run --restart=always --name=kiftd -d -p 8080:8080 --privileged=true kiftd/docker:latest
# 挂载模式,数据写在主机,容器内的路径实际上是主机上的路径的映射
docker run --restart=always -v /usr/local/kiftd/kiftd-1.1.1-release/:/app/kiftd-1.1.1-release/ --name=kiftd -d -p 8080:8080 --privileged=true kiftd/docker:latest

echo "成功创建并运行容器$SERVER_NAME"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38

-v /usr/local/kiftd/kiftd-1.1.1-release : /app/kiftd-1.1.1-release 这个选项使用-v来将主机上的/usr/local/kiftd/kiftd-1.1.1-release目录挂载到容器内的/app/kiftd-1.1.1-release目录。这样的挂载通常用于将主机上的数据卷挂载到容器内,以实现数据的持久性。

# docker -v选项

这是一个Docker运行时的-v或--volume选项,用于将主机文件系统中的目录(左侧路径)挂载到容器中的目录(右侧路径)。在你提供的例子中:

  • -v /codegen/mysql/log:/var/log/mysql

这表示将主机上的/codegen/mysql/log目录挂载到容器内部的/var/log/mysql目录。这样做的目的可能是为了将MySQL容器的日志文件存储在主机上的指定目录,以便在主机和容器之间共享这些日志文件。

具体解释:

  • 主机路径(左侧): /codegen/mysql/log
  • 容器路径(右侧): /var/log/mysql

这意味着容器内的/var/log/mysql路径实际上是主机上的/codegen/mysql/log路径的映射。当容器写入/var/log/mysql时,实际上是写入主机上的/codegen/mysql/log目录,这使得主机和容器之间可以共享数据。

这样的挂载通常用于将容器中的数据持久化到主机,以便在容器重启或删除后保留数据。在这个例子中,它可能用于存储MySQL容器的日志文件,使得主机管理员可以轻松地查看和维护这些日志。

#开源项目#kiftd
上次更新: 2025/02/18 14:46:10
添加登录并启用全局前置守卫

← 添加登录并启用全局前置守卫

最近更新
01
jFlash使用 原创
03-24
02
中央仓库上传指南 原创
03-23
03
模板生成工具 原创
02-18
04
RTC实时时钟 原创
02-12
05
keil调试 原创
01-21
更多文章>
Copyright © 2023-2025 liyao52033  All Rights Reserved
备案号:鄂ICP备2023023964号-1    
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式