拉取Tomcat镜像

这里只拉取一个Tomcat容器,运行一个简单的web项目,确保整个docker可以正常运行。

查看Tomcat镜像:docker search tomcat

[root@k8s-03 ~]# docker search tomcat
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
tomcat Apache Tomcat is an open source implementati… 3326 [OK]
tomee Apache TomEE is an all-Apache Java EE certif… 97 [OK]
bitnami/tomcat Bitnami Tomcat Docker Image 45 [OK]
...

下载下来官方的镜像Starts最高的那个: docker pull tomcat,默认下载最新版本tomcat。但是我们需要的是8.5版本的tomcat,所以指定一下版本号:docker pull tomcat:8.5.50

[root@k8s-03 ~]# docker pull tomcat:8.5.50
8.5.50: Pulling from library/tomcat
dc65f448a2e2: Pull complete
346ffb2b67d7: Pull complete
dea4ecac934f: Pull complete
8ac92ddf84b3: Pull complete
d8ef64070a18: Pull complete
6577248b0d6e: Pull complete
576c0a3a6af9: Pull complete
6e0159bd18db: Pull complete
944191e51caa: Pull complete
9ee6a5ca751e: Pull complete
Digest: sha256:d53c2079ea67db92f6d7c39e9450f641610336016fdddef5392c5afd41518e5e
Status: Downloaded newer image for tomcat:8.5.50
docker.io/library/tomcat:8.5.50

完成后查看本地镜像:docker images

[root@k8s-03 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
tomcat latest 5eb506608219 8 days ago 685MB
tomcat 8.5.50 b56d8850aed5 2 years ago 529MB

启动tomcat镜像,创建一个容器
docker run --name tomcat -d -p 8080:8080 tomcat:8.5.50

[root@k8s-03 ~]# docker run --name tomcat -d -p 8080:8080 tomcat:8.5.50
88ec3e189e60238d791bb3195e3d58d30ec1ecdb2721f8a567d597e26c54431b

查看进程

[root@k8s-03 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d0224f53abaf tomcat:8.5.50 "catalina.sh run" 12 minutes ago Up 12 minutes 0.0.0.0:8080->8080/tcp tomcat

查看8080端口是否已监听

[root@k8s-03 ~]# netstat -anp|grep 8080
tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 5289/docker-proxy

在主机中 ,实时查看docker容器日志

docker logs -f -t --tail 行数 容器名[containerID]  
-f 按日志输出
-t 显示时间戳

通过docker ps命令查到containerID为 d0224f53abaf ,敲入如下命令查看日志:

docker logs -f -t --tail 1000 d0224f53abaf

进入容器(containerID 是容器的ID):docker exec -it containerID /bin/bash

docker exec -it d0224f53abaf /bin/bash

加载web应用

将准备的工程直接上传到服务器(我这里是ROOT.zip,上传到/root目录下,然后解压)。

通过docker的cp功能将文件复制到容器中去:
docker cp ROOT d0224f53abaf:/usr/local/tomcat/webapps

[root@k8s-03 ~]# docker cp ROOT d0224f53abaf:/usr/local/tomcat/webapps
[root@k8s-03 ~]# docker exec -it d0224f53abaf /bin/bash
root@d0224f53abaf:/usr/local/tomcat# cd webapps
root@d0224f53abaf:/usr/local/tomcat/webapps# ls
ROOT

这里复制完成后Tomcat容器不需要重启就会自动编译运行项目,看Tomcat日志:

2022-05-26T09:21:58.377404648Z 26-May-2022 09:21:58.376 INFO [localhost-startStop-2] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [/usr/local/tomcat/webapps/ROOT]
2022-05-26T09:22:00.412601936Z 26-May-2022 09:22:00.412 INFO [localhost-startStop-2] org.apache.jasper.servlet.TldScanner.scanJars At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
2022-05-26T09:22:06.579693865Z 26-May-2022 09:22:06.579 INFO [localhost-startStop-2] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/usr/local/tomcat/webapps/ROOT] has finished in [8,203] ms

现在通过 http://ip:8080/ 就能访问目标服务器上的tomcat服务了。

重新运行镜像

重新运行镜像要先停止镜像然后删除,之后才能重新运行镜像。
停止运行镜像

#docker container kill [containerID]  #手動停止容器
docker container kill d0224f53abaf

删除容器

docker rm tomcat

另外,还有个删除镜像的命令

#docker rmi CONTAINERID
docker rmi d0224f53abaf

打包新镜像

从容器创建一个新的镜像。

使用的命令:commit

语法:docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

OPTIONS可添加属性说明:

-a :提交的镜像作者;

-c :使用Dockerfile指令来创建镜像;

-m :提交时的说明文字;

-p :在commit时,将容器暂停。

这里我们使用已经添加了Java Web项目的Tomcat容器创建镜像:

docker commit -a "dx" -m "tomcat-web-demo" d0224f53abaf tomcatwebdemo:v1.0

[root@k8s-03 ~]# docker commit -a "dx" -m "tomcat-web-demo" d0224f53abaf tomcatwebdemo:v1.0
sha256:a562a5fc5062871190cedc4e6a2e517affba1c59845210bb7a7942fb86b098d7

创建完查看本地镜像:docker images可以看到我们新创建的镜像

[root@k8s-03 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
tomcatwebdemo v1.0 a562a5fc5062 57 seconds ago 535MB

现在来直接运行这个新镜像:
docker run --name tomcatwebdemo -d -p 8081:8080 tomcatwebdemo:v1.0

浏览器访问新容器端口;测试成功。
http://ip:8080/

至此,我们就完成了一次多层镜像的创建。

其他命令

推送镜像到仓库

打标签 docker tag tomcatwebdemo:v2.0 10.100.57.178:5000/jfinaldemo:v2.0
推送 docker push 10.100.57.178:5000/jfinaldemo:v2.0

docker commit -a "dx" -m "jfinalauthdemo" d0224f53abaf jfinalauthdemo:v4.0  
docker run --name jfinalauthdemo -d -p 7999:7999 jfinalauthdemo:v4.0
#打标签
docker tag jfinalauthdemo:v4.0 10.100.57.178:5000/jfinalauthdemo:v4.0
#推送到仓库
docker push 10.100.57.178:5000/jfinalauthdemo:v4.0

把host主机中的文件和容器相互拷贝

docker cp 容器名:要拷贝的文件在容器里面的路径 要拷贝到宿主机的相应路径
docker cp 宿主机的相应路径 容器名:要拷贝的文件在容器里面的路径

docker cp d0224f53abaf:/usr/local/tomcat/conf/server.xml /root/  
docker cp /root/server.xml d0224f53abaf:/usr/local/tomcat/conf/
# 查看容器日志
kubectl logs -f jfinaldemo-666b497ccf-98j5j -n=default