基本示例

# This is a commit
FROM alpine:3.2
MAINTAINER Jasper Xu <sorex@163.com> RUN apk update && apk add socat && rm -r /var/cache/
RUN chmod -R 755 /data ADD execfile /etc/execfile
ADD data/* /etc/data/
COPY xxx.tgz /home/xxx.tgz RUN chmod 755 /etc/execfile
RUN ["/etc/execfile", "arg1", "arg1"] ENV abc=hello VOLUME ["/data"] EXPOSE 8080 WORKDIR /data/tools CMD service nginx start
CMD echo "Hello docker!"

FROM

必须为第一个命令,指定基础镜像

FROM <image>
FROM <image>:<tag>
FROM <image>@<digest>
FROM mysql:5.6

MAINTAINER

维护者信息

MAINTAINER <name>
MAINTAINER Jasper Xu
MAINTAINER sorex@163.com
MAINTAINER Jasper Xu <sorex@163.com>

LABEL

给镜像添加信息。使用docker inspect可查看镜像的相关信息

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."

RUN

构建镜像时执行的命令

# 由shell启动,Linux默认为`/bin/sh -c`,Windows默认为`cmd /S /C`
RUN <command>
# 运行可执行文件
RUN ["executable", "param1", "param2"]
RUN apk update
RUN ["/etc/execfile", "arg1", "arg1"]

ADD

将本地文件添加到容器中,identity, gzip, bzip2,xz,tar.gz,tgz等类型的文件将被添加tar -x命令,进行解压

ADD <src>... <dest>
ADD ["<src>",... "<dest>"] 用于支持包含空格的路径
ADD hom* /mydir/        # 添加所有以"hom"开头的文件
ADD hom?.txt /mydir/ # ? 替代一个单字符,例如:"home.txt" ADD test relativeDir/ # 添加 "test" 到 `WORKDIR`/relativeDir/
ADD test /absoluteDir/ # 添加 "test" 到 /absoluteDir/

COPY

同ADD,只是不会解压文件。

CMD

构建容器后调用,也就是在容器启动时才进行调用。

CMD ["executable","param1","param2"] (执行可执行文件,优先)
CMD ["param1","param2"] (设置了ENTRYPOINT,则直接调用ENTRYPOINT添加参数)
CMD command param1 param2 (执行shell内部命令)
CMD echo "This is a test." | wc -
CMD ["/usr/bin/wc","--help"]

ENTRYPOINT

配置容器,使其可执行化。配合CMD可省去"application",只使用参数。

ENTRYPOINT ["executable", "param1", "param2"] (可执行文件, 优先)
ENTRYPOINT command param1 param2 (shell内部命令)
FROM ubuntu
ENTRYPOINT ["top", "-b"]
CMD ["-c"]

当启动容器后,你将直接看到相当于运行了top -b -c

要进一步查看,你可以直接使用命令docker exec -it test ps aux

相当于使用了docker exec top -b -it test ps aux

ENV

设置环境变量

ENV <key> <value>
ENV <key>=<value> ...
ENV myName="John Doe" myDog=Rex\ The\ Dog \
myCat=fluffy

等同于

ENV myName John Doe
ENV myDog Rex The Dog
ENV myCat fluffy

EXPOSE

指定于外界交互的端口,在容器启动时用-p传递参数,例如-p 3307:3306将容器内的3306绑定到本机的3307

EXPOSE <port> [<port>...]
EXPOSE 80 443
EXPOSE 8080

VOLUME

用于指定持久化目录,在容器启动时用-v传递参数,例如-v ~/opt/data/mysql:/var/lib/mysql将本机的~/opt/data/mysql和容器内的/var/lib/mysql做持久化关联

容器启动时会加载,容器关闭后会回写。

VOLUME ["/data"]
VOLUME ["/data"]
VOLUME ["/var/www", "/var/log/apache2", "/etc/apache2"]

WORKDIR

工作目录

WORKDIR /path/to/workdir
WORKDIR /a  (这时工作目录为/a)
WORKDIR b (这时工作目录为/a/b)
WORKDIR c (这时工作目录为/a/b/c)

USER

用于设定容器的运行用户名或UID,USER 123USER git

RUN, CMD and ENTRYPOINT都将用该用户执行。

ARG

由外部启动时必须传入的参数,在容器启动时用--build-arg传递参数

指定于外界交互的端口,在容器启动时用-p传递参数,例如--build-arg CONT_IMG_VER=v2.0.1

FROM ubuntu
2 ARG CONT_IMG_VER
3 ENV CONT_IMG_VER ${CONT_IMG_VER:-v1.0.0}
4 RUN echo $CONT_IMG_VER

有些默认参数,无需指定,也不用使用``传递,可直接传参

HTTP_PROXY,http_proxy,HTTPS_PROXY,https_proxy,FTP_PROXY,ftp_proxy,NO_PROXY,no_proxy

Docker入门02——Dockerfile详解的更多相关文章

  1. Docker系列07—Dockerfile 详解

    本文收录在容器技术学习系列文章总目录 1.认识Dockerfile 1.1 镜像的生成途径 基于容器制作  dockerfile,docker build 基于容器制作镜像,已经在上篇Docker系列 ...

  2. Docker 学习7 Dockerfile详解

    一.镜像的生成途径 1.使用当前进程替换上一个进程 exec 2.生成方式 3.dockerfile制作镜像要求 a.要有专有的工作目录. b.要有专门的制作文件,文件名首字母大写 c.如果要打包很多 ...

  3. Docker 学习8 Dockerfile详解2

    一.继续上章节Docker学习7 CMD命令后. 11.ENTRYPOINT a.容器启动后相当于会启动ENTRYPOINT + CMD 命令,CMD相当于参数传给entrypoint的 [root@ ...

  4. Dockerfile详解

    Dockerfile详解 利用Dockerfile文件,可以构建docker的image镜像 命令使用 通过-f参数指定Dockerfile路径,进行构建image docker build -f / ...

  5. Dockerfile详解及优化

    Dockerfile详解 0. Dockerfile的作用 docker可以根据Dockerfile中的指令来构建docker镜像.Dockerfile是一个文本文件,其应当包含用户想要构建一个镜像的 ...

  6. 最佳实战Docker持续集成图文详解

    最佳实战Docker持续集成图文详解 这是一种真正的容器级的实现,这个带来的好处,不仅仅是效率的提升,更是一种变革:开发人员第一次真正为自己的代码负责——终于可以跳过运维和测试部门,自主维护运行环境( ...

  7. docker entrypoint入口文件详解

    docker entrypoint入口文件详解 pasting Dockerfile创建自定义Docker镜像以及CMD与ENTRYPOINT指令的比较 [k8s]args指令案例-彻底理解docke ...

  8. Docker:网络模式详解

    Docker作为目前最火的轻量级容器技术,牛逼的功能,如Docker的镜像管理,不足的地方网络方面. Docker自身的4种网络工作方式,和一些自定义网络模式 安装Docker时,它会自动创建三个网络 ...

  9. 【转】Dockerfile详解

    Dockerfile详解 https://blog.csdn.net/wo18237095579/article/details/80540571 --------------------- 作者:大 ...

随机推荐

  1. hive数据导入Sqoop工具

    下载Sqoop ,直接解压缩;然后导入2个环境变量 1.导入oracle数据库中表emp的数据到hive表中 1.导入到HDFS中 $ sqoop import --connect jdbc:mysq ...

  2. nginx的安装应用

    Nginx的安装 # yum install gcc pcre-devel zlib-devel –y #./configure –prefix=/usr/local/nginx #make & ...

  3. Jenkins之发送html附件邮件配置

    邮件配置: 邮件内容范例: ${FILE,path="C:\\Users\\Administrator\\.jenkins\\workspace\\XXX自动化测试工程目录\\$JOB_BA ...

  4. HTML-XML数据解析

    HTML代码 <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> ...

  5. PHP生成二维码并上传到七牛云

    参考资料 qr-code生成二维码    七牛云上传图片 实现步骤 //拿到插入后的id $res = DB::table('book_book')->insertGetId($data); i ...

  6. Hopcroft-Carp 算法模板 自用

    #include <iostream> #include <cstdio> #include <cstring> #include <queue> #d ...

  7. bzoj1001/luogu4001 狼抓兔子 (最小割/平面图最小割转对偶图最短路)

    平面图转对偶图:先在原图中加一个s->t的边,然后对每个面建一个点,对每条分隔两个面的边加一条连接这两个面对应点的边,边权等于原边权. 然后从刚才加的s->t分割出来的两面对应的两个点跑最 ...

  8. centos7 安装mysql的正确姿势

    1. 添加MySQL Yum源 MySQL官网>DOWNLOADS>MySQL Yum Repository找到合适版本的yum源 $wget https://dev.mysql.com/ ...

  9. linux动态库与静态库混合连接

      1, 在应用程序需要连接外部库的情况下,linux默认对库的连接是使用动态库,在找不到动态库的情况下再选择静态库.使用方式为: gcc test.cpp -L. -ltestlib 如果当前目录有 ...

  10. Ubuntu16.04中禁用UTC解决双系统时间问题

    解决方法一 sudo hwclock -w --localtime 解决方法二 timedatectl set-local-rtc 1 解决方法三 修改/etc/adjtime文件中的UTC,为LOC ...