iT邦幫忙

2021 iThome 鐵人賽

DAY 15
0
DevOps

container & k8s 奏鳴曲系列 第 15

[13th][Day15] dockerfile 指令

第一個 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
https://ithelp.ithome.com.tw/upload/images/20210922/20119546X1kd8Jmjvv.png

如果加上一行

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

https://ithelp.ithome.com.tw/upload/images/20210923/201195465HIeyyPjfw.png

直接進入 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


上一篇
[13th][Day14] docker port
下一篇
[13th][Day16] docker push
系列文
container & k8s 奏鳴曲30

尚未有邦友留言

立即登入留言