一、概述
从应用的角度来看,DockerFile、Images和Container分别代表软件的三个不同阶段。
DockerFile:软件的原材料(镜像构建脚本),面向开发
Images:软件交付产品,交付标准
Container:软件的运行状态,设计部署与运维
DokcerFile-image-container关系图
二、dockerfile保留字
FROM
:指定当前镜像是基于哪个镜像,即指定父镜像(相当于java extends 指定父类),第一条指令必须为 FROM 指令。并且,如果在同一个Dockerfile中创建多个镜像时,可以使用多个 FROM 指令(每个镜像一次)。
FROM 或FROM :
FROM centos
MAINTAINER
:指定镜像维护者名称和邮箱
MAINTAINER javacfox<javacfox@sina.com>
RUN
:容器构建时需要运行的命令
RUN
RUN ["executable", "param1", "param2"]
RUN yum -y install vim
EXPOSE
:指定当前容器对外暴露的端口
EXPOSE[...]
EXPOSE 8080
WORKDIR
:指定终端默认登录目录,通常和ENV搭配使用,为后续的 RUN、CMD、ENTRYPOINT 指令配置工作目录。可以使用多个 WORKDIR 指令,后续命令如果参数是相对路径,则会基于之前命令指定的路径
WORKDIR /path/to/workdir
WORKDIR /usr/local/tomcat
ENV
:用来在镜像构建过程中设置环境变量
ENV
ENV MYPATH /usr/local/tomcat WORKDIR $MYPATH
ADD
:将宿主机目录的文件复制到镜像中,自动URL处理和解压tar压缩包
ADD [宿主机目录或文件地址] [容器地址]
ADD tomcat.tar.gz /usr/local/tomcat
COPY
:拷贝宿主机文件和目录到镜像中
COPY [宿主机目录或文件地址] [容器地址]
COPY /opt/docker/host.txt /usr/local/tomcat/container.txt
将主机的host.txt文件内容复制到容器中container.txt中 9. VOLUME
:创建一个可以从本地主机或其他容器挂载的挂载点,一般用来存放数据库和需要保持的数据等
VOLUME [容器内路径]
VOLUME /usr/local/tomcat/webapps
CMD
:指定一个容器启动时要执行的命令(Dockerfile中可以有多条,但只有一条生效,且会被docker run之后的参数替换)
CMD ["executable","param1","param2"] 使用 exec 执行,推荐方式;
CMD command param1 param2 在 /bin/sh 中执行,提供给需要交互的应用;
CMD ["param1","param2"] 提供给 ENTRYPOINT 的默认参数;
CMD /usr/local/tomcat/bin/startup.sh && tail -f -n 200 /usr/local/tomcat/logs/catalina.out
==注意==:指定启动容器时执行的命令,每个 Dockerfile 只能有一条 CMD 命令。如果指定了多条命令,只有最后一条会被执行。如果用户启动容器时候指定了运行的命令,则会覆盖掉 CMD 指定的命令
ENTRYPOINT
:指定一个容器启动时要执行的命令(Docker run参数添加加到指令中,重新组合成新的指令)
ENTRYPOINT ["executable", "param1", "param2"]
ENTRYPOINT command param1 param2(shell中执行)
ENTRYPOINT /usr/local/tomcat/bin/startup.sh
ONBUILD
:当构建一个被继承的Dockerfile时运行命令,父镜像在被子镜像继承时触发
ONBUILD [INSTRUCTION]
ONBUILD ADD . /app/src ONBUILD RUN /usr/local/bin/python-build --dir /app/src
三、构建tomcat镜像
- 创建DockerFile,编写脚本
# 基于镜像centos FROM centos # 镜像维护者及其邮箱 MAINTAINER javacfox<javacfox@sina.com> # 把jdk和tomcat添加并解压到容器/usr/local路径中 ADD jdk-1.8-linux.tar.gz /usr/local ADD tomcat.tar.gz /usr/local # 安装vim编辑器 RUN yum install vim # 设置环境变量 ENV PATH /usr/local # 设置登录目录 WORKDIR $PATH # 配置jdk与tomcat环境变量 ENV JAVA_HOME /usr/local/jdk1.8.0_171 ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar ENV CATALINA_HOME /usr/local/tomcat ENV CATALINA_BASE /usr/local/tomcat ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin # 暴漏端口 EXPOSE 8080 # 启动时运行tomcat CMD /usr/local/tomcat/bin/startup.sh && tail -f -n 200 /usr/local/tomcat/logs/catalina.out
- 创建镜像
[root@localhost opt]# docker build -f /opt/DockerFile javacfox/mytomcat
- 创建容器并运行
[root@localhost ~]# docker run -d -p 8080:8080 --name tomcat01 javacfox/mytomcat