Docker容器-容器操作
操作Docker容器
1、容器:
1.1、容器是Docker的另一個核心概念。簡單來說,容器是映象的一個例項。所不同的是,映象是靜態的只讀檔案,而容器帶有執行時需要的可寫檔案層,同時,容器中的應用程序處於執行狀態。
1.2、如果認為虛擬機器是模擬執行的一整套作業系統(包括核心、應用執行態環境和其它系統環境)和跑在上面的應用。那麼Docker容器就是獨立執行的一個(或一組)應用。以及它們必須的執行環境。2、建立容器:
2.1、使用docker [container] create 命令新建立一個容器;
2.1.1、基於centos 7.5.1804的映象建立一個新容器
[email protected]
:~$ sudo docker create -it centos:7.5.1804 [email protected]:~$ sudo docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 993f382831ef centos:7.5.1804 "/bin/bash" 16 seconds ago Created musing_hamilton
2.1.2、使用docker [container] create 命令新建的容器處於停止狀態,可以使用docker [container] start 啟動剛建立好的容器,這裡基於容器的id號啟動
[email protected]:~$ sudo docker start 993f382831ef 993f382831ef 檢視已啟動的容器 [email protected]:~$ sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 993f382831ef centos:7.5.1804 "/bin/bash" 2 hours ago Up 2 hours musing_hamilton
2.1.3、新建和啟動容器一併操作了
用docker [container] run 建立並啟動容器時,Docker在後臺執行的標準操作包括:
1、檢查本地是否存在指定的映象,不存在就從Docker Hub倉庫下載;
2、利用映象建立一個容器,並啟動該容器;
3、分配一個檔案系統給容器,並在只讀的映象層外面掛載一層可讀寫層;
4、從宿主機配置的網橋介面中橋接一個虛擬介面到容器中去;
5、從網橋的地址池配置一個IP地址給容器;
6、執行使用者指定的應用程式;
7、執行完畢後容器被自動終止;
指定一個bash終端啟動,可以進行互動式操作。
[email protected]:~$ sudo docker run -it --name test1 centos:7.5.1804 /bin/bash
[[email protected] ~]# cd /usr/local/
[[email protected] local]# ls
bin etc games include lib lib64 libexec sbin share src
[[email protected] local]# exit
exit
對於所建立的bash容器,當用戶使用exit命令退出bash程序之後,容器也會自動退出,這是因為對於容器來說,當其中的應用退出後,容器的使命完成,也就沒有繼續執行的必要了
2.1.4、守護態執行
要讓docker容器在後臺以守護態形式執行。此時,可以通過新增-d選項來完成;
[email protected]:~$ sudo docker run --name centos -d centos:7.5.1804 /bin/bash -c "while true;do echo hello world; sleep 1;done"
b39568ae50aaeabda71288238ae7805e3894ad4b1c79930c669e2873a47c3f32
# 檢視已執行容器資訊:
[email protected]:~$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b39568ae50aa centos:7.5.1804 "/bin/bash -c 'while…" 2 minutes ago Up 2 minutes centos
2.1.5、檢視容器日誌
docker [container] logs
常用選項:
-details:列印詳細資訊;
-f, -follow: 持續保持輸出;
-since string: 輸出從某個時間開始的日誌;
-tail string: 輸出最近的若干日誌
-t, -timestamps: 顯示時間戳資訊;
-until string: 輸出某個時間之前的日誌;
# 檢視centos容器的資訊:
[email protected]:~$ sudo docker logs centos
[email protected]:~$ sudo docker logs --details centos
[email protected]:~$ sudo docker logs -f centos
3、停止容器
3.1.1、暫停容器docker pause container
[email protected]:~$ sudo docker pause centos
centos
[email protected]:~$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b39568ae50aa centos:7.5.1804 "/bin/bash -c 'while…" 13 minutes ago Up 13 minutes (Paused) centos
3.1.2、恢復容器使用docker unpause container
[email protected]:~$ sudo docker unpause centos
centos
[email protected]:~$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b39568ae50aa centos:7.5.1804 "/bin/bash -c 'while…" 15 minutes ago Up 14 minutes centos
3.1.3、終止容器
使用docker container stop 終止執行中的容器、該命令首先向容器傳送SIGTERM訊號,等待一段超時後(預設為10s),再發送SIGKILL訊號來終止容器;
[email protected]:~$ sudo docker stop centos
centos
停止完之後,如果是測試環境的話可以使用docker container prune 清除所有停止狀態的容器。(注意,此操作還是小心為妙!)
[email protected]:~$ sudo docker container prune
WARNING! This will remove all stopped containers.
Are you sure you want to continue? [y/N] y
Deleted Containers:
b39568ae50aaeabda71288238ae7805e3894ad4b1c79930c669e2873a47c3f32
ed66b56e02d0538571e6f72077ea2e46af675a405db25161fddd1455a8311a8b
aebfa755ad9d22084baa954df4b2fa2c685c2f1bdedc9fbfec865e03f6143b8c
Total reclaimed space: 48B
[email protected]:~$ sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
還可以直接強制停止容器、docker [container] kill 直接傳送SIGKILL訊號來強行終止容器;
[email protected]:~$ sudo docker kill centos
centos
容器被停止之後,這時有的測試環境的容器還需要再次用到需要給啟動起來,就會用start來重新啟動
[email protected]:~$ sudo docker start centos
centos
[email protected]:~$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
742109f79dc9 centos:7.5.1804 "/bin/sh" 2 minutes ago Up 5 seconds centos
也可以使用restart來重啟,它是先將一個執行的容器先停止,然後再重新啟動起來;
[email protected]:~$ sudo docker restart centos
centos
[email protected]:~$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
742109f79dc9 centos:7.5.1804 "/bin/sh" 6 minutes ago Up 22 seconds centos
4、進入容器內部
4.1.1、在執行一個容器時通常需要加上-d讓它執行在後臺,使用者看不到容器中的資訊,也無法進行操作,這時候要進入容器裡進行操作就要使用exec或attach命令,這裡只說exec命令
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
Options:
-d, --detach Detached mode: run command in the background
--detach-keys string Override the key sequence for detaching a container
-e, --env list Set environment variables
-i, --interactive Keep STDIN open even if not attached
--privileged Give extended privileges to the command
-t, --tty Allocate a pseudo-TTY
-u, --user string Username or UID (format: <name|uid>[:<group|gid>])
-w, --workdir string Working directory inside the container
# 進入centos容器裡面,通過指定-it選項來保持標準輸入開啟,並分配一個偽終端,通過exec命令對容器執行操作是為常見的方式。
[email protected]:~$ sudo docker exec -it centos /bin/bash
[[email protected] /]#
5、刪除容器
docker [container] rm 刪除容器
Options:
-f, --force Force the removal of a running container (uses SIGKILL)
-l, --link Remove the specified link
-v, --volumes Remove the volumes associated with the container
示例:
[email protected]:~$ sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b25cf7e89f28 centos "/bin/bash" 5 seconds ago Exited (0) 3 seconds ago modest_agnesi
742109f79dc9 centos:7.5.1804 "/bin/sh" 23 minutes ago Up 17 minutes centos
# 使用rm刪除的話,只能刪除已經處於停止或退出狀態的容器,已經在執行的容器刪不掉的,如果要刪除的需要加上-f選項
[email protected]:~$ sudo docker rm b25cf7e89f28
b25cf7e89f28
6、匯入和匯出容器
6.1.1、匯出容器:
docker export [OPTIONS] CONTAINER
Options:
-o, --output string Write to a file, instead of STDOUT
可以通過-o選項指定匯出的tar檔名,也可以直接通過重定向來實現。
示例:
[email protected]:~$ sudo docker export -o centos-nginx.tar.gz centos
[email protected]:~$ ls
Desktop Downloads Music Templates Pictures
centos-nginx.tar.gz Dockerfile examples.desktop
Documents images Public Videos
6.1.2、匯入容器
docker container import 匯入變成映象。
[email protected]:~$ sudo docker import centos-nginx.tar.gz test/centos-nginx:v1.0
sha256:90bfdef73b8d3f1d868acd745c1555894ca3e185f27a8e49fd5252d4c23fa67f
[email protected]:~$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
test/centos-nginx v1.0 90bfdef73b8d 11 seconds ago 200MB
7、檢視容器
7.1.1、檢視容器詳情
docker container inspect [options] CONTAINER [CONTAINER....]子命令
檢視centos容器的具體資訊,結果是以json格式返回
[email protected]:~$ sudo docker container inspect centos
[
{
"Id": "742109f79dc9fc41cc4e4452b37be0f560021208a863192353899f58fbe2ca7c",
"Created": "2018-11-19T13:22:25.957033366Z",
"Path": "/bin/sh",
"Args": [],
"State": {
"Status": "running",
"Running": true,
"Paused": false,
"Restarting": false,
"OOMKilled": false,
"Dead": false,
"Pid": 5199,
"ExitCode": 0,
"Error": "",
"StartedAt": "2018-11-19T13:28:12.945203425Z",
"FinishedAt": "2018-11-19T13:28:12.180988774Z"
},
}
..........
]
7.1.2、檢視容器內程序
docker [container] top [options] CONTAINER [CONTAINER...]
類似於Linux中的top命令,會打印出容器內的程序資訊,包括pid、使用者、時間、命令等
# 檢視centos容器內的程序資訊:
[email protected]:~$ sudo docker top centos
UID PID PPID C STIME TTY TIME CMD
root 5199 5177 0 21:28 pts/0 00:00:00 /bin/sh
7.1.3、檢視統計資訊
docker [container] stats [options] [CONTAINER..],可以顯示CPU、記憶體、儲存、網路等使用情況的統計資訊
[email protected]:~$ sudo docker stats centos
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
742109f79dc9 centos 0.00% 1.977MiB / 1.924GiB 0.10% 4.47kB / 0B 7.28MB / 0B 1