dockerFile演示以及语法详解
文章目录
1、dockerFile简单演示
1.1、我们以tomcat为例,首先我们下载一个tomcat的镜像
docker pull tomcat
1.2、创建Dockerfile文件
touch Dockerfile
1.3、写入如下内容
FROM tomcat
WORKDIR /usr/local/tomcat/webapps/ROOT/
RUN rm -rf *
RUN echo "test tomcat " > /usr/local/tomcat/webapps/ROOT/index.html
1.4、构建镜像
docker build -t mytomcat .
注意:
build命令,是在有dockerfile文件的目录执行
在build命令的最后,有一个.
,这个点,表示当前的上下文路径,怎么理解这个.
所表示的路径,举例说明吧。
#查看当前路径 /Users/liqi/docker
pwd
#如果我在当前的/Users/liqi/docker路径下,执行
docker build -t mytomcat .
#那么/Users/liqi/docker就是我的当前路径,每次构建的时候,都会从当前路径,下找到Dockerfile文件,以及包含的其他,例如jar包;
#比如说,docker文件夹下,还有一个test目录,test目录里,放了Dockerfile文件;那么最后的路径就是
docker build -t mytomcat ./test
#表示的从当前上下文环境下的test目录下
简单点说,就是以/Users/liqi/docker目录为起点目录,以起点目录下开始的相对路径
1.5、执行构建的镜像,并查看内容 http://localhost:8080/
docker run -p 8081:8080 -d mytomcat
至此,一个简单的镜像就构建并运行起来了。
1.6、上述Dockerfile语法解析
FROM
是指定的基础镜像,因此一个 Dockerfile
中 FROM
是必备的指令,并且必须是第一条指令。
FROM scratch
除了选择现有镜像为基础镜像外,Docker 还存在一个特殊的镜像,名为 scratch
。这个镜像是虚拟的概念,并不实际存在,它表示一个空白的镜像。
WORKDIR /usr/local/tomcat/webapps/ROOT/
指令相当于 RUN cd /usr/local/tomcat/webapps/ROOT/
改变目录,尽量使用绝对路径,不要用RUN cd;主要是为了指定工作目录。
RUN
指令是用来执行命令行命令的。一个run指令就是一个镜像分层。具体有两种形式的写法
- shell 格式:
RUN <命令>
,就像直接在命令行中输入的命令一样。刚才写的 Dockerfile 中的RUN
指令就是这种格式。 - exec 格式:
RUN ["可执行文件", "参数1", "参数2"]
,这更像是函数调用中的格式。
需要注意的是,Dockerfile 中每一个指令都会建立一个镜像的分层。如果需要多行shell命令运行的,可以使用\
和&&
符号对多行shell进行拼接,例如对redis包操作,如下所示:
RUN wget -O redis.tar.gz "http://download.redis.io/releases/redis-3.2.5.tar.gz" \
&& mkdir -p /usr/src/redis \
&& tar -zxf redis.tar.gz -C /usr/src/redis \
&& make -C /usr/src/redis \
&& make -C /usr/src/redis install \
&& rm -rf /var/lib/apt/lists/* \
&& rm redis.tar.gz \
&& rm -r /usr/src/redis \
2、详细dockerFile 语法
FROM scratch #制作base image 基础镜像,尽量使用官方的image作为base image
FROM centos #使用base image
FROM ubuntu:14.04 #带有tag的base image
LABEL version=“1.0” #容器元信息,帮助信息,Metadata,类似于代码注释
LABEL maintainer=“test@163.com"
#对于复杂的RUN命令,避免无用的分层,多条命令用反斜线换行,合成一条命令!
RUN yum update && yum install -y vim
Python-dev #反斜线换行
WORKDIR /root #相当于linux的cd命令,改变目录,尽量使用绝对路径!!!不要用RUN cd
WORKDIR /test # 如果没有就自动创建
WORKDIR demo # 再进入demo文件夹
RUN pwd # 打印结果应该是/test/demo
COPY package.json /usr/app/ #将从构建上下文目录中 <源路径> 的文件/目录复制到镜像内的 <目标路径> 位置。
ADD hello / # 把本地文件添加到镜像中,吧本地的hello可执行文件拷贝到镜像的/目录
ADD test.tar.gz / # 添加到根目录并解压
#ADD与COPY:优先使用COPY命令 ADD除了COPY功能还有解压功能
ENV # 环境变量,尽可能使用ENV增加可维护性
ENV MYSQL_VERSION 5.6 # 设置一个mysql常量
RUN yum install -y mysql-server=“${MYSQL_VERSION}”
EXPOSE #暴露端口 EXPOSE <端口1> [<端口2>...],主要指定docker run -p 的时候的暴漏的端口
USER #指定当前用户
CMD:#设置容器启动后默认执行的命令和参数
ENTRYPOINT:#设置容器启动时运行的命令
先到这里吧,还有几个指令也没有详细解释,感兴趣的,可以自己研究吧。
主要目的就是记录下,后期有需要的时候,可以翻到;毕竟我是开发,也不是运维,不经常写这些,也容易忘记,后面可以翻翻。