Dockerfile

7/23/2021 Docker

# Description

Dockerfile là file instructions config để Docker build ra image. Trong Dockerfile là tập hợp các command line để build 1 image.

# Environment variables

  • FROM: Chỉ định base image

    FROM [--platform=<platform>] <image> [AS <name>]
    FROM [--platform=<platform>] <image>[:<tag>] [AS <name>]
    
    #
    FROM centos:7.4.1708
    
    1
    2
    3
    4
    5
  • RUN: Execute command khi build image

    RUN <command>
    RUN ["executable", "param1", "param2"]
    
    # 
    RUN yum -y install httpd                                 # intall apache
    RUN ["/bin/bash", "-c", "echo hello"]                    # echo hello
    
    1
    2
    3
    4
    5
    6
  • CMD: Cung cấp command khi executing container. Nếu user chỉ định arguments khi docker run thì sẽ overide lại giá trị của CMD

    CMD ["executable","param1","param2"]
    CMD ["param1","param2"]
    CMD command param1 param2
    
    #
    CMD echo "This is a test." | wc -
    
    1
    2
    3
    4
    5
    6

    RUN sẽ execute run command và commit kết quả trong khi build time, còn CMD chỉ cung cấp intended command cho image.

    Docker chỉ run 1 CMD cuối cùng,

  • LABEL: Thêm metadata to an image. Định dạng key-value, view bởi lệnh docker image inspect

    LABEL <key>=<value> <key>=<value> <key>=<value>
    
    #
    LABEL version="1.0"
    
    1
    2
    3
    4
  • EXPOSE: Chỉ định 1 port của container khi runtime.

    EXPOSE <port> [<port>/<protocol>...]
    
    #
    EXPOSE 80/tcp
    
    1
    2
    3
    4

    Có thể overide giá trị khi runtime với option -p

    docker run -p 80:80/tcp
    
    1
  • ENV: set environment variable

    ENV <key>=<value> ...
    
    1
  • ADD: Thêm file hoặc thư mục vào filesystem image

    ADD [--chown=<user>:<group>] <src>... <dest>
    ADD [--chown=<user>:<group>] ["<src>",... "<dest>"]
    
    #
    ADD test.txt relativeDir/
    
    1
    2
    3
    4
    5
  • COPY: copy file hoặc thư mục vào filesystem container

    COPY [--chown=<user>:<group>] <src>... <dest>
    COPY [--chown=<user>:<group>] ["<src>",... "<dest>"]
    
    #
    COPY test.txt relativeDir/
    
    1
    2
    3
    4
    5

    COPY sẽ làm mất hiệu lực của cache cho tất cả following instructions của Dockerfile nếu file src thay đổi.

    COPY được sử dụng nhiều hơn ADD . ADD có thể dùng cho các trường hợp file nén hay remote URL handle.

  • ENTRYPOINT: Config một container sẽ chạy như một executable

    ENTRYPOINT ["executable", "param1", "param2"]
    
    1

    CMD sẽ được overide bằng các alternative argument khi run container.

  • VOLUME: mount thư mục vào container.

    VOLUME ["/data"]
    
    1
  • USER: set user name (UID) và group (GID) khi run image.

    USER <user>[:<group>]
    USER <UID>[:<GID>]
    
    1
    2
  • WORKDIR: set thư mục làm việc cho RUN, CMD, ENTRYPOINT, COPY and ADD

    WORKDIR /path/to/workdir
    
    1

Refer: https://docs.docker.com/engine/reference/builder/ (opens new window)