用于需要使用Docker容器部署项目,但可能部署包需多次调整的场景,这种部署方式可以减少镜像制作的过程;
推荐几个使用Docker安装环境的文章:
1.Nocas: https://blog.csdn.net/weixin_44700323/article/details/140995859
2.Mysql: https://blog.csdn.net/wangshu9939/article/details/139153044
3.Nginx: https://blog.csdn.net/xiangxi1204/article/details/138636361
4.Redis: https://blog.csdn.net/Xixi0864/article/details/136559504
一、拉取JAR包启动基础镜像(JDK)
1. 拉取JDK镜像
首先,拉取对应版本的JDK镜像文件作为基础镜像。可以使用以下命令拉取指定版本的JDK镜像(此处以JDK17为例)
docker pull openjdk:17-jdk
二、挂载数据卷方式启动JDK容器(同时启动项目)
1.创建数据挂载目录
创建日志和配置文件及项目目录:
mkdir-p /opt/project
mkdir-p /opt/project/log
2. 启动(java)项目容器
docker run -d-p8091:8091 \-v /opt/project/server-1.0.0.jar:/my.jar \-v /opt/project/application.yml:/application.yml \-v /opt/project/logs/my_project.log:/var/log/my_project.log \--name my_project --privileged=true \
openjdk:17-jdk sh-c"nohup java -jar /my.jar --spring.config.location=/application.yml > /var/log/my_project.log 2>&1 & tail -f /dev/null"
参数解析:
(1)
docker run -d
docker run
:用于创建并运行一个新的容器实例。-d
:以守护进程(detached)模式运行容器。即容器会在后台运行,不会阻塞当前终端。
(2)
-p 8091:8091
-p
:指定端口映射。格式为宿主机端口:容器内部端口
。8091:8091
:将宿主机的8091
端口映射到容器内部的8091
端口。这样,在宿主机上访问localhost:8091
时,将请求转发到容器的8091
端口。
(3)
-v /opt/project/server-1.0.0.jar:/my.jar
-v
:用于将宿主机上的文件或目录挂载到容器内的文件或目录。。/opt/project/server-1.0.0.jar:/my.jar
:将宿主机上的/opt/project/server-1.0.0.jar
文件挂载到容器内部的/my.jar
。容器内的Java
应用将运行这个JAR
文件。
(4)
-v /opt/project/application.yml:/application.yml
-v
:再次使用挂载选项。/opt/project/application.yml:/application.yml
:将宿主机上的配置文件/opt/project/application.yml
挂载到容器内的/application.yml
,使得应用可以读取这个配置文件。
(5)
-v /opt/project/logs/my_project.log:/var/log/my_project.log
-v
:将日志文件挂载。/opt/project/logs/my_project.log:/var/log/my_project.log
:将容器内部生成的日志文件/var/log/my_project.log
映射到宿主机的/opt/project/logs/my_project.log
。容器中的日志会被写入宿主机上的这个文件。
(6)
--name my_project
--name
:为容器指定一个名称,方便管理和查看容器。my_project
:容器名称为my_project
。你可以通过这个名称来管理该容器(如启动、停止、删除等操作)。
(7)
--privileged=true
--privileged=true
:给容器赋予额外的权限,使得容器可以执行宿主机上原本需要高权限的操作。例如访问硬件设备或更改系统参数。
(8)
openjdk:17-jdk
openjdk:17-jdk
:这是使用的 Docker 镜像,基于OpenJDK 17
,它包含了 JDK 的工具和库。此镜像为运行Java
应用提供了运行时环境。
(9)
- sh -c "nohup java -jar /my.jar --spring.config.location=/application.yml > /var/log/my_project.log 2>&1 & tail -f /dev/null"
sh -c
:执行 shell 命令。nohup
:让 Java 应用在后台运行,忽略 HUP 信号(即使容器的前台进程结束,应用也不会随之终止)。java -jar /my.jar --spring.config.location=/application.yml
:执行 Java 命令,运行挂载到容器的 JAR 文件,并指定 Spring Boot 配置文件的路径为/application.yml
。/var/log/my_project.log 2>&1
:将标准输出和错误输出都重定向到/var/log/my_project.log
,并且这个路径已经映射到宿主机上的日志文件。tail -f /dev/null
:容器默认需要一个前台进程来保持运行。tail -f /dev/null
是一种常见的做法,用来让容器保持持续运行,而不会因主进程结束导致容器退出。
三、常见容器操作命令(如:容器提取成镜像、 将镜像导出到当前目录等)
- 创建容器
docker create -it--name2021000000000000 loongsongd/debian/sdf:v2.0 /start.s
- 将文件从主机复制到docker容器中
dockercp 文件 容器ID:目的目录
- 将容器中文件导出导本地
dockercp 容器ID:文件 本地目录
- 容器提取成镜像 – (版本号及镜像名称一样对当前镜像升级)
docker commit -a"作者名字"-m"镜像说明" 容器id 镜像名字:版本
docker commit -a"ccms"-m"init" 容器id name:v1
- 将镜像打包到当前目录
docker save -o ***.tar 镜像名字:版本
- 将tar压缩包加载为镜像
docker load -i ***.tar
- docker基本配置 放开2375端口
vi /lib/systemd/system/docker.service
- 进入容器
dockerexec-it 【name】 /bin/bash
- 查看doker容器(虚拟密码机)内存大小
docker inspect 【name】 |grep-i mem
- 查看容器使用资源情况
docker stats 【容器明】
版权归原作者 想做一个小孩的杨先生 所有, 如有侵权,请联系我们删除。