1. 程式人生 > >容器技術Docker 容器操作大總結

容器技術Docker 容器操作大總結

docker 容器

Docker實戰之容器操作:

新建容器:

docker create創建的容器處於停止狀態,可以使用docker start命令啟動Docker容器。

使用docker run命令,可以創建一個運行中的容器。

create命令與容器運行模式相關的選項:

-a,--attach=[] 是否綁定到標準輸出、輸入和錯誤

-a,--detach=true|false 是否在後臺運行容器,默認是否

--detach-keys="" 從attach模式退出的快捷鍵

--entrypoint="" 鏡像存在入口指令時,覆蓋為新的命令

--pxpose=[] 指定容器會暴露出來的端口或端口範圍

--group-add=[] 運行容器的用戶組

-i,--interactive=true|false 保持標準輸入打開,默認為false

--ipc="" 容器IPC命名空間,可以為其他容器或主機

--isolation="default" 容器使用的隔離機制

--log-driver="json-file" 指定容器的日誌驅動類型,取值範圍是:json-file/syslog/journald/gelf/fluentd/awslogs/splunk/etwlogs/gcplogs/none

--log-opt=[] 傳遞給日誌驅動的選項

--net="bridge" 指定容器的網絡模式,包括bridge/none/其他容器內網絡/host的網絡或某個現有的網絡

--net-alias=[] 容器在網絡中的別名

-P,--publish-all=true|false 通過NAT機制將容器標記暴露的端口自動映射到本地主機的臨時端口

-p,--public=[] 指定如何映射到本地主機端口

--pid=host 容器的PID命名空間

--userns="" 啟用userns-remap時配置用戶命名空間的模式

--uts=host 容器的UTS命名空間

--restart="no" 容器的重啟策略,取值no/no-failure[:max-retry]/always/unless-stopped等

--rm=true|false 容器退出後是否自動刪除,不能跟-d同時使用

-t,--tty=true|false 是否分配一個偽終端,默認是false

--tmpfs=[] 掛載臨時文件系統到容器

-v|--volume[=[[HOST-DIR:]CONTAINER_DIR[:OPTIONS]]] 掛載主機上的文件卷到容器

--volume-driver="" 掛載文件卷的驅動類型

--volume-from=[] 從其他容器掛在卷

-w,--workdir="" 容器內的默認工作目錄


create命令與容器環境和配置相關的選項:

--add-host=[] 在容器內添加一個主機名到IP地址的映射關系

--device=[] 映射物理機上的設備到容器

--dns-search=[] DNS搜索域

--dns-opt=[] 自定義的DNS選項

--dns=[] 自定義的DNS服務器

-e,--env=[] 指定容器內環境變量

--env-file=[] 從文件中讀取環境變量到容器中

-h,--hostname="" 指定容器內的主機名

--ip="" 指定容器的IPV4地址

--ipv6="" 指定容器的IPV6地址

--link=[<name or id>:alias] 連接到其他容器

--mac-address="" 指定容器的MAC地址

--name="" 指定容器的別名


create命令與容器資源限制和安全保護相關的選項:

--blkio-weight=10~1000 容器讀寫塊設備的I/O性能權重,默認是0

--blkio-weight-device=[DEVICE_NAME_WEIGHT] 指定各個塊設備的I/O性能權重

--cpu-shares=0 允許容器使用CPU資源的相對權重,默認一個容器能用滿一個核心的CPU

--cap-add=[] 增加容器的Linux指定安全能力

--cap-drop=[] 移除容器的Linux指定安全性能

--cgroup-parnet="" 指定容器CGroups限制的創建路徑

--cidfile="" 指定容器的進程ID號寫到文件

--cpu-period=0 限制容器在CFS調度器下的CPU占用時間片

--cpuset-cpus="" 限制容器能使用哪些CPU核心

--cpuset-mems="" NUMA架構下使用哪些核心的內存

--cpu-quota=0 限制容器在CFS調度器下的CPU額配

--device-read-bps=[] 掛載設備的讀吞吐率(以bps為單位)限制

--device-write-bps=[] 掛載設備的寫吞吐率(以bps為單位)限制

--device-read-iops=[] 掛載設備的讀速率(以每秒I/O次數為單位)限制

--device-write-iops=[] 掛載設備的寫速率(以每秒I/O次數為單位)限制

--kernel-memory="" 限制容器內使用內核的內存大小,單位可以是b/k/m/g

-m,--memory="" 限制容器內應用使用的內存,單位可以是b/k/m/g

--memory-reservation="" 當系統中內存過低的時候,容器會被限制內存到給定的值,默認情況下等於內存限制值

--memory-swap="LIMIT" 限制容器使用內存和交換分區的總大小

--oom-kill-disable=true|false 內存耗盡的時候是否殺死容器

--oom-score-adj="" 調整容器的內存耗盡參數

--pids-limit="" 限制容器的PID個數

--privileged=true|false 是否給容器以高權限,這個意味著容器內應用將不受權限下限制,一般不推薦使用

--read-only=true|false 是否讓容器內的文件系統只讀

--security-opt=[] 指定一些安全參數,包括權限、安全能力、apparmor

