Docker_Tomcat_01

5 篇文章 0 订阅

整体想法:用hub的tomcat做一个简单的perl能运行的容器
目的:了解docker基本使用命令以及容器挂载过程

  1. pull tomcat镜像
sixdog@192 Docker % docker pull tomcat
Using default tag: latest
latest: Pulling from library/tomcat
bb7d5a84853b: Pull complete 
f02b617c6a8c: Pull complete 
d32e17419b7e: Pull complete 
c9d2d81226a4: Pull complete 
fab4960f9cd2: Pull complete 
da1c1e7baf6d: Pull complete 
1d2ade66c57e: Pull complete 
ea2ad3f7cb7c: Pull complete 
d75cb8d0a5ae: Pull complete 
76c37a4fffe6: Pull complete 
Digest: sha256:509cf786b26a8bd43e58a90beba60bdfd6927d2ce9c7902cfa675d3ea9f4c631
Status: Downloaded newer image for tomcat:latest
docker.io/library/tomcat:latest
  1. 下载的镜像确认
sixdog@192 Docker % docker images
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
tomcat       latest    b0e0b0a92cf9   2 weeks ago   680MB
  1. 创建容器
    3.1. 容器名字:tomcat1
    3.2. 容器端口映射:8080
    3.3. 容器配置文件挂载
    3.4. 进入容器看一看
sixdog@192 Docker % docker run --name tomcat1 -p 8080:8080 -v $PWD/tomcat/webapps:/usr/local/tomcat/webapps/test -v $PWD/tomcat/conf:/usr/local/tomcat/conf  -d tomcat
596aaed00804ba4792f5c621341c17fa847c9854be433ab897f19e9f517f2637

自动创建目录
在这里插入图片描述
进入容器,这时才发现因为挂载了PC上的目录,目录是空的,导致容器里tomcat的配置文件等被同步为空,所以tomcat已经启动不了了

sixdog@192 Docker % docker start tomcat1
tomcat1
sixdog@192 Docker % docker ps -a        
CONTAINER ID   IMAGE     COMMAND             CREATED          STATUS                     PORTS     NAMES
596aaed00804   tomcat    "catalina.sh run"   13 minutes ago   Exited (1) 3 seconds ago             tomcat1

所以删掉容器

sixdog@192 Docker % docker rm tomcat1
tomcat1
sixdog@192 Docker % docker ps -a     
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

先创建一个临时容器,拷贝他的配置文件等到PC目录下,留作之后挂载用

sixdog@192 Docker % docker run --name tomcat -p 8080:8080 -d tomcat   
35b040b9bf196e5b339d6c6481dd484f40fc8d576235e9ade3247982d7136ead
sixdog@192 Docker % docker ps -a
CONTAINER ID   IMAGE     COMMAND             CREATED         STATUS         PORTS                    NAMES
35b040b9bf19   tomcat    "catalina.sh run"   6 seconds ago   Up 6 seconds   0.0.0.0:8080->8080/tcp   tomcat

进入容器,可以看到三个目标文件夹conf,logs,webapps

sixdog@192 Docker % docker exec -it 35b040b9bf19 bash #进入容器
root@35b040b9bf19:/usr/local/tomcat# 
root@35b040b9bf19:/usr/local/tomcat# ls -lt
total 160
drwxrwxrwx 1 root root  4096 Nov 11 13:58 logs
drwxr-xr-x 1 root root  4096 Nov 11 13:58 conf
drwxr-xr-x 2 root root  4096 Oct 22 00:23 bin
drwxr-xr-x 2 root root  4096 Oct 22 00:23 native-jni-lib
drwxr-xr-x 2 root root  4096 Oct 22 00:22 lib
drwxrwxrwx 2 root root  4096 Oct 22 00:22 temp
drwxr-xr-x 2 root root  4096 Oct 22 00:22 webapps
-rw-r--r-- 1 root root 18994 Sep 28 13:34 BUILDING.txt
-rw-r--r-- 1 root root  6210 Sep 28 13:34 CONTRIBUTING.md
-rw-r--r-- 1 root root 60269 Sep 28 13:34 LICENSE
-rw-r--r-- 1 root root  2333 Sep 28 13:34 NOTICE
-rw-r--r-- 1 root root  3372 Sep 28 13:34 README.md
-rw-r--r-- 1 root root  6905 Sep 28 13:34 RELEASE-NOTES
-rw-r--r-- 1 root root 16517 Sep 28 13:34 RUNNING.txt
drwxr-xr-x 7 root root  4096 Sep 28 13:34 webapps.dist
drwxrwxrwx 2 root root  4096 Sep 28 13:34 work
root@35b040b9bf19:/usr/local/tomcat# exit

