Docker一日工作坊Part2
Michael.K
關於第二部份
- 玩轉docker指令
- 怎麼寫自己的dockerfile
- 寫dockerfile常犯的錯誤
- 介紹常見的repository
- 發佈你的docker image
先預設觀念
任何的image預設都是latest
docker run
- 從本地環境的image建立container
- 如果不存在從repository訪問,private repo必須要有「登入」行為
- image的格式可以為[IMAGE NAME]:[TAG]
# 執行nginx
docker run -idt nginx
# 執行nginx並且暴露port為8080
docker run -idt -p 8080:80 nginx
# 執行nginx在8080,在失敗的時候會自動重啟動
docker run -idt -p 8080:80 --restart on-failure nginx
# 執行nginx,結束後移除
docker run --rm -idt nginx
常用到的flag
- p, port 對外:對內port
- restart 重啓行為
- i, interactive 維持STDIN
- d, detach 將container置於背景
- t, tty 允許container使用tty
- rm, 結束後移除
docker exec
- 從已經「存在」、「執行中」的container執行指令
# 執行echo 1
docker exec container echo 1
# 進入container內
docker exec -ti container bash
docker build
- 從Dockerfile建立docker image
# 在目前的資料夾建立image,來源是Dockerfile
docker build . -t image-name
# 在目前的資料夾建立image,來源是Dockerfile-alt
docker build . -t image-name -f Dockerfile-alt
docker push / pull
- 將docker image從repository上拉/推上去
- 需要先有「登入」行為
docker login
- 登入docker repository
學完基本指令了
如何寫自己的Dockerfile
在寫Dockerfile之前
Docker ❤️ Alpine Linux
Alpine Linux
- 體積非常的小 (5MB)
- 有完整的Linux架構
- 豐富的元件支援
幾個常見的Dockerfile命令
- FROM
- RUN
- ARG
- ENV
- ADD
- COPY
- ENTRYPOINT
- CMD
ARG vs ENV
- ARG由建立image的時候帶入
- docker build . --build-arg FOO=bar
- ENV是在docker container內作為環境變數使用
CMD vs ENTRYPOINT
- ENTRYPOINT在container啟動時預設執行
- CMD在ENTRYPOINT存在時作為參數使用
FROM ubuntu
ENTRYPOINY ["ping"]
CMD ["localhost"]
COPY vs ADD
- COPY 適用在將本地端的檔案複製到container內
- ADD 適用將遠端的檔案複製到container內
FROM alpine:3.8
RUN apk add --update nginx && \
mkdir /run/nginx
ENTRYPOINT ["nginx", "-g", "daemon off;"]
發佈自己的image!
實際示範
Docker一日工作坊P2
By michael34435
Docker一日工作坊P2
- 1,307