第一個 dockerfile 中已經用過幾個指令了
RUN
EXPOSE
接下來會遇到的還有
CMD
ENTRYPOINT
ADD
COPY
VOLUME
WORKERDIR
USER
ONBUILD
LABAL
STOPSINGAL
ARG
ENV
...etc
更多請見 https://docs.docker.com/engine/reference/builder/
CMD 用於一個 container 啟動時要運行的指令
前天我的 dockerfile
FROM ubuntu:20.04
MAINTAINER Eric "eric211924@gmail.com"
RUN apt-get update && apt-get install -y nginx
RUN echo 'Hi ,I am in your container ' \
>/usr/share/nginx/html/index.html
EXPOSE 80
所以在啟動時我需要在 docker run 後面加上 bash 才會進入 shell
如果加上一行
CMD bash
FROM ubuntu:20.04
MAINTAINER Eric "eric211924@gmail.com"
RUN apt-get update && apt-get install -y nginx
RUN echo 'Hi ,I am in your container ' \
>/usr/share/nginx/html/index.html
CMD bash
EXPOSE 80
# I'm a comment
就能在 run 時就省去 bash
docker run -it eric211924/try_dockerfile:v2
直接進入 shell
一個 Dockerfile 中只會能指定一條 CMD
如果寫了多個 CMD ,只有最後一個 CMD 會作用
WORKDIR
用 image create 新 container 時,在 container 內部指定一個工作目錄,ENTRYPOINT & CMD 會在這個目錄下執行
FROM ubuntu:20.04 AS builder
WORKDIR /var/lib/nginx
CMD ["ls"]
上面的 ls 指令就會在 /var/lib/nginx 中執行
COPY 可以把本機的檔案複製到 image 中
COPY source destination
ADD 的格式和 COPY 相同
ADD source destination
除了在 multistage 以外,ADD 可以滿足 COPY 的所有功能,除此之外還有:
解壓縮並加入 image
從 url 複製檔案到 image