dockerFile演示以及语法详解

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 是指定的基础镜像,因此一个 DockerfileFROM 是必备的指令,并且必须是第一条指令。

FROM scratch

除了选择现有镜像为基础镜像外,Docker 还存在一个特殊的镜像,名为 scratch。这个镜像是虚拟的概念,并不实际存在,它表示一个空白的镜像。

WORKDIR /usr/local/tomcat/webapps/ROOT/指令相当于 RUN cd /usr/local/tomcat/webapps/ROOT/

改变目录,尽量使用绝对路径,不要用RUN cd;主要是为了指定工作目录。

RUN指令是用来执行命令行命令的。一个run指令就是一个镜像分层。具体有两种形式的写法

  1. shell 格式:RUN <命令>,就像直接在命令行中输入的命令一样。刚才写的 Dockerfile 中的 RUN 指令就是这种格式。
  2. 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=[email protected]"

#对于复杂的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:#设置容器启动时运行的命令

先到这里吧,还有几个指令也没有详细解释,感兴趣的,可以自己研究吧。

主要目的就是记录下,后期有需要的时候,可以翻到;毕竟我是开发,也不是运维,不经常写这些,也容易忘记,后面可以翻翻。

原创文章 83 获赞 155 访问量 36万+

猜你喜欢

转载自blog.csdn.net/qq_28410283/article/details/100926433