🎨
Docker
  • Docker入门
  • Docker overview
    • 隔离与限制
    • copy-on-write(CoW: 写时复制)
    • docker中的联合文件系统
    • Docker存储
      • tmpfs mounts
      • volume
      • bind mounts
    • Docker网络
      • host模式
      • bridge模式
        • default bridge模式
        • User-defined bridge模式
      • none模式
      • container模式
  • 容器监控方式
    • prometheus + grafana+cAdvisor监控容器
  • Dockerfile指令
    • Usage
    • BuildKit
    • Format
    • Parser directives
      • syntax
      • escape
    • Environment replacement
    • FROM
      • 了解ARG和FROM之间的交互方式
    • .dockerignore file
    • RUN
    • CMD
    • COPY
    • ADD
    • ENV
    • WORKDIR
    • ARG
      • Impact on build caching(对构建缓存的影响)
      • Default(默认值)
      • Scope(作用域)
      • Using ARG Variables(使用ARG变量)
      • Predefined ARGS(预先定义好的ARG变量)
      • Automatic platform ARGs in the global scope(全局作用域中自动化平台的ARGS)
    • STOPSIGNAL
    • HEALTHCHECK
    • SHELL
    • ONBUILD
    • Dockerfile示例
    • LABEL
    • MAINTAINER (deprecated)
    • EXPOSE
    • ENTRYPOINT
      • Shell形式的ENTRYPOINT示例
      • 理解CMD和ENTRYPOINT是如何交互的
    • VOLUME
    • USER
  • docker-compose.yaml文件中常用指令
    • compose文件结构和示例
    • 服务配置参考
      • build
        • dockerfile
        • context
        • shm_size
        • network
        • labels
        • cache_from
        • args
        • target
      • cap_add, cap_drop
      • cgroup_parent
      • command
      • configs
        • 短语法形式
        • 长语法形式
      • container_name
      • credential_spec
        • EXAMPLE GMSA CONFIGURATION
      • depends_on
      • deploy
        • endpoint_mode
        • labels
        • mode
        • placement
        • max_replicas_per_node
        • replicas
        • resource
        • restart_policy
        • rollback_config
        • Update_config
        • Not supported for docker stack deploy
      • devices
      • dns
      • dns_search
      • entrypoint
      • env_file
      • environment
      • expose
      • external_links
      • extra_hosts
      • healthcheck
      • image
      • init
      • isolation
      • labels
      • links
      • logging
      • network_mode
      • networks
        • alias
        • IPV4_ADDRESS, IPV6_ADDRESS
      • pid
      • ports
        • 长语法
        • 短语法
      • profiles
      • restart
      • secrets
        • 长语法
        • 短语法
      • security_opt
      • stop_grace_period
      • stop_signal
      • sysctls
      • tmpfs
      • ulimits
      • userns_mode
      • volumes
        • 长语法
        • 短语法
        • VOLUMES FOR SERVICES, SWARMS, AND STACK FILES
      • domainname, hostname, ipc, mac_address, privileged, read_only, shm_size, stdin_open, tty, user, work
      • Specifying durations
      • Specifying byte values
      • Volume configuration reference
        • driver
        • driver_opts
        • external
        • labels
        • name
      • Network configuration reference
        • name
        • external
        • labels
        • internal
        • ipam
        • enable_ipv6
        • driver
          • overlay
          • bridge
          • host或者none
        • driver_opts
        • attachable
      • configs configuration reference
      • secrets configuration reference
      • Variable substitution
      • Extension fields
  • docker-compose示例
    • WordPress
    • PostgreSQL
    • Django和PostgreSQL
    • Rails和PostgreSQL
  • Dockerfile最佳实践
Powered by GitBook
On this page

Was this helpful?

  1. Dockerfile指令

Usage

使用方法

docker build命名根据dockerfile和上下文(context)来构建一个镜像。

docker build命令从Dockerfile和上下文构建映像。构建的上下文是位于指定位置PATH或URL的文件集。 PATH是本地文件系统上的目录。该URL是一个Git存储库位置。

上下文是递归处理的。因此,PATH包括任何子目录,而URL包括存储库及其子模块。此示例显示了一个使用当前目录作为上下文的构建命令:

docker build . #从当前上下文构建镜像

Sending build context to Docker daemon  6.51 MB
...

构建(build)是由Docker守护进程而不是CLI运行的。构建过程要做的第一件事是将整个上下文(递归)发送到Docker守护进程。在大多数情况下,最好以空目录作为上下文,并将Dockerfile保留在该目录中。仅添加构建Dockerfile所需的文件。

要在构建上下文中使用文件,Dockerfile引用指令(例如COPY指令)中指定的文件。为了提高构建的性能,请通过在上下文目录中添加.dockerignore文件来排除相应的文件和目录。

通常,Dockerfile位于上下文的根目录中。将-f与docker build组合起来使用可以指向文件系统中任何位置的Dockerfile。

Note: 不要将根目录/用作PATH,因为它会导致构建将硬盘驱动器的全部内容传输到Docker守护进程。

$ docker build -f /path/to/a/Dockerfile .

如果构建成功,则可以指定存储镜像的存储库和标签(tag):

$ docker build -t shykes/myapp .

同时构建多个镜像:

docker build -t shykes/myapp:1.0.2 -t shykes/myapp:latest .

在Docker守护进程运行Dockerfile中的指令之前,它会对Dockerfile进行初步验证,如果语法不正确,则会返回错误:

$ docker build -t test/myapp .

Sending build context to Docker daemon 2.048 kB
Error response from daemon: Unknown instruction: RUNCMD

Docker守护进程逐一运行Dockerfile中的指令,并在最终输出新镜像的ID之前,如有必要,将每个指令的结果提交到新镜像。 Docker守护进程会自动清理发送的上下文。

Note: 每条指令都是独立运行的,每条指令运行时会创建一层新的镜像-因此RUN cd /tmp对下一条指令不会有任何影响。

Docker将尽可能的重用中间镜像(缓存),以加快Docker镜像的构建过程。这由控制台输出中的"Use Cache"消息指示。

$ docker build -t svendowideit/ambassador .

Sending build context to Docker daemon 15.36 kB
Step 1/4 : FROM alpine:3.2
 ---> 31f630c65071
Step 2/4 : MAINTAINER SvenDowideit@home.org.au
 ---> Using cache
 ---> 2a1c91448f5f
Step 3/4 : RUN apk update &&      apk add socat &&        rm -r /var/cache/
 ---> Using cache
 ---> 21ed6e7fbb73
Step 4/4 : CMD env | grep _TCP= | (sed 's/.*_PORT_\([0-9]*\)_TCP=tcp:\/\/\(.*\):\(.*\)/socat -t 100000000 TCP4-LISTEN:\1,fork,reuseaddr TCP4:\2:\3 \&/' && echo wait) | sh
 ---> Using cache
 ---> 7ea8aef582cc
Successfully built 7ea8aef582cc

构建缓存仅用于具有本地父链的镜像。这意味着这些镜像是由以前的版本创建的,或者整个镜像链都已由docker load加载。如果希望使用特定镜像的构建缓存,则可以使用--cache-from选项来指定它。用--cache-from指定的镜像不需要具有父链,并且可以从其他docker仓库拉取。

当我们构建好镜像以后,可以将镜像推送到自己的私人仓库。

PreviousDockerfile指令NextBuildKit

Last updated 4 years ago

Was this helpful?

如何push镜像