docker 部署java web项目

本文介绍在CentOS系统中安装Docker并部署Tomcat的过程。包括卸载旧版本Docker、安装最新版本、验证安装成功、从Docker Hub获取Tomcat镜像、启动Tomcat容器及访问容器内的Tomcat服务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

主要步骤

安装docker

  1. 卸载旧版本docker

    如果centos系统中存在老版本的docker,可以先卸载掉旧版本的docker,再安装新版本docker。

    yum remove docker docker-common docker-selinux 
    docker-engine

  2. 安装docker-ce版 

        参见上一篇安装docker:

       https://blog.youkuaiyun.com/vellerzheng/article/details/79882306

    
  1. 启动docker

    systemctl start docker

  2. 通过运行hello-world镜像来验证docker是否已成功安装

    docker run hello-world

    如果能看到Hello from Docker!就说明已经成功安装了docker

注意

  以上命令的运行如果需要root权限,需要切换到root用户下,或者提升权限。

安装tomcat镜像

主要有两种方式来安装tomcat镜像,一种是在dockerhub中下载,另一种方式是先自己制作tomcat镜像,然后在在docker中运行tomcat镜像,本文为了简单处理采用dockerhub下载的tomcat镜像

  1. 搜索tomcat镜像

    docker search tomcat

    通过上述命令查找tomcat镜像,选择Apache的tomcat,一般搜索到的结果,Apache tomcat是排在第一个的。而后可以进行安装。

  2. 安装tomcat镜像

    docker pull tomcat

  3. 查看安装的tomcat镜像

    docker images

    该命令回列出已经安装的tomcat镜像。

  4. 通过下载tomcat镜像启动一个tomcat容器

    docker run -p 8080:8080 tomcat:latest

    说明:

    -p 表示端口号,前一个8080是指我们访问tomcat时的端口号,
    后一个8080是tomcat启动的一个容器在docker中运行的端口号,
    指定端口号为了更明确的访问tomcat。 
    tomcat:last last是指定的tomcat的标签,相同的镜像可以指定不同的标签以做区分。
    

  5. 查看运行的tomcat容器

    docker ps

    通过步骤4中创建的一个tomcat容器,这种运行方式是在屏幕上打印运行的实时日志的,可以重新打开一个ssh终端来查看此时运行的tomcat容器信息。如何在后台运行tomcat在后面的docker常用命令中会有说明。

  6. 验证tomcat容器

    通过在浏览器中访问tomcat来查看启动的tomcat镜像是否可以正常运行,访问方式同一般机器下部署tomcat,即:http://ip:8080,根据自己ip地址情况。如我的测试地址是:http://192.168.93.128:8080

在tomcat镜像中部署javaweb项目

  1. 打包javaweb项目

    像通常的javaweb项目部署一样,首先需要将javaweb项目打成war包,具体不再详述。

  2. 查看tomcat镜像启动的容器

    docker ps

    记录下tomcat镜像启动的容器的ID或容器名称。

  3. 将war包放入到docker下的tomcat中

    首先你是需要把war包放入到centos系统中,本文中将一个test.war的项目放入centos系统的主目录,这个通过ssh工具就可以放到centos中,大家应该都很熟悉。从centos中将test.war移动到docker下tomcat镜像启动的容器中。

    docker cp test.war containerID:/usr/local/tomcat/webapps/

    说明:

    containerID 是你所启动tomcat镜像的容器ID或者容器名称也可以。
    
    这是将test.war放到tomcat的webapps下
    

  4. 验证部署的项目

    因为容器已经启动,所以可以直接通过浏览器访问测试的项目即可,即:http://ip:8080/test/ 如我的访问地址为:http://192.168.93.128:8080/test 如果能查看到自己编写的测试页面证明已经成功将web项目放入到docker下的tomcat中。

docker常用命令

这里为了方便理解,就以tomcat镜像为例。一行语法说明,一行例子。

  • 通过镜像产生一个容器

    docker run -p port1:port2 containerName:tag

    docker run -p 8080:8080 tomcat:latest

  • 通过数据卷持久化到宿主机

    docker run -d  -p port1:port2  -- name XXX  -v /localPath:/containerPath   containerName:tag  

    docker run -d -p 80:80 --name kodexplorer -v /opt/data:/var/www/html yangxuan8282/kodexplorer

  • 启动一个已有的容器

    docker start containerID/containerName

    docker start admiring_turing

    其中admiring_turing是tomcat镜像创建的一个容器名称,也可以使用其容器ID

  • 停止一个容器

    docker stop containerID/containerName

    docker stop admiring_turing

  • 重启一个容器

    docker restart containerID/containerName

    docker restart admiring_turing

  • 与一个已经启动的容器进行交互式操作

    docker exec -i -t containnerID/containerName /bin/bash

    docker exec -i -t admiring_turing /bin/bash

  • 复制文件到容器中

    docker cp src_path container:dest_path

    docker cp /test.txt admiring_turing:/usr/local/

    test.txt 是自己创建的一个测试文件,将文件复制到了容器的/usr/local目录下。

  • 在后台运行一个容器

    docker run -d -p image:tag

    docker run -d -p tomcat:latest

了解更多内容:

  1. https://docs.docker.com/engine/installation/linux/docker-ce/centos/#uninstall-old-versions

  2. https://docs.docker.com/

### 使用Docker部署Java项目的教程和最佳实践 #### 编写高效的Dockerfile 为了有效地使用Docker部署Java项目,创建一个合适的`Dockerfile`至关重要。这个文件定义了构建镜像所需的全部指令。推荐的做法是从官方的JDK或OpenJDK基础镜像开始,这能确保环境的一致性和安全性。 ```dockerfile FROM openjdk:17-jdk-alpine WORKDIR /app COPY target/my-app.jar my-app.jar ENTRYPOINT ["java", "-jar", "my-app.jar"] ``` 上述代码展示了如何基于Alpine Linux版本的OpenJDK 17创建一个新的工作目录,并将编译好的`.jar`文件复制进去作为入口点启动应用[^1]。 #### 构建与推送镜像 完成`Dockerfile`编写后,下一步就是利用它来构建自定义的应用程序镜像。可以通过简单的命令行操作完成此过程: ```bash $ docker build -t my-java-app . $ docker push my-java-app ``` 这里假设已经登录到了Docker Hub或其他私有仓库中以便于后续分发给其他团队成员或是生产环境中使用[^2]。 #### 启动容器实例 当拥有可用的镜像之后,便可以很方便地通过`docker run`命令来启动新的容器实例。对于大多数场景来说,默认设置就已经足够好用了;不过有时候可能还需要额外指定一些参数比如端口映射、内存限制等选项以满足特定需求。 ```bash $ docker run -d -p 8080:8080 --name=my-running-app my-java-app ``` 这条语句将会以后台模式运行名为`my-running-app`的服务并将主机上的8080端口转发至容器内部相同的端口号上[^3]。 #### 多服务协同工作 如果存在多个相互依赖的服务,则建议采用[Docker Compose](https://docs.docker.com/compose/)工具来进行统一管理。只需要在一个YAML格式的配置文件里描述各个组件之间的关系即可自动处理复杂的交互逻辑。 ```yaml version: '3' services: web: image: my-web-service ports: - "5000:5000" db: image: postgres environment: POSTGRES_USER: user POSTGRES_PASSWORD: password ``` 这段例子说明了一个Web服务器连接PostgreSQL数据库的情况,在开发测试阶段特别有用处[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值