Stories

Detail Return Return

Docker 第一次上手 - Stories Detail

 Docker 第一次上手

 引言

  1. DevOps/開發運維/不懂運維和部署的前端開發
  2. 項目實際需要,平穩升級構建工具

 安裝Docker

去看官網就好了

 涉及的幾個命令

  1. docker images

    ![docker images](./assets/docker-images.jpg)

  2. docker build

    1. -t 指定image的repository 和 tag, 這兩項的含義可以看`docker images`命令之後的輸出結果,在docker build時,可以同時指定多個`-t`選項
  3. docker run

    1. -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. 構建鏡像會有緩存,

如果在構建過程中,某一步驟失敗,則它前面的步驟會被緩存下下來。在下次重新構建時,這些步驟不再執行。

![docker-build-cache](./assets/docker-build-cache.jpg)

 3. container 和 image的關係

image可以看作一個特定環境的文件的組合;image是靜態的,可以在不同的機器和操作系統之間來回轉移;

container則是這個環境的具體執行實例;contaier是動態的,跟當前環境密切相關;當某個機器啓動一個image時,就產生了一個container。

Add a new Comments

Some HTML is okay.