Docker 隻言片語

以下是閱讀 《每天5分鐘玩轉Docker容器技術》的筆記:

  • Dockerfile 中每一個指令都會創建一個鏡像層,上層是依賴於下層的。無論什麼時候,只要某一層發生變化,其上面所有層的緩存都會失效。
  • docker build -t target_image_name . 命令結尾的 . 指明 build context 爲當前目錄。 Docker 默認會從 build context 中查找 Docker 文件。 我們也可以通過 -f 參數指定 Dockerfile的位置
  • 當容器啓動時,一個新的可寫層被加載到鏡像的頂部。 這一層通常被稱作“容器層”,“容器層”之下的都叫“鏡像層”。所有對容器的改動 - 無論添加、刪除、還是修改文件都只會發生在容器層中。
  • Docker 容器就是 Docker 鏡像的運行實例。只有容器層是可寫的,容器層下面的所有鏡像層都是隻讀的。

下面我們深入討論容器層的細節。

鏡像層數量可能會很多,所有鏡像層會聯合在一起組成一個統一的文件系統。如果不同層中有一個相同路徑的文件,比如 /a,上層的 /a 會覆蓋下層的 /a,也就是說用戶只能訪問到上層中的文件 /a。在容器層中,用戶看到的是一個疊加之後的文件系統。

  1. 添加文件
    在容器中創建文件時,新文件被添加到容器層中。
  2. 讀取文件
    在容器中讀取某個文件時,Docker 會從上往下依次在各鏡像層中查找此文件。一旦找到,立即將其複製到容器層,然後打開並讀入內存。
  3. 修改文件
    在容器中修改已存在的文件時,Docker 會從上往下依次在各鏡像層中查找此文件。一旦找到,立即將其複製到容器層,然後修改之。
  4. 刪除文件
    在容器中刪除文件時,Docker 也是從上往下依次在鏡像層中查找此文件。找到後,會在容器層中記錄下此刪除操作。

只有當需要修改時才複製一份數據,這種特性被稱作 Copy-on-Write。可見,容器層保存的是鏡像變化的部分,不會對鏡像本身進行任何修改。

這樣就解釋了我們前面提出的問題:容器層記錄對鏡像的修改,所有鏡像層都是隻讀的,不會被容器修改,所以鏡像可以被多個容器共享。

###############################################################

Docker 容器
Docker 容器就是 Docker 鏡像的運行實例。

用戶可以通過 CLI(docker)或是 API 啓動、停止、移動或刪除容器。可以這麼認爲,對於應用軟件,鏡像是軟件生命週期的構建和打包階段,而容器則是啓動和運行階段。

  • docker run :創建一個新的容器並運行一個命令.
    docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
    e.g. 實例:

    使用docker鏡像nginx:latest以後臺模式啓動一個容器,並將容器命名爲mynginx。

       docker run --name mynginx -d nginx:latest
    

    使用鏡像nginx:latest以後臺模式啓動一個容器,並將容器的80端口映射到主機隨機端口。

       docker run -P -d nginx:latest
    

    使用鏡像 nginx:latest,以後臺模式啓動一個容器,將容器的 80 端口映射到主機的 80 端口,主機的目錄 /data 映射到容器的 /data。

       docker run -p 80:80 -v /data:/data -d nginx:latest
    

    綁定容器的 8080 端口,並將其映射到本地主機 127.0.0.1 的 80 端口上。

       $ docker run -p 127.0.0.1:80:8080/tcp ubuntu bash
    

    使用鏡像nginx:latest以交互模式啓動一個容器,在容器內執行/bin/bash命令。

       runoob@runoob:~$ docker run -it nginx:latest /bin/bash
       root@b8573233d675:/# 
    

/######################################################

docker run vs docker exec vs docker start:

docker run:

Description
Run a command in a new container

Usage
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

docker exec:

Description
Run a command in a running container

Usage
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]

docker start:

Description
Start one or more stopped containers

Usage
docker start [OPTIONS] CONTAINER [CONTAINER...]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章