准备工作及安装
https://docs.docker.com/engine/install/centos/


1.4 安装存储库
1)安装docker需要的工具包




我们可以通过修改daemon.json 文件添加其它的仓库地址,进行镜像上传和下载。

修改此配置文件一定要先重启daemon文件、重启docker。


设置开机自启。



Docker的基本命令使用
2.1 docker images

可以查看现有的镜像上面的参数分别是:
镜像名、镜像标签、镜像id、镜像创建时间、镜像大小。
2.2 docker ps

上面的参数分别是:
容器ID、镜像ID、启动容器的命令、容器创建时间、容器状态、容器端口信息、容器名字。
docker ps -a 会显示所有的容器包括没有运行的容器或者已经停止的容器。
2.3 docker run


由上图可知docker run 后面接镜像ID 或者 镜像名:镜像标签。



-d参数使容器后台启动,会输出容器的长ID。
-p参数指定虚拟机对容器的端口的映射(虚拟机端口:容器端口)。
--name参数指定容器的名字,不指定名字系统会随机指定名字。
-P参数随机指定虚拟机端口映射。

-it参数这其实是两个参数分别是-i,-t但在实际使用情况下是一起使用的,表示直接启动容器并进入(进入容器中一般是)。
2.4 docker exec

tomcat是容器名称,填写容器ID也是可以的。
进入后台启动的容器或者正在运行的容器。
2.5 docker attach

可以看到容器启动命令的终端。
2.6 docker rm docker rmi
docker rm 删除容器;
docker rmi 删除镜像。
两者后面一般接需要删除的容器或者镜像的ID,删除镜像可以接镜像名:镜像标签。
docker rm -v $(docker ps -aq -f status=exited)
直接删除所有状态为exited的容器。
docker rmi -v $(docker images -aq )

当出现如下报错时,是指还有镜像与要删除的镜像有关联,无法删除。
docker image inspect --format='{{.RepoTags}} {{.Id}} {{.Parent}}' $(docker image ls -q --filter since=c69ebce270d4)

这样回输出镜像名称:镜像标签,和两个长ID前面为父镜像ID,后面为子镜像ID。
docker stop /docker start/docker restart/docker pause/docker unpause
2.7 docker stop /docker start/docker restart/docker pause/docker unpause
分别是停止容器,启动容器,重启容器,暂停容器,开启容器。
docker restart 是先执行docker stop 在执行docker start。
制作镜像(以tomcat为例)
镜像制作有两种方式分别是docker commit 和docker build。我们下面所涉及的是通过Dockerfile来制作镜像。
以tomcat9.0.67版本的包为例子制作镜像。
3.1 Dockerfile文件
Dockerfile文件是docker build 定制镜像的基础。
docker build -f xxx -t yyy:1.0 .
最后的 . 表示会调用当前目录的包。
-f 参数是指定Dockerfile的路径(如果是在当前目录下不需要指定;如果是在当前目录下且文件名非Dockerfile,需要指定文件)
-t 参数是指将制作好的镜像命名和标签(如果不写标签,标签将为latest)
不过在从网上的公共库中下载的镜像的标签为latest是指最新版本。


FROM 已centos:7为基础,制作镜像。
ADD 将jdk,tomcat 包放在/usr/local下,ADD会直接解压包。

COPY 和ADD用法一样。
COPY和ADD都是复制文件到镜像中,他们区别在于,如果ADD指定的文件是归档文件将会解压出来。
RUN 运行容器指定的命令,一般是下载一些必要的包,和一些基本的操作;
USER tomcat 这个是指将会以tomcat用户运行,不会是root用户,前提有这个用户
ENV 配置环境变量;
WORKDIR 设置工作目录;
EXPOSE 设置暴露的端口,要与tomcat设置的端口一致;
CMD 容器启动使的命令;
ENTRYPOINT 容器启动时的命令;
Dockerfile里面可以有多个CMD和ENTRYPOINT命令,但是都是只有最后一个生效;CMD会被docker run后面的参数替换;CMD或docker run之后的参数会被当做参数传递给ENTRYPOINT。
在制作镜像的时候尽量少一些命令,每一个RUN、ENV等都会使镜像的层数增加,这是不符合镜像的原则。
3.2 准备好需要的包

3.3 改包的名字(防止在使用镜像的时候暴露版本)



记住不能直接改压缩包的名字,否则解压出来的还是原来压缩包的名字。
3.4 更改配置文件
(更改配置文件的要求要根据基线的要求)
1)修改端口

修改server.xml 文件:

这里包含了两部分,第一部分是HTTP访问页面的配置:
port 是HTTP访问的端口;
maxHttpHeaderSize是HTTP请求和响应头的最大量,以字节为单位;
maxThreads是tomcat启动的最大线程数;
minSpareThreads当连接器第一次启协创建线程的数目,确保至少有这么多的空闲线程可用;
maxSpareThreads允许存在空闲线程的最大数目;
enableLookups是否反查域名,若设为true, 则支持域名解析,可把 ip 地址解析为主机名;
acceptCount 当所有的可能处理的线程都正在使用时,在队列中排队请求的最大数目,队列已满,任何接收到的请求都会被拒绝;
connectionTimeout设置连接的超时值,以毫秒为单位;
disableUploadTimeout允许Servlet容器,正在执行使用一个较长的连接超时值,以使Servlet有较长的时间来完成它的执行;
redirectPort在需要基于安全通道的场合,把客户请求转发到基于SSL的端口。
port是HTTPS访问的端口,与第一部分的redirectPort相同;
maxThreads是tomcat启动的最大线程数;
SSLEnabled启用HTTPS;
scheme设置协议的名字,SSL连接器设为”https”;
secure在SSL连接器可将其设置为true;
clientAuth设置是否对客户端进行HTTPS认证;
sslProtocol要使用的SSL协议;
keystoreFile存储了服务器HTTPS证书的keystore文件的位置;
keystorePass用于访问指定keystore文件的密码。


2)修改web.xml文件

修改结果如上,表示当 WEB 目录中没有默认首页如 index.html,index.jsp 等文件时,不会列出目录内容。

修改结果如上,表示禁用非法HTTP方法例如PUT、DELETE等。

添加如上字段,表示强制HTTP转HTTPS访问页面。

添加如上字段,表示tomcat的页面重定向,目录是tomcat目录下的/webapps/ROOT。
3)修改tomcat自带的版本信息
首先进入tomcat目录下的lib目录,找到改 catalina.jar。

将其解压:



修改成如下:



如上是tomcat修改了版本之后日志的输出。
4)禁用manager 权限

将tomcat目录下的webapps目录除了ROOT目录全部删除。

进入ROOT目录,并删除全部文件和目录。

创建如下文件:

error.jsp是错误重定向的页面;
index.html 是当无其他应用运行时的访问页面。
首先我们的证书是通过jdk制作的,所以需要保证我们的虚拟机有jdk环境否则无法运行命令。
添加jdk环境:

使环境生效,并测试是否成功。

证书制作:




为了方便这里的所有的口令都是一致的,而且这里的文件没有指定目录,将会在当前目录下生成。

本文作者:彭刚朝(上海新炬中北团队)
本文来源:“IT那活儿”公众号