拷贝容器内文件夹到PC上

sixdog@192 Docker %  docker cp tomcat:/usr/local/tomcat/webapps $PWD/tomcat
sixdog@192 Docker %  docker cp tomcat:/usr/local/tomcat/conf $PWD/tomcat
sixdog@192 Docker %  docker cp tomcat:/usr/local/tomcat/logs $PWD/tomcat
sixdog@192 Docker % 

目录确认
在这里插入图片描述
删除镜像

sixdog@192 Docker % docker ps -a
CONTAINER ID   IMAGE     COMMAND             CREATED          STATUS                        PORTS     NAMES
35b040b9bf19   tomcat    "catalina.sh run"   17 minutes ago   Exited (143) 15 seconds ago             tomcat
sixdog@192 Docker % docker rm 35b040b9bf19 
35b040b9bf19
sixdog@192 Docker % docker ps -a           
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
sixdog@192 Docker % 

再次创建镜像并挂载

sixdog@192 Docker % 
sixdog@192 Docker % docker run --name tomcat1 -p 8080:8080 -v $PWD/tomcat/webapps:/usr/local/tomcat/webapps/sixdog -v $PWD/tomcat/conf:/usr/local/tomcat/conf -v $PWD/tomcat/logs:/usr/local/tomcat/logs/ -d tomcat
677f514040a97ff102eb361e7bc71c861a5cc31e4e0425a19caa95b8e043a890
sixdog@192 Docker % docker ps -a
CONTAINER ID   IMAGE     COMMAND             CREATED         STATUS         PORTS                    NAMES
677f514040a9   tomcat    "catalina.sh run"   7 seconds ago   Up 7 seconds   0.0.0.0:8080->8080/tcp   tomcat1
sixdog@192 Docker % 

进入镜像

sixdog@192 Docker % docker exec -it 677 bash
root@677f514040a9:/usr/local/tomcat# ls -lt
total 152
drwxrwxrwx  1 root root  4096 Nov 11 14:19 work
drwxr-xr-x  1 root root  4096 Nov 11 14:19 webapps
drwxr-xr-x 13 root root   416 Nov 11 13:58 conf
drwxrwxrwx  4 root root   128 Nov 11 13:58 logs
drwxr-xr-x  2 root root  4096 Oct 22 00:23 bin
drwxr-xr-x  2 root root  4096 Oct 22 00:23 native-jni-lib
drwxr-xr-x  2 root root  4096 Oct 22 00:22 lib
drwxrwxrwx  2 root root  4096 Oct 22 00:22 temp
-rw-r--r--  1 root root 18994 Sep 28 13:34 BUILDING.txt
-rw-r--r--  1 root root  6210 Sep 28 13:34 CONTRIBUTING.md
-rw-r--r--  1 root root 60269 Sep 28 13:34 LICENSE
-rw-r--r--  1 root root  2333 Sep 28 13:34 NOTICE
-rw-r--r--  1 root root  3372 Sep 28 13:34 README.md
-rw-r--r--  1 root root  6905 Sep 28 13:34 RELEASE-NOTES
-rw-r--r--  1 root root 16517 Sep 28 13:34 RUNNING.txt
drwxr-xr-x  7 root root  4096 Sep 28 13:34 webapps.dist
root@677f514040a9:/usr/local/tomcat# 

修改PC上文件,容器内确认是否同步更改
创建文件index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    hello world!!!
</body>
</html>

将index.html放入webapps目录下

sixdog@192 tomcat % ls
conf		index.html	logs		webapps
sixdog@192 tomcat % mv index.html ./webapps/index.html
sixdog@192 tomcat % ls
conf	logs	webapps
sixdog@192 tomcat % ls webapps 
index.html
sixdog@192 tomcat % 

容器内确认