--stop-signal-SIGTERM 指定停止容器的系統信號

--shm-size="" /dev/shm的大小

--sig-proxy=true|false 是否代理收到的信號給應用,默認是true,不能代理SIGCHLD

--memory-swappiness="0~100" 調整容器內存交換區參數

-u,--user="" 指定在容器內執行命令的用戶信息

--ulimit=[] 通過ulimit來限制最大文件數,最大進程數


其他常用參數:

-l,--label=[] 以鍵值對的方式指定容器的標簽信息

--label-file=[] 從文件中讀取標簽信息


docker run來啟動容器的時候Docker在後臺運行的標準操作包括:

1。檢查本地是否存在指定的鏡像,不存在就從公有倉庫下載。

2.利用鏡像創建一個容器,並啟動該容器。

3.分配一個文件系統給容器,並在只讀的鏡像層外邊掛載一層可讀寫層。

4.從宿主機配置的網橋接口中橋接一個虛擬接口到容器中。

5.從網橋的地址池配置一個IP地址給容器

6.執行用戶指定的應用程序


對於創建的容器,當使用exit命令退出之後,容器就會自動處於退出狀態。

默認情況下,常見的錯誤代碼:

125:Docker daemon執行出錯,指定了不支持的Docker命令參數

126:所指定命令無法運行,例如權限不足

127:容器內命令無法找到

命令執行出錯,會默認返回錯誤碼。


Docker守護態運行:通過-d參數來實現。

終止容器:

docker stop [-t|--time[=10]] [CONTAINER...]

首先向容器發送SIGTERM信號,等待一段時間(默認10秒)後,在發送SIGKILL信號終止容器。

docker kill命令會直接發送SIGKILL信號來強行終止容器。


進入Docker容器:

docker attach [--detach-keys[=[]]] [--no-stdin] [--sig-proxy[=true]] CONTAINER

支持子選項的作用:

--detach-keys[=[]]:退出attach模式的快捷鍵序列,默認是CTRL+P,CTRL+Q或CTRL+P+Q

--no-stdin=true|false:是否關閉標準輸入,默認是保持打開的

--sig-proxy=true|false:是否代理收到的系統信號給應用程序,默認為true

40d5d3816472175538f48f506eb7aa74019ef643c50a1351cc830f96a1a66217

root@doc-vm:~# docker ps

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

40d5d3816472 centos "/bin/bash" 6 seconds ago Up 4 seconds vigilant_noether

root@doc-vm:~# docker attach vigilant_noether

[root@40d5d3816472 /]# ls

anaconda-post.log bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var

當多個窗口同時用attach命令連接同一個容器的時候,所有窗口都會同步顯示。當某個窗口因為命令阻塞時,其他窗口也是無法執行操作的。


docker exec [-d|detach] [--detach-keys[=[]]] [-i|interactive] [--privileged] [-t|--tty] [-u|--user[=USER]] CONTAINER COMMAND [ARG...]

支持子選項的作用:

-i,--interactive=true|false:打開標準輸入接受用戶輸入的命令,默認是false

--privileged=true|false:是否執行命令以高權限,默認是false

-t,--tty=true|false:分配偽終端,默認是false

-u,--user="":執行命令的用戶名或ID


nsenter工具:

root@doc-vm:~# apt-get install util-linux

nsenter --target $PID --mount --uts --ipc --net --pid


刪除容器:

docker rm [-f|--force] [-l|--link] [-v|--volumes] CONTAINER [CONTAINER...]

-f,--force=false:是否強行終止並刪除一個運行中的容器

-l,--link=false:刪除容器的連接,但是保留容器

-v,--volumes=false:刪除容器掛載的數據卷

當添加-f參數的時候,Docker會先發送SIGKILL信號給容器,終止其中的應用,之後強行刪除。


導出容器:

導出容器指的是導出一個已經創建的文件,不管此時這個容器是否處於運行狀態,可以使用docker export命令:

docker export [-o|--output[=""]] CONTAINER

-o選項指定tar包的文件名或者使用>重定向。

root@doc-vm:~# docker ps

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

40d5d3816472 centos "/bin/bash" 27 minutes ago Up 4 seconds vigilant_noether

root@doc-vm:~# docker export >MyCentOS:6.0.tar 40d5d3816472

root@doc-vm:~# ll

drwxr-xr-x 16 doc doc 4096 11月 29 22:00 ./

drwxr-xr-x 3 root root 4096 11月 27 21:52 ../

-rw-r--r-- 1 root root 204790272 11月 29 22:00 MyCentOS:6.0.tar


導入容器:

docker import [-c|--change[=[]]] [-m|--message[=MESSAGE]] file|url - [REGISTRY[:TAG]]

可以通過-c選項在導入的同時對容器執行Dockerfile指令。


實際上,既可以使用docker load命令來導入鏡像庫存儲文件到本地鏡像庫,也可以使用docker import命令來導入一個容器快照到本地鏡像庫。

兩者的區別在於容器快照將會丟棄所有的歷史記錄和元數據信息,而鏡像存儲文件將保存完整記錄,體積也會更大。此外從容器快照文件導入時,也可以重新指定標簽等元數據。


容器技術Docker 容器操作大總結