我们在获取官方的tomcat镜像后,需要对其中的tomcat配置文件和时区进行一系列的修改,才能用于生产环境。配置文件的修改主要是对tomcat的运行进行一系列的优化,如jvm,tomcat user等
首先,建立一个定制化目录。
mkdir cust
touch Dockerfile
编辑Dockerfile
vi Dockerfile
里面的内容如下:
FROM tomcat
MAINTAINER "Simon Xu "
ADD settings.xml /usr/local/tomcat/conf/
ADD tomcat-users.xml /usr/local/tomcat/conf/
ADD server.xml /usr/local/tomcat/conf/
ADD catalina.sh /usr/local/tomcat/bin/
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
其中 catalina.sh、server.xml、tomcat-users.xml、settings.xml都是在当前目录下的用于优化tomcat的文件,后面2行是设置原来的时区为中国上海标准时间,如果你的应用里,有取系统时间的需求,这个一定要改。不然会有8个小时的时差。
catalina.sh里面增加了jvm的配置
JAVA_OPTS="-Dfile.encoding=UTF-8 -server -Xms2048m -Xmx2048m -XX:NewSize=512m -XX:MaxNewSize=1024m -XX:PermSize=512m -XX:MaxPermSize=512m -XX:MaxTenuringThreshold=10 -XX:NewRatio=2 -XX:+DisableExplicitGC"
下面就是最重要的步骤了,生成一个自己定义的新Docker新镜像,
docker build -t simon/tomcat8-opt ./
以当前目录下的Dockerfile文件生成一个名字为simon/tomcat8-opt的镜像。
使用命令:docker images就可以查看到这个镜像了。
有时候,生产环境没有互联网环境,镜像的在线摘取与定制化是不行,就需要在有互联网的开发环境把所需要的镜像进行保存或导出。
镜像保存与导入
保存的文件以.tar方式存在
保存方式一:save
save命令会将镜像完整保存,包括历史版本和元数据信息,所以文件可能比较大。
sudo docker save -o /home/docker/images/tomcat8-opt.tar simon/tomcat8-opt
-o: 表示以文件的形式导出 紧跟在-o后面的是导出文件保存的位置 最后是镜像(仓库:TAG,或者镜像id)
保存方式二:export
确切的说,export其实是容器的保存,只把镜像当前的状态保存下来,没有历史版本等信息,所有文件比较小
docker export -o /home/docker/images/tomcat8-opt2.tar d0751467dcad
-o:表示以文件形式导出 紧跟在-o后面的是导出文件保存位置 最后是容器的id 容器通过sudo docker ps -a 查看
docker load命令
sudo docker load < /home/docker/images/tomcat8-opt.tar
这条命令是把绝对路径下的tomcat8-opt.tar文件,导入当前docker本地环境。
下面就可以使用docker images查看到这个镜像文件了。
镜像删除
删除镜像前,要先把依赖于这个镜像的容器删除(sudo docker rm 容器id)
删除镜像的命令是docker rmi [镜像id]或名字
sudo docker rmi simon/tomcat8-opt
提交修改的容器,并生成新的镜像
当对现有容器进行修改后,例如安装了某些软件、修改了配置等,要保存当前修改并生成新的镜像,使用docker commit命令 ,这个命令和git的commit命令很像
sudo docker commit -a "simon" -m "this is a commit message" simon/tomcat8-opt simon/tomcat8-optm
-a:修改者信息 -m:注释、说明 紧跟着当前操作的容器id或名字 最后是要生成的新的镜像名称
查看镜像的信息:docker inspect [镜像名称或者镜像id]
3.容器的相关操作命令
查看容器列表,这在基本命令中已经讲过。
#查看已启动的容器
sudo docker ps
#查看所有容器
sudo docker ps -a
sudo docker run -t -i simon/tomcat8-opt /bin/bash
sudo docker run -t -i 镜像id
常用参数解释:
-t 表示让Docker分配一个伪终端并绑定到容器的标准输入上
-i 表示让容器的标准输入保持打开
-d 表示以守护方式打开(即非交互模式,后台运行)
还有一个比较常用的,做网络配置时端口映射的参数-p,例如下面的命令将宿主机的3222端口映射到容器的22端口、将宿主机的3280端口映射到容器的22端口,用法如下:
#-p 设置端口映射 -p 宿主机端口:容器端口 --name= 为这个容器起个容易记的名字
sudo docker run -d --name=tomcat8-8081 -p 8081:8080 simon/tomcat8-opt
启动一个已存在的容器
sudo docker start tomcat8-8081
进入容器
sudo docker attach tomcat8-8081
docker stop tomcat8-8081
删除容器
容器必须是停止状态的才可以删除
sudo docker rm tomcat8-8081
sudo docker export tomcat8-8081 > /home/docker/images/tomcat8-8081.tar