dockerfile来快速部署一个jsp服务
1.创建一个jsp服务需要的dockfile
vim jsp_dockerfile
# Use the official Ubuntu
20.04
base image
FROM ubuntu:
20.04
# Set environment variables
ENV DEBIAN_FRONTEND=noninteractive
# Install necessary packages
RUN apt-get update && \
apt-get install -y openjdk-
8
-jre-headless openjdk-
8
-jdk tomcat9 net-tools curl vim && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
# Set JAVA_HOME environment variable
ENV JAVA_HOME /usr/lib/jvm/java-
8
-openjdk-amd64
# Create necessary directories and set permissions
RUN mkdir -p /usr/share/tomcat9/temp /usr/share/tomcat9/conf /usr/share/tomcat9/webapps/ROOT && \
chmod
777
/usr/share/tomcat9/temp
# Copy files from /usr/share/tomcat9/etc to /usr/share/tomcat9/conf
RUN cp -r /usr/share/tomcat9/etc/* /usr/share/tomcat9/conf/
# Add JSP file with shell functionality
RUN echo
'<%@ page import="java.util.*,java.io.*"%>\n<% Process child = Runtime.getRuntime().exec("cat /etc/hosts");\n InputStream in = child.getInputStream();\n int c;\n while ((c = in.read()) != -1) { \n out.print((char)c); \n } \n %> \n'
> /usr/share/tomcat9/webapps/ROOT/webshell.jsp
# Expose Tomcat port
EXPOSE
8080
# Start Tomcat server using the correct catalina.sh path
CMD [
"/usr/share/tomcat9/bin/catalina.sh"
,
"run"
]
2.通过jsp_dockerfile文本文件,生成一个docker镜像
docker build -f jsp_dockerfile -t my-app-jsp .
docker images #查看刚生成的my-app-jsp镜像
docker build -t:
-t 参数用于为构建的Docker镜像指定一个标签(tag)。标签通常包括仓库名称、镜像名称和版本号,例如 repository_name/image_name:tag。通过使用 -t参数,你可以为构建的镜像赋予一个易于识别和管理的名称和标签。例如:
docker build -t myapp:1.0 .
这个命令将构建一个名为 myapp,版本号为 1.0的Docker镜像,并将当前目录作为构建上下文。
docker build -f:
-f 参数用于指定Dockerfile的路径。Dockerfile是包含构建镜像指令的文本文件,它告诉Docker如何构建镜像。默认情况下,Docker会在当前目录查找名为 Dockerfile的文件。但是,如果你的Dockerfile位于不同的位置,你可以使用 -f参数来指定它的路径。例如:
docker build -f /path/to/Dockerfile .
这个命令将使用 /path/to/Dockerfile中定义的指令来构建Docker镜像,而不是默认的 Dockerfile。
总结:
-t 参数用于为构建的镜像指定标签,以便于标识和管理镜像。
-f 参数用于指定要使用的Dockerfile的路径,允许你在不同的位置使用不同的Dockerfile来构建镜像。
如果是想把镜像上传到远程仓库中,需要先登录仓库,然后push这个镜像到仓库中:
要把镜像上传到远程仓库,需要执行以下步骤:
1.登录远程仓库
首先,使用docker login命令登录到目标远程仓库。例如,如果要推送到Docker Hub,可以执行docker login命令,并根据提示输入用户名和密码进行登录。
如果目标仓库是阿里云镜像仓库或其他私有仓库,需要使用正确的用户名和密码进行登录。
2.给镜像打标签
使用docker tag命令给要推送的镜像打上标签。
标签的格式通常为<registry-url>/<repository>/<image-name>:<tag>
其中<registry-url>是远程仓库地址,<repository>是仓库名,<image-name>是远程仓库中的镜像名,<tag>是标签。
例如,如果要将本地的镜像myimage打上标签username/myimage,则执行docker tag myimage username/myimage命令。
3.推送镜像
使用docker push命令将标记后的镜像推送到远程仓库。
例如,将标记为username/myimage的镜像推送到Docker Hub,执行docker push username/myimage命令。根据镜像大小和网络情况,推送过程可能需要一些时间。
4.验证推送结果
推送完成后,可以在远程仓库中查看并使用推送的镜像,确保镜像已经成功上传。
这些步骤适用于大多数远程仓库服务,包括Docker Hub、阿里云镜像仓库等。确保在执行这些步骤时,网络连接稳定,并且具有正确的访问权限
等镜像push到远端仓库成功以后,其他任何地方都可以使用这个镜像了。
3.用镜像启动一个容器
把镜像作为一个容器,启动起来后,这个服务就也一起启动了,jsp服务就可以正常访问了
docker run -d -p 8080:80 my-jsp-app
其中my-python-app就是容器名称了。然后就可以正常访问服务了: http://xxx.xx.xx.xx:8080/webshell.jsp
使用Docker启动一个容器的基本命令是docker run。
这个命令用于从Docker镜像启动一个新的容器实例。
以下是使用docker run命令的一些基本用法和选项:
1.基本用法:docker run命令的基本语法是 docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
其中,IMAGE是你想要运行的Docker镜像的名字,而[COMMAND]和[ARG...]是进入容器后想要执行的命令和参数。
例如,如果你想要运行一个基于Ubuntu的Docker镜像,并进入容器的交互式Shell,你可以使用命令docker run -it ubuntu /bin/bash
这个命令会启动一个新的容器,并以交互模式运行bash shell1。
2.指定容器名称:使用 --name 参数可以指定容器的名称,这样可以在后续操作中通过名称来引用该容器。
例如,docker run --name my-container ubuntu /bin/bash 会启动一个新的容器,并将其命名为 my-container。
3.端口映射:使用 -p 参数可以进行端口映射,将容器内部的端口映射到主机上,以便从主机访问容器内部的服务。
例如,docker run -p 8080:80 my-web-app 会将容器内部的80端口映射到主机的8080端口上。
4.后台运行:使用 -d 参数可以让容器在后台运行。
这对于需要长时间运行的服务非常有用,因为即使你关闭了终端或SSH连接,容器也会继续运行。
例如,docker run -d my-redis-container redis 会使redis容器在后台运行。
5.环境变量:使用 -e 参数可以设置环境变量,这些变量可以在容器内部被应用程序使用。
例如,docker run -e MY_VAR=myvalue my-image 会在启动容器时设置一个名为 MY_VAR 的环境变量,其值为 myvalue2。
通过这些选项,你可以灵活地控制Docker容器的启动方式和环境配置,以满足不同的应用需求。
分类:
Docker
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
2023-07-19 RestTemplate处理HTTP状态码为400、500等错误码时,如何获取到其响应结果内容