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