使用Docker部署一个以Tomcat 为服务器的支持HTTPS的web站点。其原理和在普通服务器上部署类似,只需要将自己开发的软件包放到Tomcat 工程目录下即可。不同的是,Tomcat服务器要在容器中启动,相应的工程源码也要导入到容器中。

1.选择基础镜像

    docker pull tomcat   
    docker pull -a tomcat    #把tomcat的所有版本都pull下来

2.制作HTTPS服务器镜像

部署一个HTTPS WEB站点,第一步就是要让HTTP的Tomcat基础镜像支持HTTPS。
(1)生成HTTPS所需要的证书:

keytool -genkeypair \
    -alias tomcat \
    -keyalg RSA \
    -keysize 4096 \
    -keypass 123456 \
    -dname "cn=localhost,ou=localhost,o=localhost,l=tj,st=tj,c=CN" \
    -validity 365 \
    -keystore tomcat.keystore \
    -storepass 123456

参数说明:

-alias:密钥的别名,可以是任意字符,只要不提示错误即可。因一个证书库中可以存放多个证书,通过别名标识证书。
-keyalg:密钥的算法。可以选择的密钥算法有:RSA、DSA、EC。
–keysize:密钥长度。keysize与keyalg默认对应关系: 
    2048 (when using -genkeypair and -keyalg is “RSA”) 
    1024 (when using -genkeypair and -keyalg is “DSA”) 
    256 (when using -genkeypair and -keyalg is “EC”)        
-keypass:私有密钥的密码
-dname:”CN=名字与姓氏/域名,OU=组织单位名称,O=组织名称,L=城市或区域名称,ST=州或省份名称,C=单位的两字母国家代码”
-validity:证书有效期天数
-keystore:指定生成证书的位置和证书名称
-storepass:获取keystore信息的密码

(2)把证书导入镜像中:

[root@docker ssl]# docker run -it -v /root/ssl/:/tmp/ tomcat bash
root@8f8c200f632c:/usr/local/tomcat# ls
LICENSE  NOTICE  RELEASE-NOTES  RUNNING.txt  bin  conf  include  lib  logs  native-jni-lib  temp  webapps  work
root@8f8c200f632c:/usr/local/tomcat# ls /tmp/
tomcat.keystore
root@8f8c200f632c:/usr/local/tomcat# mkdir keys
root@8f8c200f632c:/usr/local/tomcat# cp /tmp/tomcat.keystore keys/  

(3)修改tomcat配置并commit:

<Connector port="8080" protocol="HTTP/1.1"
     connectionTimeout="20000"
     redirectPort="8443" 
     SSLEnabled="true" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS" keystoreFile="/usr/local/tomcat/keys/tomcat.keystore" keystorePass="123456" /> 
docker commit 8f8c200f632c tomcat:https

(4)验证基础镜像

# docker images
REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE
tomcat                  https               aac3c4e9f473        11 seconds ago      465 MB

# docker run -it -p 80:8080 tomcat:https 
root@18434c731300:/usr/local/tomcat# ./bin/startup.sh 
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /docker-java-home/jre
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started. 

当使用docker run 命令不加任何启动命令的时候,默认执行容器的ENTRYPOINTCMD指令所指定的命令,该命令是在镜像制作的时候指定的。所以建议在制作镜像的时候,为服务性镜像提供默认的启动命令

web浏览器访问:
这里写图片描述

3.将web源码导入tomcat镜像中
(1)静态导入:将文件复制一份到镜像中,在制作镜像的时候完整的。

COPY  ./websrc   /usr/local/tomcat/webapps/myproj/

(2)动态挂载:把服务器上的文件动态地挂载到容器中。需要在制作镜像时创建一个挂载点,然后在启动镜像时把文件动态的挂载到容器中。(方便调试)

RUN mkdir -p /usr/local/tomcat/webapps/myproj
VOLUME /usr/local/tomcat/webapps/myproj

docker run -ti -v $(pwd)/websrc:/usr/local/tomcat/webapps/myproj

可以在工程目录下创建两个Dockerfile,一个用于发布版本采用静态导入的方式,另一个用于调试使用动态挂载的方式。
编译时可以通过docker build -f 选项指定需要的Dockerfile。

以动态挂载为例说明:

#编写Dockerfile
FROM tomcat:https
RUN mkdir -p /usr/local/tomcat/webapps/myproj
VOLUME /usr/local/tomcat/webapps/myproj
EXPOSE 8080
CMD /usr/local/tomcat/bin/catalina.sh run

#构建镜像
docker build -t myweb:v1 .

# docker images
REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE
myweb                   v1                  f40f6544cde6        9 seconds ago       465 MB

4.部署与验证

#启动容器
docker run -d -p 80:8080 -v websrc:/usr/local/tomcat/webapps/myproj myweb:v1

容器启动完成后就可以通过Chrome等浏览器访问该站点了

参考链接:
https://blog.csdn.net/sayyy/article/details/78351512
https://www.cnblogs.com/zhangzb/p/5200418.html
https://blog.csdn.net/szzt_lingpeng/article/details/51247980
https://blog.csdn.net/jy_he/article/details/51838566

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