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=“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:#设置容器启动时运行的命令

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

葵花下的獾

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值