目录
- Dockerfile介绍
- Dockerfile常用指令
- 案例:构建tomcat镜像
Dockerfile介绍
Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明,每条指令都会创建一个新的镜像层并对镜像进行提交。
Dockerfile 一般分为四部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令,’#’ 为 Dockerfile 中的注释。
docker build
命令用于从Dockerfile构建映像。可以在docker build
命令中使用-f
标志指向文件系统中任何位置的Dockerfile。
docker build -f /path/to/a/Dockerfile
Dockerfile常用指令
- FROM
指定基础镜像,必须为第一个命令
- MAINTAINER
镜像时谁写的,姓名+邮箱
- RUN
容器构建时需要运行的命令,即在docker build时运行。
有shell格式(如RUN yum -y install vim
)和exec格式(RUN [“可执行文件”, “参数1”, “参数2”])两种。
- ADD
添加内容,将宿主机的目录文件拷贝到镜像,会自动处理URL和解压tar压缩包。
- WORKDIR
指定进入容器后的工作目录
- VOLUME
挂载目录
- EXPOSE
暴露端口
- CMD
指定容器启动的时候默认运行的命令,即CMD是在docker run 时运行。
Dockerfile 中可以有多个 CMD 指令,但只有最后一个生效。
CMD 会被 docker run 之后的参数替换(相当于指定了容器启动的时候运行的命令,不再使用CMD提供的命令了)。
- ENTRYPOINT
也是指定容器启动的时候运行的命令。可以追加命令。
ENTRYPOINT不会被docker run后面的命令覆盖,且docker run后面的命令行参数会被当作参数送给 ENTRYPOINT 指令指定的程序。
注意:当指定了ENTRYPOINT后,CMD的含义就发生了变化,不再是直接运行其命令而是将CMD的内容作为参数传递给ENTRYPOINT指令,他两个组合会变成<ENTRYPOINT> "<CMD>"
。
如下:
FROM nginx
ENTRYPOINT ["nginx", "-c"]
CMD ["/etc/nginx/nginx.conf"]
则实际运行命令会变成nginx -c /etc/nginx/nginx.conf
。
如果使用上面的dockerfile构建镜像,执行如下run命令时,
docker run nginx:test -c /etc/nginx/new.conf
实际是运行命令会变成nginx -c /etc/nginx/new.conf
。
- COPY
类似ADD,将文件拷贝到镜像中,不会自动解压。
- ENV
构建时设置环境变量,后面的run命令可以直接引用
案例:构建tomcat镜像
示例:使用Dockerfile构建tomcat
编写Dockerfile
FROM centos
MAINTAINER cys<cys@163.com>
COPY readme.txt /usr/local/readme.txt
# jdk-8u11-linux-x64.tar.gz和apache-tomcat-9.0.22.tar.gz都在当前Dockerfile所在文件夹
ADD jdk-8u11-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-9.0.22.tar.gz /usr/local/
# 安装vim
RUN yum -y install vim
ENV MYPATH /usr/local
WORKDIR $MYPATH
ENV JAVA_HOME /usr/local/jdk1.8.0_11
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.22
ENV CATALINA_BASH /usr/local/apache-tomcat-9.0.22
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:CATALINA_HOME/bin
EXPOSE 8080
# 启动容器后启动tomcat
CMD /usr/local/apache-tomcat-9.0.22/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.22/bin/logs/catalina.out
构建镜像
docker build -t diytomcat
然后运行镜像,启动容器
参考:https://www.cnblogs.com/panwenbin-logs/p/8007348.html