目录
含义:其是用来构建docker镜像的文本文件,是由一条条构建镜像所需的指令和参数构成的脚本
前言:
语法:FROM 基础镜像
若在同一个Dockerfile中构建多个镜像,可以使用很多FROM命令
- FROM
- FROM
:
前言:用于指定生成镜像的作者名称
语法:MAINTAINER
作用:基于该镜像环境下执行命令,并提交到该镜像
语法:RUN
- FROM nginx:latest
- RUN apt-get update
- RUN apt-get install -y iproute2
- RUN apt-get install -y net-tools
- RUN apt-get install -y iputils-ping
- EXPOSE 80
如上就是为nginx镜像添加功能使用的
注意:
作用:对外暴露该容器开放的端口
语法:EXPOSE 端口号
注意:Dockerfile中的EXPOSE仅仅是标记信息,并不能真正打开端口,仅仅是为了增加可读性。完全可以省略
作用:
语法:WORKDIR 容器内路径
作用:用于设定docker容器内的环境变量供以后使用。
语法:ENV 环境变量名 环境变量值
注意:设置好环境变脸后就可以在后面复用了,复用方式$环境变量名
作用:将宿主机目录下的文件拷贝至镜像,且ADD命令会自动处理URL和解压tar压缩包
语法:ADD 宿主机的文件/目录 镜像目录
作用:将主机的目录或文件拷贝至镜像中,但是相对于ADD来说不会解压缩
语法:COPY 宿主机的文件/目录 镜像目录
作用:挂载数据卷,将宿主机的目录和容器中的目录实现挂载,可实现持久化作用
语法:VOLUME ["容器中挂载路径1","容器中挂载路径2"……]
注意:
作用:指定运行容器时的用户和用户组
语法:USER 用户名
注意:
作用:当构建一个被继承的Dockerfile时运行的命令,父镜像在被子继承后父镜像的onbuild被触发
语法:ONBUILD 具体指令
理解:
作用:指定一个容器启动时要运行的命令
语法1:CMD command param1 param2
语法2:CMD ["要运行的程序","参数1",“参数2”]
注意:Dockerfile文件中只能执行一条CMD命令,若写多条,那么只有最后一个CMD命令被执行
作用:指定一个容器启动时要运行的命令
语法1:ENTRYPOINT command param1 param2
语法2:ENTRYPOINT ["要运行的程序","参数1",“参数2”]
注意:Dockerfile文件中只能执行一条ENTRYPOINT命令,若写多条,那么只有最后一个ENTRYPOINT命令被执行。
dockerfile1文件
FROM centos
CMD ["ls","-a"]或ENTRYPOINT ["ls","-a"]
构建镜像:docker build -f dockerfile1 -t cmdtest .
执行:docker run cmdtest
结果:用CMD的启动之后就执行ls -a命令,但是在后面加-l(docker run cmdtest -l)就会报错,
用ENTRYPOINT的启动之后就执行ls -a命令,但是在后面加-l就会追加-l(在命令台输入的命令就为cmd命令)
需求:为centos加vim与net-tools插件与jdk8
编辑Dockerfile文件:vim Dockerfile1
这里我写的dockerfile名为Dockerfile1
- #centos作为基础镜像
- FROM centos:7
- #书写具体的个人信息
- MAINTAINER cjc<1111111111@qq.com>
- #配置环境(键值对形式)
- ENV MYPATH /usr/local
- #配置工作目录,进入容器后就会自动进入该目录
- WORKDIR $MYPATH
- #基于以上镜像执行命令并提交到新镜像中
- RUN yum -y install vim
- RUN yum -y install net-tools
- #安装java8及lib库
- RUN yum -y install glibc.i686
- RUN mkdir /usr/local/java
- #将源文件复制到目标文件
- ADD jdk-8u51-linux-x64.tar.gz /usr/local/java/
- #配置java环境变量
- ENV JAVA_HOME /usr/local/java/jdk1.8.0_51
- ENV JRE_HOME $JAVA_HOME/jre
- ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
- ENV PATH JAVA_HOME/bin:$PATH
- #暴露端口80
- EXPOSE 80
- #执行启动容器时要运行的脚本
- CMD echo $MYPATH
- CMD echo "---end---"
- CMD /bin/bash
构建镜像:docker build -f Dockerfile1 -t centosadd:1.0 .
注意: