前言
阿里云代码 https://code.aliyun.com/
阿里云镜像地址 https://cr.console.aliyun.com
注意下面的这个地址无法用作Docker的镜像代码源:
阿里云代码仓库 https://codeup.aliyun.com/
使用
下载镜像
1 | docker pull registry.cn-hangzhou.aliyuncs.com/psvmc/oraclejdk-tomcat8 |
查看镜像ID
1 | docker images |
运行镜像
镜像中的tomcat在/opt/tomcat8
位置下
项目不带文件存储
1 | docker run -d -p 8081:8080 --name tomcat01 -v /data/wwwroot/tomcat01/:/opt/tomcat8/webapps/ -v /data/wwwroot/tomcat01_log/:/opt/tomcat8/logs/ --restart=always 71dc929e155c |
项目带文件存储
1 | docker run -d -p 8081:8080 --name tomcat01 -v /data/wwwroot/tomcat01/:/opt/tomcat8/webapps/ -v /data/wwwroot/tomcat01_log/:/opt/tomcat8/logs/ -v /data/wwwroot/tomcat01/ROOT/static/:/data/wwwroot/tomcat01/ROOT/static/ --restart=always 71dc929e155c |
里面映射了webapps
logs
上传文件位置
三个文件夹 根据自身需求设置
-v /data/wwwroot/tomcat01/ROOT/static/:/data/wwwroot/tomcat01/ROOT/static/
配置是项目中配置的文件存储的路径
查看容器运行状态
1 | docker ps -a |
查看tomcat
启动日志
1 | docker logs tomcat01 |
命令格式:
1 | $ docker logs [OPTIONS] CONTAINER |
例子:
查看指定时间后的日志,只显示最后100行:
1 | docker logs -f -t --since="2018-02-08" --tail=100 CONTAINER_ID/NAMES |
查看某时间之后的日志:
1 | docker logs -t --since="2018-02-08T13:23:37" CONTAINER_ID/NAMES |
查看某时间段日志:
1 | docker logs -t --since="2018-02-08T13:23:37" --until "2018-02-09T12:23:37" CONTAINER_ID/NAMES |
我们运行了tomcat
那么怎样进入tomcat
运行的环境呢
1 | // docker exec意思是:在`tomcat07`下面运行一个命令,在这里,运行的是/bin/bash |
接下来 我们退出tomcat
的运行环境(Ctrl+P+Q
)
把文件拷贝到容器中
如果做了目录映射就不用吧项目copy到docker容器中了
直接复制到映射的docker外层的目录中即可
1 | docker cp /root/test.war tomcat01:/opt/tomcat8/webapps/test.war |
Dockerfile文件
具体参照Github地址
添加的文件catalina.sh
覆盖原来文件
其实这个文件就是tomcat中的catalina.sh
文件添加了一下配置JAVA_OPTS="-Dfile.encoding=UTF8 -Dsun.jnu.encoding=UTF8"
构建
1 | docker build -t psvmc/docker_tomcat8 . |
当然也可以用阿里云构建
构建后的地址
1 | docker pull registry.cn-hangzhou.aliyuncs.com/psvmc/oraclejdk-tomcat8 |
在阿里云镜像地址
自己创建镜像用Github地址
的Dockerfile(jdk1.8+tomcat8+支持中文日志)
阿里云代码仓库https://codeup.aliyun.com/
开机启动
1 | systemctl enable docker.service |
常见错误
错误1
/bin/sh: service: command not found
解决方法
1 | # 安装service |
注意
不建议这样做,原因Docker内不建议运行后台服务。
错误2
Failed to get D-Bus connection: Operation not permitted
Docker的设计理念是在容器里面不运行后台服务,容器本身就是宿主机上的一个独立的主进程,也可以间接的理解为就是容器里运行服务的应用进程。
一个容器的生命周期是围绕这个主进程存在的,所以正确的使用容器方法是将里面的服务运行在前台。
因此,请遵守容器设计原则
一个容器里运行一个前台服务!