Dockerfile命令
1、对于开发人员,可以为开发团队提供一个完全一致的开发环境
2、对于测试人员,可以直接拿开发时所构建的镜像测试。
3、对于运维人员,在部署时,可以实现快速部署、移值。
FROM
指定基础镜像
基础镜像不存在会在Docker Hub上拉去(一般会是文件的第一个指令) 使用格式:
FROM <镜像>:[tag]
FROM <镜像>@digest[校验码] 当前主机没有此镜像时,会自动去官网HUB下载
MAINTAINER
[逐渐废弃] LABLE --替代MAINTANIER 具体使用: LABLE maintainer="作者信息"
MAINTANIER "123456<123456@qq.com>"
LABEL maintainer="123456@qq.com"
LABEL "com.example.vendor"="ACME Incorporated"
LABEL com.example.label-with-value="foo"
LABEL version="1.0"
LABEL description="This text illustrates \
that label-values can span multiple lines."
ENV
ENV指令可以用于为docker容器设置环境变量 ENV设置的环境变量,可以使用 docker inspect命令来查看。同时
还可以使用docker run --env =来修改环境变量。
具体用法:
ENV JAVA_HOME /usr/local/jdk
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/lib/:$JRE_HOME/lib/
ENV PATH $PATH:$JAVA_HOME/bin/
USER
用来切换运行属主身份的。Docker 默认是使用 root,但若不需要,建议切换使用者身分,毕竟 root 权限太大
了,使用上有安全的风险。
WORKDIR
WORKDIR 用来切换工作目录的。
Docker 默认的工作目录是/,只有 RUN 能执行 cd 命令切换目录,而且还只作用在当下下的 RUN,也就是说每一
个 RUN 都是独立进行的。
如果想让其他指令在指定的目录下执行,就得靠 WORKDIR。WORKDIR 动作的目录改变是持久的,不用每个指
令前都使用一次 WORKDIR。
WORKDIR /usr/local/tomcat/
VOLUME
创建一个可以从本地主机或其他容器挂载的挂载点,一般用来存放数据库和需要保持的数据等。
只能定义docker管理的卷: VOLUME /data/mysql运行的时候会随机在宿主机的目录下生成一个卷目录!
COPY
把宿主机中的文件复制到镜像中去!
文件要在Dockerfile工作目录 src 原文件 --支持通配符 --通常相对路径 dest 目标路径
通常绝对路径
ADD
类似COPY命令
ADD 将文件从路径 复制添加到容器内部路径 。
必须是想对于源文件夹的一个文件或目录,也可以是一个远程的url。
是目标容器中的绝对路径。 所有的新文件和文件夹都会创建UID 和 GID。事实上如果 是一个远程文件URL,那
么目标文件的权限将会是600。
EXPOSE
为容器打开指定要监听的端口以实现与外部通信
使用格式: EXPOSE 80/tcp 23/udp
不加协议默认为tcp
使用-P选项可以暴露这里指定的端口! 但是宿主的关联至这个端口的端口是随机的!
RUN
格式有两种
- shell 格式:RUN <命令>
- exec 格式:RUN ["可执行文件", "参数1", "参数2"],这更像是函数调用中的格式
RUN apt-get update \
&& apt-get install -y gcc libc6-dev make \
&& wget http://download.redis.io/releases/redis-4.0.1.tar.gz \
&& tar xzf redis-4.0.1.tar.gz \
&& cd redis-4.0.1
在撰写 Dockerfile 的时候,要经常提醒自己,这并不是在写 Shell
脚本,而是在定义每一层该如何构建。 并且,这里为了格式化还进行了换行。Dockerfile 支持 Shell 类的行尾添加 \ 的
命令换行方式,以及行首 # 进行注释的格式。良好的格式,比如换行、缩进、注释等,会让维护、排障更为容易,这
是一个比较好的习惯。
构建镜像Build
docker build [选项] <上下文路径/URL/->
docker build -t demo1 . // . 代表Dockerfile上下文路径
-t :指定要创建的目标镜像名
.:Dockerfile 文件所在目录,可以指定Dockerfile 的绝对路径