容器是 Docker 的另一個(gè)核心概念。 簡(jiǎn)單來說,容器是鏡像的一個(gè)運(yùn)行實(shí)例。所不同的是,鏡像是靜態(tài)的只讀文件,而容器帶有運(yùn)行時(shí)需要的可寫文件層,同時(shí),容器中的應(yīng)用進(jìn)程處于運(yùn)行狀態(tài)。
如果認(rèn)為虛擬機(jī)是模擬運(yùn)行的一整套操作系統(tǒng)(包括內(nèi)核、 應(yīng)用運(yùn)行態(tài)環(huán)境和其他系統(tǒng)環(huán)境)和跑在上面的應(yīng)用。 那么 Docker 容器就是獨(dú)立運(yùn)行的一個(gè)(或一組)應(yīng)用,以及它們必需的運(yùn)行環(huán)境。
5.1 創(chuàng)建容器
- 獲取centos:7.5.1804的鏡像
docker pull centos:7.5.1804

- 創(chuàng)建容器
docker create -i -t centos:7.5.1804 /bin/bash

說明:
I. 創(chuàng)建一個(gè)交互式的容器
II. -i: 允許你對(duì)容器內(nèi)的標(biāo)準(zhǔn)輸入 (STDIN) 進(jìn)行交互
III. -t: 在新容器內(nèi)指定一個(gè)偽終端或終端。
- 啟動(dòng)容器
docker start bcc

- 新建并啟動(dòng)容器
前面的操作是先創(chuàng)建容器, 然后再啟動(dòng)容器. 也可以使用run來直接新建并啟動(dòng)容器
啟動(dòng)一個(gè)交互式的centos容器
docker run -it centos:7.5.1804 /bin/bash
說明:
檢查本地是否存在指定的鏡像,不存在就從公有倉(cāng)庫(kù)下載;
利用鏡像創(chuàng)建一個(gè)容器,并啟動(dòng)該容器;
分配一個(gè)文件系統(tǒng)給容器,并在只讀的鏡像層外面掛載一層可讀寫層 ;
查看有哪些容器
查看啟動(dòng)的容器
docker ps

- 查看所有容器
docker ps -a

- 啟動(dòng)后臺(tái)容器進(jìn)程
docker run -itd centos:7.5.1804 /bin/bash
5.2 停止容器
docker stop bcc

5.3 進(jìn)入容器
在使用 -d 參數(shù)時(shí),容器啟動(dòng)后會(huì)進(jìn)入后臺(tái)(有些容器默認(rèn)就是后臺(tái), 比如centos容器)。此時(shí)想要進(jìn)入容器,可以通過以下指令進(jìn)入:
docker exec -it bcc /bin/bash

通過指定 -it參數(shù)來保持標(biāo)準(zhǔn)輸入打開, 并且分配一個(gè)偽終端??梢钥吹綍?huì)打開一個(gè)新的 bash 終端,在不影響容器內(nèi)其他應(yīng)用的前提下,用戶可以與容器進(jìn)行交五。
5.4 刪除容器
- 刪除已經(jīng)停止的容器
docker rm ea5c

- 刪除正在運(yùn)行的容器
先停止, 再刪除
docker rm -f bcc

5.5 導(dǎo)入和導(dǎo)出容器
某些時(shí)候,需要將容器從一個(gè)系統(tǒng)遷移到另外一個(gè)系統(tǒng),此時(shí)可以使用 Docker 的導(dǎo)人 和導(dǎo)出功能,這也是 Docker 自身提供的一個(gè)重要特性。
為了測(cè)試容器是否導(dǎo)出和導(dǎo)入成功, 我們?cè)赾entos容器中創(chuàng)建一個(gè)新的文件

5.5.1 導(dǎo)出容器
導(dǎo)出容器是指,導(dǎo)出一個(gè)已經(jīng)創(chuàng)建的容器到一個(gè)文件,不管此時(shí)這個(gè)容器是否處于運(yùn)行狀態(tài).
docker export -o '/home/atguigu/test_for_centos.tar' 9fa

可以把導(dǎo)出的tar文件, 傳輸?shù)狡渌O(shè)備, 再通過導(dǎo)入命令導(dǎo)入, 實(shí)現(xiàn)容器的遷移.
5.5.2 導(dǎo)入容器
將上節(jié)導(dǎo)出的容器導(dǎo)入之后會(huì)成為鏡像.
docker import test_for_centos.tar -- test/mycentos:1.0

使用新的鏡像啟動(dòng)容器:

剛才創(chuàng)建的文件還在
5.6 查看容器
5.6.1 查看容器詳情
docker container inspect 9fa
會(huì)以 json 格式返回包括容器 Id、創(chuàng)建時(shí)間、路徑、狀態(tài)、鏡像、配置等在內(nèi)的各項(xiàng)信息

5.6.2 查看容器內(nèi)進(jìn)程
docker top 9fa
這個(gè)子命令類似于 Linux 系統(tǒng)中的 top 命令, 會(huì)打印出容器內(nèi)的進(jìn)程信息, 包括 PID 、 用戶、時(shí)間、命令等

5.6.3 查看統(tǒng)計(jì)信息
docker stats --no-stream 9fa
會(huì)顯示 CPU 、內(nèi)存、存儲(chǔ)、網(wǎng)絡(luò)等使用情況的統(tǒng)計(jì)信息

5.7 容器和主機(jī)之間復(fù)制文件
容器和主機(jī)之間進(jìn)行文件復(fù)制的時(shí)候, 要保證容器已經(jīng)啟動(dòng).
5.7.1 從主機(jī)復(fù)制到容器
docker cp test.txt 9fa:/

5.7.2 從容器復(fù)制到主機(jī)
docker cp 9fa:/a.txt ./
