Docker 第一次上手
引言
- DevOps/開發運維/不懂運維和部署的前端開發
- 項目實際需要,平穩升級構建工具
安裝Docker
去看官網就好了
涉及的幾個命令
- docker images

-
docker build
- -t 指定image的repository 和 tag, 這兩項的含義可以看`docker images`命令之後的輸出結果,在docker build時,可以同時指定多個`-t`選項
-
docker run
- -v 掛載宿主機目錄/本地目錄到鏡像中
docker run
``` bash
docker run [options] image [command] [args]
```
構建鏡像/ Dockerfile
先看看Dockerfile的一個示例:
``` dockerfile
指定當前鏡像的基礎鏡像,下面這行指定當前以node:8-slim構建,這個鏡像是官方倉庫提供的,
FROM node:10-slim
指定鏡像的工作目錄
WORKDIR /usr/local/workdir
拷貝文件 將from拷貝到 /usr/local/workdir
COPY from /usr/local/workdir
構建鏡像時,在鏡像內執行的指令
RUN npm i -g . --registry=https://registry.npm.taobao.org/
指定在容器內運行的命令
CMD ["ls"]
```
除了上面示例中的幾個常用指令,Dockerfile中還有下面這些:
- EXPOSE
- ENV
- ADD
- ENTRYPOINT
- VOLUME
- USER
- ONBUILD
關於如何寫好一個Dockerfile的建議,可以參考[Best practices for writing Dockerfiles](https://docs.docker.com/devel..._best-practices/)
遇到的幾個問題
1. 鏡像中的文件不會被更改
`docker run`命令不會修改鏡像中的文件,當下次執行`docker run`的時候,上次的結果不會保留。
2. 構建鏡像會有緩存,
如果在構建過程中,某一步驟失敗,則它前面的步驟會被緩存下下來。在下次重新構建時,這些步驟不再執行。

3. container 和 image的關係
image可以看作一個特定環境的文件的組合;image是靜態的,可以在不同的機器和操作系統之間來回轉移;
container則是這個環境的具體執行實例;contaier是動態的,跟當前環境密切相關;當某個機器啓動一個image時,就產生了一個container。