Docker制作tomcat镜像之Dockerfile

摘要:
如果容器已停止并需要自动启动,请使用dockerrun-restartalways参数写入dockerfile nginx,如下所示:FROMnginx#Delay 5s

基于CentOS7、Tomcat1.7、JDK1.8制作Tomcat镜像

1.拉取centos7镜像

docker pull centos:centos7

2.将jdk1.8和tomcat1.7解压到 /data1/software目录下

   Docker制作tomcat镜像之Dockerfile第1张

3.编写Dockerfile,命名为dockerfile-tomcat,内容如下:

Docker制作tomcat镜像之Dockerfile第2张

FROM centos:centos7
MAINTAINER m01
#RUN mkdir /usr/local/java && \
# mkdir /usr/local/tomcat #将tomcat和jdk下的所有文件拷贝到镜像中,目标目录不存在会自动创建。COPY源目录不能使用/data1/sofotware/apache-,无法识别 COPY apache
-tomcat-7.0.64 /usr/local/tomcat COPY jdk1.8.0_73 /usr/local/java
#ADD apache-tomcat-7.0.64.tar.gz /usr/local/tomcat/ #会将其自动解压到镜像的/usr/local/tomcat/apache-tomcat-7.0.64目录下,.sh没有执行权限
#拷贝过去的文件没有可执行权限 RUN
chmod a+x /usr/local/tomcat/bin/*.sh #添加环境变量 ENV JAVA_HOME /usr/local/java ENV CATALINA_HOME /usr/local/tomcat ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/bin ENV CLASSPATH .:$JAVA_HOME/lib:$JAVA_HOME/jre/lib EXPOSE 8080 CMD ["/usr/local/tomcat/bin/catalina.sh","run"]
#Dockerfile设置多个环境变量
ENV JAVA_HOME=/usr/local/java  \
    CATALINA_HOME=/usr/local/tomcat
#因为下面要调用上面生成的环境变量,所以必须要分开写,写一起后面无法生效
ENV PATH=$PATH:$JAVA_HOME/bin:$CATALINA_HOME/bin  CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib

4.运行docker build生成镜像

docker build -t centos7_tomcat7:v1 -f dockerfile-tomcat ..  # 最后的..指定工作目录,使其能够找到COPY的源目录

Docker制作tomcat镜像之Dockerfile第3张

 5.查看新生成的Tomcat镜像

Docker制作tomcat镜像之Dockerfile第4张

 6.启动容器:

docker container run  -d -p 8080:8080 --name tomcat01 -d centos7_tomcat7:v1

部署jenkins

从jenkins官网下载jenkins.war放到宿主/data1/software/下

编辑dockerfile-tomcat-jenkins,基于前面的tomcat镜像生成新的jenkins镜像,内容如下:

FROM centos7_tomcat7:v1
COPY jenkins.war /usr/local/tomcat/webapps/jenkins.war

docker build -t jenkins:v1 -f dockerfile-tomcat-jenkins ..    #生成jenkins镜像

docker run -d -p 8090:8080 --name jenkins01 jenkins:v1  #启动jenkins容器

访问:http://宿主IP:8090/jenkins可以正常打开jenkins页面

#将容器中的tomcat log映射到宿主机/data1/logs/tomcat05,容器启动后可以在/data1/logs/tomcat05目录下看到tomcat日志

docker run -d -p 8091:8080 --name jenkins05 --mount type=bind,source=/data1/logs/tomcat05,target=/usr/local/tomcat/logs -d jenkins:v1

====================================================================================================================

docker container run  -d -p 8080:8080 --name tomcat01 -d centos7_tomcat7:v1

docker cp jenkins.war tomcat01:/usr/local/tomcat/webapps/jenkins.war  #借助前面已生成的容器,将jenkins.war包拷贝进去也可以正常使用

重新启动容器tomcat01,访问http://宿主IP:8080/jenkins可以正常打开jenkins页面

=================================================================================

编写高效Dockerfile:https://blog.fundebug.com/2017/05/15/write-excellent-dockerfile/

#dockerfile拷贝多个文件到./
COPY ["filea", "fileb", "filec", "filed", "./"]

COPY ["dira", "dirb", "./"] #只会将目录a和目录b下的所有文件都拷贝到./,不会包含目录a和目录b本身

Dockerfile中的ARG参数只在构建docker镜像时有效,在镜像创建了并用该镜像启动容器后则无效。但可以配合ENV指令使用使其在创建后的容器也可以生效

FROM ubuntu
ARG TEST   #ARG TEST=deault_value
ENV ENV_TEST=$TEST

docker build --build-arg TEST=1 -t ubuntu:test-build -f ./dockerfile .

docker run --rm -it ubuntu:test-build
env|grep "TEST"

 Dockerfile VOLUME应用:

FROM alpine
VOLUME ["/data1","/data2"] #创建两个挂载点,但无法指定宿主具体目录,创建容器的时候自动生成

docker build -t alpine01 -f df01 .

docker container run -it --name alpine03 -d alpine01 /bin/sh

docker inspect alpine03:

Docker制作tomcat镜像之Dockerfile第5张

  效果等同于 docker run --name test1 -it -v /data1 ubuntu /bin/bash

 Dockerfile HEALTHCHECK应用:

HEALTHCHECK只是用来检查容器健康状态,应用场景:容器还在运行中,监控服务是否已经假死

如果容器已停止,需要自启动,则使用docker run --restart always参数

编写dockerfile-nginx,内容如下:

FROM nginx
#延迟5s才开始检查,留给容器一个启动时间;每10s检查一次;检查命令超时时间为3s,重试3次都失败,则认为容器是unhealthy状态
HEALTHCHECK --start-period=5s --interval=10s --timeout=3s --retries=3 \
#检查80端口,如果失败则返回1,返回非零状态码Docker就会认为当前容器的状态是不健康的
CMD curl -sS 'http://localhost:80' || exit 1   #使用脚本检查:CMD /bin/bash /opt/check80.sh

check80.sh脚本内容如下:

Docker制作tomcat镜像之Dockerfile第6张Docker制作tomcat镜像之Dockerfile第7张
curl -sS 'http://localhost:80' > /dev/null
if [ $? == 0 ];then
  exit 0
else
  exit 1
fi
View Code

docker build -t nginx_test:v2 -f dockerfile-nginx01 .

docker run --name nginx01 -d nginx_test:v2

Docker制作tomcat镜像之Dockerfile第8张

免责声明:文章转载自《Docker制作tomcat镜像之Dockerfile》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Linux安全加固手册Opencv 图像叠加 添加水印下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

在docker中安装宝塔

docker安装宝塔 docker rm -f baota76 mkdir -p /home/baota76/bt.cn/backup mkdir -p /home/baota76/bt.cn/server/cron mkdir -p /home/baota76/bt.cn/server/data mkdir -p /home/baota76/bt.cn...

(三)轻量级文件服务器filebrowser

既然资料都热备好了,那在外面还想看看资料,怎么办呢? 机器好的,上个nextcloud或者owncloud,我的需求只要能下载能上传即可,要不了那么多的功能,所以此处推荐一个轻量级文件服务器filebrowser。 filebrowser在GitHub上也有6.6K的star,虽然不维护了,但论基本功能却已足够。 依然是熟悉的docker化部署: 选择哪...

DockerFile与镜像(Image)仓库

深入Docker 之 Image: 当我们使用docker pull mysql 这个命令获取镜像的时候,到底他是怎么做的?我们登录官方提供的仓库看一下 https://github.com/docker-library. 我们搜索mysql并且选择对应的版本,比如 5.7 我们会看到改目录下只有两个文件,其中最重要的则是这个Dockerfile 文件了...

Android-SDK国内更新镜像及设置

Android SDK在线更新镜像服务器 中国科学院开源协会镜像站地址: IPV4/IPV6: http://mirrors.opencas.cn 端口:80 IPV4/IPV6: http://mirrors.opencas.org 端口:80 IPV4/IPV6: http://mirrors.opencas.ac.cn 端口:80 上海...

再谈容器与虚拟机的那点事

容器技术起源于虚拟化技术的发展,欣欣向荣的 Docker 着实是容器技术潮流中的一朵十分耀眼的浪花。在 Docker 诞生之初,它常常被放在虚拟机技术的对立面,甚至还有过 Docker 将替代虚拟机的夸大宣传,在许多集群以及虚拟化方案设计的讨论中,也总会将两者拿来比较一番利弊。 现如今 Docker 已经比较普及,这些曾经的传言不攻而破。容器以及 Dock...

Docker 容器日志管理

Docker 日志分为两类: Docker 引擎日志(也就是 dockerd 运行时的日志), 容器的日志,容器内的服务产生的日志。 一 、Docker 引擎日志 Docker 引擎日志一般是交给了 Upstart(Ubuntu 14.04) 或者 systemd (CentOS 7, Ubuntu 16.04)。前者一般位于 /var/log/ups...