Dockerfile是用来构建Docker镜像的构建文件,是一系列命令和参数构成的脚本
步骤
1、编写Dockerfile
2、build
3、run
Dockerfile语法
每条保留字指令都必须为大写字母且后面要跟随至少一个参数
指令按照从上到下,顺序执行
#表示注释
每条指令都会创建一个新的镜像层,并对镜像进行提交
执行流程
(1) docker从基础镜像运行一个容器
(2) 执行一案指令并对容器作出修改
(3) 执行类似docker commit的操作提交一个新的镜像层
(4) docker再基于刚提交的镜像运行一个新容器
(5) 执行dockerfile中的下一条指令直到所有指令都执行完成
保留字
FROM 基础镜像,当前新镜像是基于哪个镜像
MAINTAINER 镜像雏护者的姓名和邮箱地址
RUN 容器构建时需要运行的命令
EXPOSE 当前容器对外暴露出的端口
WORKDIR 指定在创建容器后,终端默认登陆的进来工作目录,一个落脚点
ENV 用来在构建镜像过程中设置环境变量
ADD 将宿主机目录下的文件拷贝进镜像且ADD命令会自动处理URL和解压tar压缩包
COPY 类似ADD,拷贝文件和目录到镜像中。将从构建上下文自录中<源路径>的文件!目录复制到新的一层的镜像内的<目标路径>位置
VOLUME 容器数据卷,保存数据,持久化
CMD 指定容器启动时要运行的命令,可以有多个CMD命令,但是只有最后一个生效,会被docker run 之后的参数替换
ENTRYPOINT 跟cmd类似,但是不会被docker run之后的参数替换,而是追加到后面执行。
ONBUILD 当构建一个被继承的Dockerfile时运行命令,父镜像在被子继承后父镜像的onbuild被触发
例子,在centos里安装vim ifconfig。工作目录在tmp目录下。
FROM centos
MAINTAINER long<long275@126.com>
ENV MYPATH /tmp
WORKDIR $MYPATH
RUN yum -y install vim
RUN yum -y install net-tools
EXPOSE 80
CMD echo $MYPATH
CMD echo "success-----ok"
CMD /bin/bash
创建tomcat环境
FROM centos
MLAINTAINER long<long275@126.com>
#把宿主机当前上下文的c.txt拷贝到容器/usr/local/路径下
COPY c.txt /usr/local/cincontainer.txt
#把javatomcat添加到容器中
ADD jdk-8u171-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-9.8.8.tar.gz/usr/local/
#安装vim编辑器
RUN yum-y install vim
#凌置工作访问时候的WORKDIR路径,登录落脚点
ENV MYPATH /usr/local
WORKDIR $MYPATH
#配置javatomcat环境变量
ENV JAVA_HOME /usr/local/jdk1.8.0_171
ENV CLASSPATH $JAVA_HOME /1ib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOMIE /usr/local/apache-tomcat-9.0.8
ENV CATALINA_BASE /usr/local/apache-tomcat-9.0.8
ENV PATH $PATH:$]AVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOMIE/bin
#容器运行时监听的端口
EXPOSE 8080
#启动时运行tomcat
#ENTRYPOINT ["/usr/local/apache-tomcat-9.0.8/bin/startup.sh” ]
# CMD ["/usr/iocal/apache-tomcat-9.0.8/bin/catalina.sh", "run"]
CMD /usr/local/apache-tomcat-9.0.8/bin/startup.sh && tail -F jusr/local/apache-tomcat-9.0.8/bin/logs/catalina.out
运行mysql容器
docker run -d -p 9880:8080 --name myt9 -v /zzyyuse/mydockerfile/tomcat9/test:/usr/local/apache-tomcat-9.0.8/webapps/test -v /zzyyuse/mydockerfile/tomcat9/tomcat9logs/:/usr/local/apache-tomcat-9.0.8/logs --privileged=true zzyytomcat9
运行redis
docker run -p 6379:6379 -v /zzyyuse/myredis/data:/data -v /zzyyuse/myredis/conf/redis.conf/usr/lca/etc/redis/redis.conf -d redis:3.2 redis-server /usr/loca/etc/redis/redis.conf -appendonly yes