编写的Dockerfile文件越少越好,要用尽量少的命令完成
docker build -t bushttpd:v0.1-1 ./ 把当前文件编译成镜像bushttpd:v0.1-1
FROM 指令是最重要的一个且必须为Dockerfile文件开篇的第一个非注释行,用于为映像文件构建过程指定基准镜像,后续的指令运行的指令运行于此基准镜像所提供的运行环境
ENV 用于为镜像定义所需的环境变量,并可被Dockerfile文件中位于其他(如ENV、ADD、COPY等)所调用,支持设置默认参数${var:-word}
MAINANIER 用于让Dockerfile制作者提供本人的详细信息
LABEL 为镜像提供一些元数据,以<key>=<value>形式配置
COPY 用于从Docker主机复制文件至创建的新映像文件,如果源文件是目录,目录本身不会被复制,只会复制目录里面的文件
ADD 指令类似于COPY指令,ADD支持使用TAR文件和URL路径
WORKDIR 用于为Dockerfile中所有的RUN/CMD/ENTRYPOINT/COPY和ADD指定设定工作目录,设定镜像中当前目录./
VOLUME 用于在image中创建一个挂载点目录,以挂载Docker host 上的卷或其它容器上的卷,如果挂载点有文件存在,会将文件复制到新挂载点中。
EXPOSE 用于为容器打开指定要监听的端口以实现与外部通信,运行容器时需要加 -P参数才能生效,如果需要指定开放映射端口还需要使用-p
RUN 构建镜像时要执行的命令,在build过程中执行
CMD 镜像文件起动为容器时,默认要运行的程序, 只能运行一个
ENTRYPOINT 类似CMD指令的功能,用于为容器指定默认运行程序,从而使得容器像是一个单独的可执行程序,与CMD不同的是,由ENTRYPOINT 启动的程序不会被docker run命令行指定的参数所覆盖,而且,这些命令行参数会被作参数传递给ENTRYPOINT指定的程序
docker run 命令传入的命令参数会覆盖CMD指令的内容并且附加到ENTRYPOINT命令最后做为其参数使用
USER 用于指定运行image时的或运行Dockerfile中运行任何RUN、CMD、或ENTRYPOINT指令指定程序时的用户名或UID
1、实例一
FROM busybox:latest
LABEL maintainer="ceingling"
ENV DOC_ROOT=/data/html/ \
WEB_SERVER_PACKAGE="nginx-1.15.2"
VOLUME /data/html/
WORKDIR /usr/local/
#ADD http://nginx.org/download/nginx-1.15.2.tar.gz ./src/
COPY ${WEB_SERVER_PACKAGE}.tar.gz ./src/
COPY index.html ${DOC_ROOT:-/data/html/}
EXPOSE 80/tcp
RUN cd ./src/ && tar xf ${WEB_SERVER_PACKAGE}.tar.gz
2、实例二
FROM nginx:1.15-alpine
LABEL maintainer="ceiling"
ENV NGX_DOC_ROOT='/data/html/'
ADD index.html ${NGX_DOC_ROOT}
ADD entrypoint.sh /bin/
RUN chmod +x /bin/entrypoint.sh
CMD ["/usr/sbin/nginx","-g","daemon off;"]
ENTRYPOINT ["/bin/entrypoint.sh"]
entrypoint.sh 脚本
#!/bin/sh
cat> /etc/nginx/conf.d/www.conf << EOF
server {
server_name ${HOSTNAME};
listen ${IP:-0.0.0.0}:${PORT:-80};
root ${NGX_DOC_ROOT:-/usr/share/nginx/html};
}
EOF
exec "$@"
#执行docker run
docker run --name myweb2 --rm -e "PORT=8080" -P myweb:v0.1-2 #-e 传递参数给容器
3、实例三 tomcat安装
FROM centos:7
WORKDIR /usr/local/
COPY apache-tomcat-8.5.35.tar.gz ./src/
COPY jdk-8u191-linux-x64.tar.gz ./src/
ADD entrypoint.sh /entrypoint.sh
RUN cd ./src && tar xf apache-tomcat-8.5.35.tar.gz
RUN cd ./src && tar xf jdk-8u191-linux-x64.tar.gz
RUN cd ./src/apache-tomcat-8.5.35/webapps/ROOT && rm -rf ./*
ENTRYPOINT /entrypoint.sh
entrypoint.sh 脚本
#!/bin/bash
export JAVA_HOME=/usr/local/src/jdk1.8.0_191/
export CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/jar/tools.jar:$JAVA_HOME/jre/lib
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
sh /usr/local/src/apache-tomcat-8.5.35/bin/catalina.sh run
编译镜像:
docker build . -t ceilnglinux/tomcat_test:v1
启动容器:
docker run -d -p8080:8080 -v /data/tomcat/:/usr/local/src/apache-tomcat-8.5.35/webapps/ROOT ceilnglinux /tomcat_test:v1