sixdog@192 tomcat % docker exec -it 677 bash          
root@677f514040a9:/usr/local/tomcat# ls -lt
total 152
drwxrwxrwx  1 root root  4096 Nov 11 14:19 work
drwxr-xr-x  1 root root  4096 Nov 11 14:19 webapps
drwxr-xr-x 13 root root   416 Nov 11 13:58 conf
drwxrwxrwx  4 root root   128 Nov 11 13:58 logs
drwxr-xr-x  2 root root  4096 Oct 22 00:23 bin
drwxr-xr-x  2 root root  4096 Oct 22 00:23 native-jni-lib
drwxr-xr-x  2 root root  4096 Oct 22 00:22 lib
drwxrwxrwx  2 root root  4096 Oct 22 00:22 temp
-rw-r--r--  1 root root 18994 Sep 28 13:34 BUILDING.txt
-rw-r--r--  1 root root  6210 Sep 28 13:34 CONTRIBUTING.md
-rw-r--r--  1 root root 60269 Sep 28 13:34 LICENSE
-rw-r--r--  1 root root  2333 Sep 28 13:34 NOTICE
-rw-r--r--  1 root root  3372 Sep 28 13:34 README.md
-rw-r--r--  1 root root  6905 Sep 28 13:34 RELEASE-NOTES
-rw-r--r--  1 root root 16517 Sep 28 13:34 RUNNING.txt
drwxr-xr-x  7 root root  4096 Sep 28 13:34 webapps.dist
root@677f514040a9:/usr/local/tomcat# ls webapps/sixdog/
index.html
root@677f514040a9:/usr/local/tomcat# cat webapps/sixdog/index.html 
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    hello world!!!
</body>
</html>
  1. 浏览器输入http://192.168.0.102:8080/确认结果
    在这里插入图片描述

原因是容器里webapps目录里没有相关文件,发现在webapps.dist文件夹里有相关文件,拷贝过来

root@677f514040a9:/usr/local/tomcat# cp -r ./webapps.dist/* webapps/
root@677f514040a9:/usr/local/tomcat# ls webapps
ROOT  docs  examples  host-manager  manager  sixdog

再次访问http://192.168.0.102:8080/ 已经可以访问
在这里插入图片描述
http://192.168.0.102:8080/sixdog/index.html
在这里插入图片描述

5.修改配置文件,新建文件夹,文件等
修改web.xml

    <servlet>  
            <servlet-name>cgi</servlet-name>  
            <servlet-class>org.apache.catalina.servlets.CGIServlet</servlet-class>  
            <init-param>  
            <param-name>debug</param-name>  
            <param-value>0</param-value>  
            </init-param>  
            <init-param>    
            <param-name>executable</param-name>    
            <param-value>perl</param-value>  
            </init-param>  
            <init-param>  
            <param-name>cgiPathPrefix</param-name>  
	        <param-value>WEB-INF/cgi</param-value>
            </init-param>  
            <init-param>
            <param-name>passShellEnvironment</param-name>
            <param-value>true</param-value>  
            </init-param>
            <load-on-startup>5</load-on-startup>  
        </servlet>  
        
        <servlet-mapping>  
            <servlet-name>cgi</servlet-name>  
	    <url-pattern>*.cgi</url-pattern> 
        </servlet-mapping>  
	
  <!-- ================ Built In Servlet Mappings ========================= -->

context.xml加privileged=“true”

<Context privileged="true">

    <!-- Default set of monitored resources. If one of these changes, the    -->
    <!-- web application will be reloaded.                                   -->
    <WatchedResource>WEB-INF/web.xml</WatchedResource>
    <WatchedResource>WEB-INF/tomcat-web.xml</WatchedResource>
    <WatchedResource>${catalina.base}/conf/web.xml</WatchedResource>

    <!-- Uncomment this to enable session persistence across Tomcat restarts -->
    <!--
    <Manager pathname="SESSIONS.ser" />
    -->
</Context>

目录结构
在这里插入图片描述
访问cgi
http://192.168.0.102:8080/sixdog/test.cgi

#!/usr/bin/perl
 
print "Content-type:text/html\r\n\r\n";
print '<html>';
print '<head>';
print '<meta charset="utf-8">';
print '<title>溜狗</title>';
print '</head>';
print '<body>';
print '<h2>Hello Word from sixdog</h2>';
print '</body>';
print '</html>';

在这里插入图片描述

