用Dockerfile定义tomcat容器

本文介绍了如何使用Dockerfile自动化定义Tomcat容器,包括FROM、RUN、CMD、LABEL、EXPOSE、ENV、ADD、ENTRYPOINT、VOLUME、USER、WORKDIR等指令的使用。还展示了如何在Dockerfile基础上创建Tomcat容器,并提供了创建tomcatserver.sh脚本的示例,以及挂载服务日志目录的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用dockerfile 好处就是自动化定义自己的容器。
可以参考官网
https://docs.docker.com/engine/reference/builder/
1.build使用方法

docker build -f /path/to/a/Dockerfile -t shykes/myapp:1.0.2 -t shykes/myapp:latest .

-f 指定dockerfile文件位置 , -t 指定new image 名称可以指定多个,可以加tag.
2.Dockerfile 使用说明
FROM

FROM <image>[:<tag>] [AS <name>]

合法的dockerfile文件必须以此开始
RUN
run 有两种方式

RUN <command> shell形式,命令运行在shell终端中,linux默认是/bin/sh -c
RUN ["executable", "param1", "param2"] exec 形式

例如:
RUN /bin/bash -c ‘echo hello’
就像在shell终端运行:/bin/bash -c ‘echo hello’
RUN [“/bin/bash”, “-c”, “echo hello”]
就像在shell终端运行:exec /bin/bash -c ‘echo hello’
CMD
主要目的是提供默认参数给容器,不过默认的也可以包括可执行命令。
cmd有三种形式

CMD ["executable","param1","param2"] (exec form, this is the preferred form)
CMD ["param1","param2"] (as default parameters to ENTRYPOINT)
CMD command param1 param2 (shell form)

第一种和第三种是可执行的,第二种就是提供默认参数给ENTRYPOINT
如果用户在 docker run 时指定参数,CMD中的就会被覆盖。

LABEL

LABEL <key>=<value> <key>=<value> <key>=<value> ...

存入关于image的一些元数据,以键值对存在。build完成可以用docker inspect 命令查看。
例如:

LABEL "com.example.vendor"="ACME Incorporated"
LABEL com.example.label-with-value="foo"
LABEL version="1.0"
LABEL description="This text illustrates \
that label-values can span multiple lines."
docker inspect <imagename>

可以看到以下信息

"Labels": {
    "com.example.vendor": "ACME Incorporated"
    "com.example.label-with-value": "foo",
    "version": "1.0",
    "description": "This text illustrates that label-values can span multiple lines.",
    "multi.label1": "value1",
    "multi.label2": "value2",
    "other": "value3"
},

MAINTAINER (deprecated)
表明作者,官网不推荐使用

MAINTAINER <name>

EXPOSE
对外暴露端口

EXPOSE <port> [<port>/<protocol>...]

ENV
设置环境变量

ENV <key> <value>

ADD
复制文件到指定位置,压缩文件会自动解压。

ADD <src>... <dest>
ADD ["<src>",... "<dest>"] (this form is required for paths containing whitespace)
ADD hom* /mydir/        # 添加以home开头的文件到 /mydir/下
ADD hom?.txt /mydir/    # ? 表示单个字符,例如 "home.txt"

是一个绝对路径,或相对于WORKDIR 的路径。为容器内部的某个路径

ADD test relativeDir/          # adds "test" to `WORKDIR`/relativeDir/
ADD test /absoluteDir/         # adds "test" to /absoluteDir/
COPY

复制本地主机的 (为 Dockerfile 所在目录的相对路径)到容器中的 。

当使用本地目录为源目录时,推荐使用 COPY。

COPY hom* /mydir/        # adds all files starting with "hom"
COPY hom?.txt /mydir/    # ? is replaced with any single character, e.g., "home.txt"

ENTRYPOINT
允许你配置run container 时可执行命令。
有两种方式配置

ENTRYPOINT ["executable", "param1", "param2"] (exec form, preferred)
ENTRYPOINT command param1 param2 (shell form)

CMD 和 ENTRYPOINT 差异
以下是转载:https://www.cnblogs.com/lienhua34/p/5170335.html
CMD指令指定的容器启动时命令可以被docker run指定的命令覆盖;而ENTRYPOINT指令指定的命令不能被覆盖,而是将docker run指定的参数当做ENTRYPOINT指定命令的参数。

VOLUME
官网解释:该命令用指定名字创建一个挂载点,将其标记为从本地主机或其他容器中进行外部装入的卷。主要是因为容器只是对镜像内容拷贝过来进行修改,如果容器被删除这种修改就不存在。运用挂载也可以作为宿主机和容器间数据共享。例如数据库,也需要使用挂载,将数据保存下来。
但是由于不能指定宿主机目录作为挂载点在Dockerfile文件中,只能通过 run 命令指定某个宿主机作为和container的挂载点。
详细解释:
http://blog.youkuaiyun.com/dream_broken/article/details/52314993

USER
指定运行容器时的用户名或 UID,后续的 RUN 也会使用指定用户。

USER <user>[:<group>] or
USER <UID>[:<GID>]

WORKDIR
为后续的 RUN、CMD、ENTRYPOINT 指令配置工作目录

WORKDIR /path/to/workdir

2.定义tomcat Dockerfile 文件。
在之前创建的sshd-centos 基础上修改。
sshd-centos :http://blog.youkuaiyun.com/tanzhang78/article/details/78628924
下载jdk8, tomcat 8 拷贝到/home/tanzhang

创建文件如下

# Use sshd-centos as a parent image
FROM sshd-centos

ADD ./jdk-8u144-linux-x64.tar.gz /usr/local/java
ADD ./apache-tomcat-8.5.23.tar.gz /usr/local/tomcat

ENV JAVA_HOME /usr/local/java/jdk1.8.0_144
ENV PATH $JAVA_HOME/bin:$PATH
ENV CLASSPATH .:$JAVA_HOME/lib
WORKDIR /usr/local/tomcat
RUN chmod +x apache-tomcat-8.5.23/bin/*.sh
RUN mkdir applogs
ADD ./tomcatserver.sh .
RUN chmod +x ./tomcatserver.sh
EXPOSE 8080
EXPOSE 22
CMD ["./tomcatserver.sh"]

将Dockerfile 文件拷贝到cd /home/tanzhang
创建tomcatserver.sh 脚本如下:

#!/bin/sh
#start ssh server
/usr/sbin/sshd
#start tomcat server
/usr/local/tomcat/apache-tomcat-8.5.23/bin/catalina.sh run >/usr/local/tomcat/applogs/startup.log 2>&1

cd /home/tanzhang

docker build -t custom-tomcat .

创建app/applogs 文件并赋予所有用户可读可写可执行权限,该目录用作日后挂载服务日志使用。
cd /usr/local/
mkdir -p app/applogs
chmod 777 app
chmod 777 app/*

 docker run --name=tomcat004 -it -p 18083:8080 -p 10024:22 -v /usr/local/app/applogs:/usr/local/tomcat/applogs custom-tomcat

-v 挂载宿主机目录到容器上。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值