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"]
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 中两个不同的指令,它们分别用于不同的目的。
WORKDIR
:WORKDIR /app
设置容器内部的工作目录为/app
。这意味着在之后的命令中,相对路径将以/app
为基础。这对于在容器中运行命令或设置路径时非常有用,可以简化命令并提高可读性。- 例如,如果有一个命令是
COPY ./source /app/destination
,那么它会将主机上的source
目录中的文件复制到容器内的/app/destination
目录中。 WORKDIR
不会在主机上创建任何目录,它只是在容器内部切换当前工作目录。
VOLUME /tmp
:VOLUME /tmp
声明在容器中创建一个挂载点(volume),并将其关联到主机上的/tmp
目录。这个挂载点在容器中是一个持久化的存储位置,允许容器之间共享数据,也可以在容器停止后保留数据。- 这通常用于存储容器中的临时文件、日志文件或其他需要在容器之间或容器启动停止周期中保留的数据。
总体而言,WORKDIR
用于设置容器内的当前工作目录,而 VOLUME
用于声明一个挂载点,将容器内的某个目录挂载到主机上,以实现数据的持久性和共享。
# COPY 与ADD区别
在大多数情况下,COPY
和 ADD
在 Dockerfile 中可以互相替代,但它们有一些不同之处:
COPY
:- 主要用于将本地文件复制到容器中。
COPY
只能复制本地文件或目录到容器中,不支持 URL。- 语法:
COPY <src>... <dest>
。
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/
但请注意,一般来说,推荐使用 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"
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容器的日志文件,使得主机管理员可以轻松地查看和维护这些日志。
- 01
- element-plus多文件手动上传 原创11-03
- 02
- TrueLicense 创建及安装证书 原创10-25
- 03
- 手动修改迅捷配置 原创09-03
- 04
- 安装 acme.sh 原创08-29
- 05
- zabbix部署 原创08-20