访问index.html
http://192.168.0.102:8080/sixdog/html/index.html
在这里插入图片描述
一个简单的表单提交,本打算做个csv数据库,增删改查,不过容器里的Ubuntu安装这种老旧技术用的东西比较吃力,放弃了

加了个html,cgi
在这里插入图片描述

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="https://cdn.staticfile.org/twitter-bootstrap/4.3.1/css/bootstrap.min.css">
    <script src="https://cdn.staticfile.org/jquery/3.2.1/jquery.min.js"></script>
    <script src="https://cdn.staticfile.org/popper.js/1.15.0/umd/popper.min.js"></script>
    <script src="https://cdn.staticfile.org/twitter-bootstrap/4.3.1/js/bootstrap.min.js"></script>
    <title>用户添加</title>
</head>
<body>
    <div class="container">
        <h2>add user</h2>
        <form action="/sixdog/usersManager.cgi" method="post"> 
          <div class="form-group">
            <label for="id">id:</label>
            <input type="input" class="form-control" name="id" placeholder="Enter id">
          </div>
          <div class="form-group">
            <label for="name">姓名:</label>
            <input type="input" class="form-control" name="name" placeholder="Enter name">
          </div>
          <div class="form-group">
          <label class="radio-inline"><input type="radio" name="sex" value="male"></label>
          <label class="radio-inline"><input type="radio" name="sex" value="female"></label>
          </div>
          <div class="form-group">
            <label for="age">年龄:</label>
            <input type="input" class="form-control" name="age" placeholder="Enter age">
          </div>
          <div class="form-group">
            <label for="job">职业:</label>
            <input type="input" class="form-control" name="job" placeholder="Enter job">
          </div>
          <input type="hidden" name="mode" value="init">
          <button type="submit" class="btn btn-primary">Submit</button>
        </form>
      </div>
</body>
</html>
#!/usr/bin/perl

# use DBI;
# use strict;
# use CGI qw( :standard); #CGI无法安装, 以下写法用不了

# my $query = CGI->new;
# my $mode = $query->param('mode');
# my $id = $query->param('id');
# my $name = $query->param('name');
# my $sex = $query->param('sex');
# my $age = $query->param('age');
# my $job = $query->param('job');

local ($buffer, @pairs, $pair, $name, $value, %FORM);
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});

@pairs = split(/&/, $buffer);
foreach $pair (@pairs)
{
   ($name, $value) = split(/=/, $pair);
   $value =~ tr/+/ /;
   $value =~ s/%(..)/pack("C", hex($1))/eg;
   $FORM{$name} = $value;
}

my $mode = $FORM{mode}; 
my $id = $FORM{id}; 
my $name = $FORM{name}; 
my $sex = $FORM{sex}; 
if($sex eq "male"){
      $sex = '男';
}else{
      $sex = '女';
}
my $age = $FORM{age}; 
my $job = $FORM{job} ;


print "$mode\n";
if($mode eq "init"){
      # my $dbc=DBI->connect("DBI:CSV:f_dir=;csv_ed=/usr/local/tomcat/webapps/sixdog/WEB-INF/cgi\n;");
      # $dbc->{'csv.tables'}->{'users'}={'file'=>'users.csv'};
      # my $dbcIn = $dbc->prepare("insert into users(id,name,sex,age,job) values (?????);");
      # $dbcIn->execute($id,$name,$sex,$age,$job);

      print "Content-type:text/html\r\n\r\n";
      print "<html>";
      print "<head>";
      print '<meta charset="utf-8">';
      print '<title>sixdog</title>';
      print "</head>";
      print "<body>";
      print "<h2>输入id:$id</h2>";
      print "<h2>输入name:$name</h2>";
      print "<h2>输入sex:$sex</h2>";
      print "<h2>输入age:$age</h2>";
      print "<h2>输入job:$job</h2>";
      print "</body>";
      print "</html>";
}
1;

在这里插入图片描述

在这里插入图片描述
补足1:容器内安装vim
执行apt-get update,
然后再次执行apt-get install vim即可成功安装vim
补足2:启动tomcat容器出log的时间和系统时间不一致
在tomcat的bin/catalina.sh 前面添加如下:
export JAVA_OPTS=“$JAVA_OPTS -server -Dfile.encoding=UTF-8 -Duser.timezone=GMT+08”

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值