FROM
WORKDIR
ADD
COPY
EXPOSE
CMD
ENTRYPOINT
FROM ImageName
...
เป็นการกำหนด images ที่เราต้องการจะใช้
# example DockerFile
FROM node
...
WORKDIR /path/to/workdir
เป็นส่วนกำหนดว่าเมื่อ container running เราจะให้ทำงานที่ไหน
# example DockerFile
FROM node
WORKDIR /path/to/workdir
...
ใช้ทำการเพิ่มไฟล์จากต้นทางไปยัง container ทั้งสองมีความแตกต่างกันนิดหน่อย
ADD <src> <dest>
..
# or
ADD ["<src>", "<dest>"]
COPY <src> <dest>
..
# or
COPY ["<src>", "<dest>"]
ที่ต่างกันคือ COPY
สามารถเพิ่มไฟล์จาก local
ได้เท่านั้น ขณะเดี่ยวกันที่ ADD
ก้ทำได้เหมือนกันและสามารถใช้ เป็น path url ได้ เช่น
จาก ปกติจะใช้
RUN mkdir -p /usr/src/things \
&& curl -SL http://example.com/big.tar.xz \
| tar -xJC /usr/src/things \
&& make -C /usr/src/things all
เหลือ แค่นี้ได้เลย
ADD http://example.com/big.tar.xz /usr/src/things/
EXPOSE <port> [<port>/<protocol>...]
เป็นการกำหนด port ที่ App หรือ Service นั้นใช้
# example dockerfile
FROM nginx
WORKDIR /path/to/workdir
EXPOSE 80
CMD ["<command line>", "arg1", "arg2"]
ENTRYPOINT ["<command line>", "arg1", "arg2"]
CMD <command line> arg1 arg2 //(shell form)
#or
CMD ["<command line>", "arg1", "arg2"] //(exec form)
เป็นการกำหนด default execute หรือ default argument ของ Docker image เพื่อใช้ใน container# example
FROM ubuntu
CMD ["echo", "Hello"]
build and run
$ docker build -t demo-cmd .
$ docker run demo-cmd
...
Hello
จะเห็นได้ว่าเมื่อสั่ง run container จะได้เป็น
Hello
ที่นี้เมื่อลองสั่ง run อีกครั้งเป็น
$ docker run demo-cmd /bin/bash echo World
...
World
จะเห็นได้ว่า เมื่อสั่ง run ใหม่ มีการ echo world ไป มันจะได้ค่า ที่เรา echo ออกมาเป็น
world
แทน
เป็นการกำหนด execute ที่ต้องการใช้ใน container เหมือนๆ กับ ``CMD``
ต่่างกันตรงที่ ``ENTRYPOINT`` เหมือนเป็นการกำหนด ค่านั้นๆ ไว้ตายตัว ไม่สามารถแทนที่คำสั่งเดิมที่สั่งให้ทำงานไปได้
FROM ubuntu ENTRYPOINT [“echo”, “Hello”]
build and run
```sh
$ docker build -t demo-entrypoint .
$ docker run demo-entrypoint
...
Hello
จะเห็นได้ว่าเมื่อสั่ง run container จะได้เป็น
Hello
เหมือนกันกับCMD
ที่นี้ลองสั่ง run อีกครั้งเป็น
$ docker run demo-entrypoint /bin/bash echo World
...
Hello World
จะเห็นได้ว่า การส่งค่า ไปใน container สิ่งที่ได้จะเป็นการต่อไปเป็น
Hello World
และยังสามารถใช้งาน CMD
ร่วมกับ ENTRYPOINT
ได้เช่นกันดังนี้
# example
FROM ubuntu
CMD ["World"]
ENTRYPOINT ["echo", "Hello"]
ผลลัพท์ ที่ได้จะเป็น Hello World