dockerfile
容器构建文件
----基本讲解:
1.每条保留字指令都必须为大写字母且后面要跟随至少一个参数
2.指令按顺序执行
3.#表示注释
4.每条指令都会建立一个镜像层,而且提交,终端会按步骤显示
----执行步骤:
1.docker从基础镜像运行一个容器
2.执行一条指令并对容器作出修改
3.执行相似docker commit的操做提交镜像层
4.docker再基于刚提交的镜像运行一个新容器
5.执行dockerfile中的下一条指令直到执行完毕
dockerfile体系结构(保留字指令)
FROM 基础镜像
MAINTAINER 镜像做者信息
RUN 容器须要运行的指令
EXPOSE 容器对外端口号
WORKDIR 进入镜像后的登录目录
ENV 用来构建镜像过程当中设置环境变量
ADD 将宿主机文件拷贝进镜像且ADD会自动解压缩包和处理URL连接
COPY 将从构建上下文目录中<源路径>的文件/目录复制到新的一层的镜像内的<目标路径>
VOLUME 容器数据卷,用于数据保存和持久化
CMD 指定一个容器启动时要运行的命令(dockerfile中能够写多个CMD指令,但只有最后一个生效,CMD会被docker run以后的参数替换)
ENTRYPOINT 指定一个容器启动时要运行的命令(和CMD同样,都是在指定容器启动程序及参数)
ONBUILD 当构建一个被继承的dockerfile时运行命令,父镜像在被子继承后父镜像的onbuild被触发
##实例一:
vim /mydocker/Dockerile02
FROM centos
MAINTAINER redrain<redrain@163.com>
ENV mypath /tmp
WORKDIR $mypath
RUN yum -y install net-tools vim
EXPOSE 80
CMD echo $mypath
CMD echo -e "\033[32mpath-set sucess----------ok\033[0m"\\n"\033[32minstall net-tools vim success---------ok\033[0m"
CMD /bin/bash
#建立镜像,须要引用已有的centos镜像
docker build -f /mydocker/Dockerfile02 -t mycentos:1.2 .
cat >>/.bash_profile<<EOF
export MAVEN_HOME=/usr/local/maven
export PATH=$MAVEN_HOME/bin:$PATH
EOF
##实例二:
#CMD与ENTRYPOINT的区别:
vim /mydocker/Dockerile03
FROM centos
RUN yum install curl -y
CMD [ "curl", "-s", "https://ip.cn" ]
打包镜像一:
docker build -f /mydocker/Dockerile03 -t ipself .
运行镜像:
#这里会得到本身的IP
docker run ifself
#此处加参数启动就没法执行,报错参数没法执行,由于已经覆盖dockerfile中的CMD指令
docker run ipself -i
报错内容:docker: Error response from daemon: OCI runtime create failed: container_linux.go:344: starting container process caused "exec: \"-i\": executable file not found in $PATH": unknown
vim /mydocker/Dockerile04
FROM centos
RUN yum install curl -y
ENTRYPOINT [ "curl", "-s", "https://ip.cn" ]
打包镜像二:
docker build -f /mydocker/Dockerile04 -t ipself2 .
运行镜像:
#这里会得到本身的IP
docker run ipself2
#此处加参数可正常启动,它会将后面的-i参数传递进ENTRYPOINT中
docker run ipself -i
##实例三:
mkdir /dockerapp/tomcat/{test,tomcatlogs} -p
cd /dockerapp/tomcat
在/dockerapp/tomcat目录下放入jdk和tomcat的对应版本的压缩包
vim Dockerfie
####
FROM centos
MAINTAINER redrain<2477835252@qq.com>
COPY c.txt /usr/local/cincontainer.txt
ADD jdk-8u201-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-9.0.16.tar.gz /usr/local/
RUN yum install vim -y
ENV MYPATH /usr/local
WORKDIR $MYPATH
ENV JAVA_HOME /usr/local/jdk1.8.0_201
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.16
ENV CATALINA_BASE /usr/local/apache-tomcat-9.0.16
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
EXPOSE 8080
#ENTRYPOINT [ "/usr/local/apache-tomcat-9.0.16/bin/catalina.sh" ]
#CMD [ "/usr/local/apache-tomcat-9.0.16/bin/catalina.sh","run" ]
CMD /usr/local/apache-tomcat-9.0.16/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.16/bin/logs/catalina.out
#启动容器同步对应卷
docker run -d -p 8080:8080 --name tomcat8080 -v /dockerapp/tomcat/test:/usr/local/apache-tomcat-9.0.16/webapps/test -v /dockerapp/tomcat/tomcatlogs/:/usr/local/apache-tomcat-9.0.16/logs --privileged=true tomcat8080