程式語言初學者 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. 匯入和匯出容器
-
匯出容器
export
docker export -o name.tar [CONTAINER ID] # -o output
docker export [CONTIANER ID] > name.tar
-
匯入容器
import
cat ubuntu.tar | docker import - text/ubuntu:v1.0
可以透過
-c
選項在匯入同時執行對容器實施修改的 Dockerfile 指令與
docker load
類似
Comments
Post a Comment