程式語言初學者 Docker 入門第四章 —— 容器 Container

Container 是 image 的一個執行例 (instance)

image 是靜態的唯獨檔案, container 帶有運行時需要的可寫入層。

這邊來稍微複習一下

  • 虛擬機:模擬運行的一整套作業系統(核心 + 執行應用系統必要環境 + 系統環境)+ run app
  • Docker 容器:獨立執行的一個或一組應用系統 + 必要執行環境

1. 建立容器

新建

$ docker create -it ubuntut:latest
$ docker ps -a
CONTAINER ID   IMAGE           COMMAND                  CREATED          STATUS                      PORTS     NAMES
9f0fec4d4b05   ubuntu:latest   "/bin/bash"              42 seconds ago   Created                               strange_austin

啟動

用 create 新建的容器處於停止狀態 docker start 啟動

docker start 9f0fec4d4b05
$ docker ps # 查看正在執行的容器
CONTAINER ID   IMAGE           COMMAND       CREATED         STATUS         PORTS     NAMES
9f0fec4d4b05   ubuntu:latest   "/bin/bash"   5 minutes ago   Up 2 minutes             strange_austin

建立並啟動

docker run

docker run ubuntu /bin/echo "hello, world"

輸出 hello, world 容器便終止

  • 檢查本機是否存在指定的 image,不存在就從公開的倉庫下載
  • 利用 image 建立 container 並啟動 container (docker create + docker start)
  • 分配檔案系統給容器,並在唯獨的映像檔資料層外面掛載一層可讀寫層
  • 從 Host 主機配置的橋接器介面 (docker 0) 中,橋接一個虛擬界面到容器中
  • 從橋接器的位址區段 (172.17.0.0/24) 配置一個 IP 位置給容器
  • 執行使用者指定的應用程式
  • 執行完畢後容器便自動停止
docker run -it ubuntu:14.04 /bin/bash

💡 -t 讓 Docker 分配一個虛擬終端機 (pseudo-tty) 並綁定到容器的標準輸入上 

    -i 讓容器的標準輸入保持敞開

背景狀態下執行

$ docker run -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done"
e43ab60e41c2a1239ddc2e1a4a24f0a641900800e287e329861a4081cbc27ad0 # 會回傳一個容器唯一 ID
$ docker ps
CONTAINER ID   IMAGE           COMMAND                  CREATED          STATUS          PORTS     NAMES
e43ab60e41c2   ubuntu          "/bin/sh -c 'while t…"   12 seconds ago   Up 12 seconds             sweet_fermi

取得容器輸出資訊

docker logs e43 # ID 片段即可

2. 停止容器

docker stop

docker stop e43

💡 docker stop [-t=10] [container ID] -t 向容器發送 SIGTERM 信號, 10 秒後再發送 SIGKILL 訊號來終止容器 也可以 docker kill 發送 SIGKILL 信號來強行停止容器

查看所有容器的 ID 資訊清單 docker ps -qa

485293086b12
2b6fda0a662e
e43ab60e41c2
  • docker start e43 再次重啟
  • docker restart e43 將運行中的容器先停止,再重啟

3. 進入容器

-d 參數讓容器進入背景執行,使用者無法看到容器中的資訊也無法進行操作。

如果要進入容器進行操作有以下三種方式

    1. attach

    docker attach [container's NAME]

        利用 attach 從多個視窗進入容器,會同步顯示

    2. exec (推薦)

    docker exec -it 9f0fec4d4b05 /bin/bash

        進入剛建立的容器,啟動一個 bash

        透過 -it 來維持標準輸入開啟,並且分配一個虛擬終端。

    3. nsenter 工具

4. 刪除容器

docker rm 

5. 匯入和匯出容器

  1. 匯出容器 export

    docker export -o name.tar [CONTAINER ID] # -o output 
    
    docker export [CONTIANER ID] > name.tar
    
  2. 匯入容器 import

    cat ubuntu.tar | docker import - text/ubuntu:v1.0
    

    可以透過-c選項在匯入同時執行對容器實施修改的 Dockerfile 指令

    docker load 類似

Comments

Popular posts from this blog

《 Imgproxy 使用分析一:圖片下載速度優化分析:Akamai CDN vs Imgproxy 效能比較》

《 Akamai + S3 與 CloudFront + Imgproxy + S3 使用分析二:壓縮圖片設計流程:檔案大小 vs 載入時間的權衡》

程式語言初學者 Docker 入門第二章 —— 安裝與驗證 (Mac)