转:https://www.cnblogs.com/sorex/p/6481407.html

基本示例

基本示例

# 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入门——Dockerfile详解的更多相关文章

  1. docker容器dockerfile详解

    docker公司在容器技术发展中提出了镜像分层的理念,可以说也是这个革命性的理念让原本只不过是整合linux内核特性的容器,开始野蛮生长. docker通过UnionFS联合文件系统将镜像的分层实现合 ...

  2. Docker:DockerFile详解与实例

    基本结构 Dockerfile 由一行行命令语句组成,并且支持已 # 开头的注释行. 一般而言,Dockerfile 的内容分为四个部分: 基础镜像信息. 维护者信息. 镜像操作指令. 容器启动时执行 ...

  3. Dockerfile详解

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

  4. Dockerfile详解及优化

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

  5. 附005.Docker Compose文件详解

    一 Docker Compose文件简介 compose文件使用yml格式,主要分为了四个区域: version:用于指定当前docker-compose.yml语法遵循哪个版本 services:服 ...

  6. 【转】Dockerfile详解

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

  7. java 日志体系(三)log4j从入门到详解

    java 日志体系(三)log4j从入门到详解 一.Log4j 简介 在应用程序中添加日志记录总的来说基于三个目的: 监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统计分析工作: 跟踪代 ...

  8. (十八)整合Nacos组件,环境搭建和入门案例详解

    整合Nacos组件,环境搭建和入门案例详解 1.Nacos基础简介 1.1 关键特性 1.2 专业术语解释 1.3 Nacos生态圈 2.SpringBoot整合Nacos 2.1 新建配置 2.2 ...

  9. Docker常用命令详解

    docker ps 查看当前正在运行的容器 docker ps -a 查看所有容器的状态 docker start/stop id/name 启动/停止某个容器 docker attach id 进入 ...

随机推荐

  1. tp 框架目录结构

    ThinkPHP是为了简化企业级应用开发和敏捷WEB应用开发而诞生的.最早诞生于2006年初,2007年元旦正式更名为ThinkPHP,并且遵循Apache2开源协议发布.ThinkPHP从诞生以来一 ...

  2. mac安装pip并升级pip版本

      最近想安装inchat,直接使用命令pip install install,结果提示 使用提示中的命令升级,结果提示找不到pip.很郁闷,明明有pip,结果一升级还给升没了.最后用的是这个方法完美 ...

  3. 公司C++规范学习

    目录 公司C++规范学习 语法部分 风格/约定 公司C++规范学习 语法部分 class和struct关键字的选择:class表示被封装的用户自定义类型,不公开定义非静态数据成员,struct表示数据 ...

  4. 基于vux的Vue路由切换动画

    const history = window.sessionStorage history.clear() let historyCount = history.getItem('count') * ...

  5. C# InterLock保证数据一致性

        ; i < ; i++)             {                 c.Increment();                 c.Decrement();      ...

  6. stl(set和map)

    http://codeforces.com/gym/101911/problem/A Recently Monocarp got a job. His working day lasts exactl ...

  7. Linux笔记1-简介

    以下为观看兄弟连视频教程所记. 1.简介 1965年,MIT.GE.AT&T的贝尔实验室 --> Multics 分时.庞大 1969年,贝尔实验室的肯·汤普森 --> Unix ...

  8. k3 cloud成本调整单提示期末余额不存在调整单分录的维度,请先出库核算确认是否存在核算维度的数据

    成本调整单提示期末余额不存在调整单分录的维度,请先出库核算确认是否存在核算维度的数据,如下图所示: 解决办法:先做出库核算,然后做成本调整单,再做出库核算(出库成本核算)

  9. 使用WakeLock将Android应用程序保持后台唤醒

    前言: 一些手机app(如微信.QQ等)有新消息来到达,手机屏幕即使在锁屏状态下也会亮起,并提示用户有新消息.但是,一般情况下手机锁屏后,Android系统为了省电以及减少CPU消耗,在一段时间后会使 ...

  10. simple_pt时遇到的问题

    elf.c:30:18: fatal error: gelf.h: No such file or directory 安装libelf-dev 遇到找不到ldwarf apt-cache  sear ...