deepin系统docker学习7:部署Tomcat

1. 下载tomcat

  1. 登录docker平台,查找可以下载的版本号:https://hub.docker.com/search/?type=image
    在这里插入图片描述
  2. 里面有好多版本,我下载的是9.0.46-jdk8版本;
  3. 执行命令下载并运行:

    命令:docker run -it -p 80:8080 --name tomcat01 tomcat:9.0.46-jdk8
    说明:因为默认tomcat使用的是8080端口,因此将宿主机的80端口和docker的8080做映射关系;

    # 程序开始下载,这个过程省略;
    quxianglin@quxianglin-PC:~$ docker run -it -p 80:8080 --name tomcat01 tomcat:9.0.46-jdk8
    Using CATALINA_BASE:   /usr/local/tomcat
    Using CATALINA_HOME:   /usr/local/tomcat
    Using CATALINA_TMPDIR: /usr/local/tomcat/temp
    Using JRE_HOME:        /usr/local/openjdk-8
    Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
    Using CATALINA_OPTS:   
    01-Jun-2021 03:34:42.020 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server version name:   Apache Tomcat/9.0.46
    01-Jun-2021 03:34:42.021 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server built:          May 8 2021 17:35:52 UTC
    01-Jun-2021 03:34:42.022 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server version number: 9.0.46.0
    01-Jun-2021 03:34:42.022 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Name:               Linux
    ...
    01-Jun-2021 03:34:42.238 INFO [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["http-nio-8080"]
    01-Jun-2021 03:34:42.282 INFO [main] org.apache.catalina.startup.Catalina.load Server initialization in [381] milliseconds
    01-Jun-2021 03:34:42.313 INFO [main] org.apache.catalina.core.StandardService.startInternal Starting service [Catalina]
    01-Jun-2021 03:34:42.314 INFO [main] org.apache.catalina.core.StandardEngine.startInternal Starting Servlet engine: [Apache Tomcat/9.0.46]
    01-Jun-2021 03:34:42.331 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-nio-8080"]
    01-Jun-2021 03:34:42.354 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in [71] milliseconds
    # 上面截取了一部分数据,最终会看到熟悉的打印内容;
    
  4. 在宿主机的浏览器里输入:http://localhost,会发现:啥都没有,不过说明,tomcat已经启动成功了,并且80端口已经绑定了;
    在这里插入图片描述

2. 退出系统

  1. 这时候就停止运行了,当我们再次在浏览器访问地址时,提示连接失败:
    在这里插入图片描述

    命令:Ctrl+C
    连接失败原因:因为启动时参数设置,没有让tomcat在后台运行,命令中添加-d即可,全命令如下:
    docker run -itd -p 80:8080 --name tomcat01 tomcat:9.0.46-jdk8
    但是直接执行应该还会报错,因为80端口映射已经被绑定,已经有了一个tomcat01别名,因此可以删除容器,然后再次运行,或者换一组端口号和别名;
    删除容器命令:docker rm tomcat01

    01-Jun-2021 03:43:26.415 INFO [Thread-4] org.apache.coyote.AbstractProtocol.pause Pausing ProtocolHandler ["http-nio-8080"]
    01-Jun-2021 03:43:26.423 INFO [Thread-4] org.apache.catalina.core.StandardService.stopInternal Stopping service [Catalina]
    01-Jun-2021 03:43:26.424 INFO [Thread-4] org.apache.coyote.AbstractProtocol.stop Stopping ProtocolHandler ["http-nio-8080"]
    01-Jun-2021 03:43:26.469 INFO [Thread-4] org.apache.coyote.AbstractProtocol.destroy Destroying ProtocolHandler ["http-nio-8080"]
    

3. 调试系统

在上一步留了一个问题:启动后没有出现熟悉的界面,怎么回事?

  1. 重启tomcat容器:

    命令:docker start tomcat01
    不能再用docker run命令了,这个命令是创建新的容器的;

  2. 进入容器,排查错误:

    命令:docker exec -it tomcat01 /bin/bash

    quxianglin@quxianglin-PC:~$ docker exec -it tomcat01 /bin/bash
    root@88b1abe46a17:/usr/local/tomcat# ls
    BUILDING.txt     LICENSE  README.md      RUNNING.txt  conf  logs            temp     webapps.dist
    CONTRIBUTING.md  NOTICE   RELEASE-NOTES  bin          lib   native-jni-lib  webapps  work
    root@88b1abe46a17:/usr/local/tomcat# cd webapps				##进入到webapps
    root@88b1abe46a17:/usr/local/tomcat/webapps# ls
    root@88b1abe46a17:/usr/local/tomcat/webapps# 				##发现里面都是空的,啥都没有
    root@88b1abe46a17:/usr/local/tomcat/webapps# cd ..			##重新退出来,返回上一级目录
    root@88b1abe46a17:/usr/local/tomcat# cd webapps.dist		##不过我们发现了webapps.dist目录,我们进去看看
    root@88b1abe46a17:/usr/local/tomcat/webapps.dist# ls		##果然,啥都有,所有的默认页面都在这里面
    ROOT  docs  examples  host-manager  manager
    root@88b1abe46a17:/usr/local/tomcat/webapps.dist# 
    root@88b1abe46a17:/usr/local/tomcat/webapps.dist# cd ..		##退出,返回到上一级
    root@88b1abe46a17:/usr/local/tomcat# cp -r webapps.dist/\*  webapps		##\*是转义字符:拷贝webapps.dist下面的所有文件到webapps下面
    root@88b1abe46a17:/usr/local/tomcat# cd webapps
    root@88b1abe46a17:/usr/local/tomcat/webapps# ls				##查看结果
    ROOT  docs  examples  host-manager  manager
    root@88b1abe46a17:/usr/local/tomcat/webapps# 
    
    1. 使用ls命令可以看到tomcat里面的内容,文件和文件夹跟我们实际安装的一模一样,就是多了一个webapps.dist;
    2. 使用命令cd webapps进去看看,哇,真空,啥都没有,所以在浏览器会啥都没有;
    3. 我们进去webapps.dist看看,发现默认的页面都在这里,我们可以把里面的内容复制到webapp里面;
      命令:root@3f3c2a38a0ca:/usr/local/tomcat# cp -r webapps.dist/* webapps
    4. 查看结果:

    在这里插入图片描述

4. 退出系统

  1. 返回到/usr/local/tomcat目录下执行Ctrl+C,或者直接在webapps页面执行exit退出;
  2. 不影响页面访问;

5. 问题:

  1. 怎么将docker 容器中的文件/文件夹拷贝到宿主机电脑?

    ## 将tomcat下的webapps文件夹拷贝到 宿主机D盘下的dockercopyfiles
    ## 前提我已经将webapps.dist下的文件拷贝到webapps下了;
    $ docker cp tomcat01:/usr/local/tomcat/webapps d:/dockercopyfiles
    

    效果如下:在这里插入图片描述

  2. 怎么将项目放到tomcat中,如果tonmcat容器不小心被删除了,项目怎么保留下来?

    第一个问题:怎么将文件从宿主机拷贝到容器?

    ## 将 宿主机D:/dockercopyfiles/test.java  拷贝到tomcat下的webapps文件夹内;
    ## 
    $ docker cp d:/dockercopyfiles/test.java tomcat01:/usr/local/tomcat/webapps
    $ docker exec -it tomcat01 /bin/bash		## 进入项目
    root@5d7dd5dff52c:/usr/local/tomcat# ls		## 查看列表
    BUILDING.txt     LICENSE  README.md      RUNNING.txt  conf  logs            temp     webapps.dist
    CONTRIBUTING.md  NOTICE   RELEASE-NOTES  bin          lib   native-jni-lib  webapps  work
    root@5d7dd5dff52c:/usr/local/tomcat# cd webapps		## 进入到webapps文件夹
    root@5d7dd5dff52c:/usr/local/tomcat/webapps# ls		## 查看列表里面已经有test.java文件了
    ROOT  docs  examples  host-manager  manager  test.java
    

    效果如下:
    在这里插入图片描述

    使用卷命令,可以打通容器内和容器外的目录,这是一种同步方案,将数据同步到容器外的目录;

  3. 将程序和数据分开?怎么实现?

  4. 怎么制作自己的镜像?

6. 遇到的问题:

> \\\"/mnt/sda1/var/lib/docker/overlay2/fe77399e127bcfe161d43d787c4bd4ef398fbd2473791b2fed90498c44e999aa/merged/usr/local/tomcat/conf/server.xml\\\" caused \\\"not a directory\\\"\"": unknown: Are you trying to mount a directory onto a file (or vice-versa)? Check if the specified host path exists and is the expected type.
重点是这句话:Are you trying to mount a directory onto a file (or vice-versa)? Check if the specified host path exists and is the expected type
原因是:在第一次就配置文件夹的映射关系,导致在宿主机上没有配置文件,系统默认会在宿主机上创建一个同名文件夹,就出现了这个错误,解决方法是,提前在宿主机创建好配置文件,然后再做卷映射,就可以了;

7. 所有命令

  1. 需要先生成一个容器,将需要和程序分离的数据文件和配置文件(文件夹)拷贝到宿主机

    docker run -d -p 8080:8080 --name tomcat01 tomcat:9.0.46-jdk8

    docker cp tomcat01:/usr/local/tomcat/conf /usr/local/docker/tomcat01/conf

    docker cp tomcat01:/usr/local/tomcat/webapps /usr/local/docker/tomcat01/webapps

  2. 删除刚刚创建的容器,再重新创建一个容器,添加映射关系的配置

    docker rm -f tomcat01

    docker run -d -p 8080:8080 -v /usr/local/docker/tomcat01/conf:/usr/local/tomcat/conf -v /usr/local/docker/tomcat01/webapps:/usr/local/tomcat/webapps --name tomcat01 tomcat:9.0.46-jdk8

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值