簡單的說容器是鏡像的一個運行實例,所不一樣的是,它帶有額外的可寫文件層。若是認爲虛擬機是模擬運行的一整套操做系統(提供了運行態環境和其餘系統環境)和跑在上面的應用。那麼Docker容器就是獨立運行的一個或一組應用,以及它們的必需運行環境。docker
docker create -it ubuntu:last 建立一個容器,建立的容器處於中止狀態ubuntu
docker start ID|NAME[:TAG] 啓動一箇中止的容器bash
docker run NAME[:TAG] COMMAND 建立並啓動一個容器工具
當利用docker run來建立並啓動容器時,Docker在後臺運行的標準操做包括: spa
•檢查本地是否存在指定的鏡像,不存在就從公有倉庫下載。 操作系統
•利用鏡像建立並啓動一個容器。 rest
•分配一個文件系統,並在只讀的鏡像層外面掛載一層可讀寫層。 orm
•從宿主主機配置的網橋接口中橋接一個虛擬接口到容器中去。 接口
•從地址池配置一個IP地址給容器。進程
•執行用戶指定的應用程序。
•執行完畢後容器被終止。
docker run命令參數
-t 分配一個僞終端(pseudo-tty)並綁定到容器的標準輸入上
-i 讓容器的標準輸入保持打開
-d 之後臺守護進程(Daemonized)形式運行
在僞終端下可使用ctrl + d或者輸入exit命令來退出容器
docker logs 得到容器的輸出信息
docker stop [-t|--time[=10]]用來終止一個運行中的容器,先向容器發送SIGTERM信號,等待一段時間(默認10秒),再發送SIGKILL信號終止容器
當Docker中指定的應用終結時,容器也會自動終止
docker kill 強行終止容器
docker ps -a -q查看終止狀態的容器的ID
docker restart 重啓某個容器
進入容器
docker attach ID|NAME 進入容器,可是當多個窗口同時attach到同一個容器時,全部窗口都會同步顯示,當某個窗口命令阻塞時,其餘窗口沒法執行抄做
docker exec ID|NAME COMMAND doker1.3以後新加命令,能夠直接在容器內運行命令,例如:docker exec -it 243c32535da7 /bin/bash
還有一種進入容器的方式是經過nsenter工具,使用
nsenter --target $PID --mount --uts --ipc --net --pid鏈接容器,須要知道容器的PID
PID能夠通PID=$(docker inspect --format "{{ .State.Pid }}" <container>)獲取
刪除容器
docker rm [OPTIONS]CONTAINER[CONTAINER...] 命令刪除處於終止狀態的容器,支持的選項包括:
•-f,--force=false強行終止並刪除一個運行中的容器。
•-l,--link=false刪除容器的鏈接,但保留容器。
•-v,--volumes=false刪除容器掛載的數據卷。
導出和導入容器
docker export CONTAINER > *.tar 導出容器
cat *.tar | docker import - NAME[:TAG] 導入容器
實際上,既可使用docker load命令來導入鏡像存儲文件到本地的鏡像庫,又可使用docker import命令來導入一個容器快照到本地鏡像庫。這二者的區別在於容器快照文件將丟棄全部的歷史記錄和元數據信息(即僅保存容器當時的快照狀態),而鏡像存儲文件將保存完整記錄,體積也要大。此外,從容器快照文件導入時能夠從新指定標籤等元數據信息。