安裝在CentOS 7.6 64bit 。系統(tǒng)內(nèi)核要求在3.10以上。
容器是獨(dú)立運(yùn)行的一個(gè)或一組應(yīng)用,及他們的運(yùn)行環(huán)境。
1.查看系統(tǒng)內(nèi)核
uname -r
2.安裝命令
yum -y install docker-io
3.啟動(dòng)命令
service docker start
4.查看版本
docker version
5.查看所有容器
docker ps -a
docker ps 查看運(yùn)行容器
6.啟動(dòng)容器
docker start [name]
7.停止容器
docker stop [name]
8.刪除容器
docker rm [name]
docker rm -f 強(qiáng)制刪
9.進(jìn)入容器
docker exec -it [name] /bin/bash
10.創(chuàng)建鏡像
①docker commit -m '例如git注釋' -a 'author' 鏡像id 鏡像命名
docker commit -m 'create image' -a 'Nan' 7b789b19757d my/image:v1
②Dockerfile
使用Dockerfile來(lái)創(chuàng)建鏡像,使用docker commit 雖然很容易拓展鏡像,但不便于團(tuán)隊(duì)分享,我們可以使用docker build來(lái)創(chuàng)建一個(gè)新的鏡像,為此首先要?jiǎng)?chuàng)建一個(gè)Dockerfile文件,這個(gè)文件中包含如何創(chuàng)建鏡像的指令。
a.首先新建一個(gè)目錄和Dockerfile
b.Dockerfile中輸入指令,每條指令都創(chuàng)建鏡像的一層。層數(shù)有限制,不能超過127,否則會(huì)報(bào)錯(cuò)。
cd docker
mkdir centos
cd centos
touch Dockerfile
vim Dcokerfile
# 注解
FROM centos //FROM 以哪個(gè)鏡像為基礎(chǔ)
MAINTAINER NAN xxxx //維護(hù)者信息
RUN yum -qqy install python //RUN 開頭的指令會(huì)在創(chuàng)建中運(yùn)行,例如yum安裝python。yum需要指定參數(shù),不加-qqy可能會(huì)報(bào)錯(cuò)
docker build -t='my/centos_with_python:v1.0.1' .
這個(gè).很重要,意味著從當(dāng)前路徑去找Dockerfile文件讀取文件,構(gòu)建鏡像
※在build進(jìn)程在執(zhí)行操作。它要做的第一件事情就是上傳這個(gè)Dockerfile內(nèi)容,因?yàn)樗械牟僮鞫家罁?jù)Dockerfile來(lái)進(jìn)行。然后,Dockerfile中的指令被一條一條的執(zhí)行。每一步都創(chuàng)建一個(gè)新的容器,在容器中執(zhí)行指令并提交修改(就跟docker commit 一樣)。當(dāng)所有指令完成,返回最終的鏡像id。所有中間步驟所產(chǎn)生的容器都被刪除和清理。
不能超過127層。
Dockerfile中還可以輸入其他的命令,例如可以使用ADD命令復(fù)制本地文件到鏡像中;用expose命令對(duì)外開放端口;用CMD命令描述容器啟動(dòng)后運(yùn)行的程序。
11.運(yùn)行鏡像
docker run -t -i my/image:v1
參數(shù)-t讓Docker分配一個(gè)偽終端并綁定在容器的標(biāo)準(zhǔn)輸入上,-i讓容器的標(biāo)準(zhǔn)輸入保持打開。-d在后臺(tái)以守護(hù)態(tài)運(yùn)行(daemen)。
使用docker run 命令來(lái)啟動(dòng)容器,docker在后臺(tái)運(yùn)行的標(biāo)準(zhǔn)操作包括
a.檢查本地是否存在指定的鏡像,不存在則從公有倉(cāng)庫(kù)下載
b.使用鏡像創(chuàng)建并啟動(dòng)容器
c.分配一個(gè)文件系統(tǒng),并在只讀的鏡像層外面掛在一層可讀可寫層。
d.從宿主主機(jī)配置的網(wǎng)橋接口中橋接一個(gè)虛擬接口到容器中去
e.從地址池分配一個(gè)ip地址給容器
f.執(zhí)行用戶指定的應(yīng)用程序
g.執(zhí)行完畢之后容器被終止
后臺(tái)運(yùn)行的容器我們?cè)趺催M(jìn)入:
①docker attach 是docker自帶的命令。
docker attach 容器名
該命令有時(shí)候并不方便,因?yàn)樗峭降?,如有多個(gè)用戶attach到一個(gè)容器,一個(gè)窗口命令阻塞,其他窗口都無(wú)法執(zhí)行。
②nsenter命令:在util-linux包2.23版本后都有包含。nsenter可以訪問另一個(gè)進(jìn)程的進(jìn)程空間。
安裝:
wget ...util-linux...
tar 解壓
cd
./configure 配置
cp nsenter /user/local/bin
為了連接到容器,需要知道容器的PID,可以使用nsenter獲取,如下:
PID=$(docker-pid 容器id)
docker-pid需要自己安裝,否則找不到命令
配好之后,獲取到PID后,
nsenter --target 3291 --mount --uts --ipc --new --pid進(jìn)入容器
12.修改鏡像標(biāo)簽
docker tag 鏡像ID 修改后標(biāo)簽名
13.導(dǎo)入鏡像
必須是.tar.gz或tart 文件
cat ubuntu_elm.tar | docker import -my/ubuntu_elm:v1.1.0
14.上傳鏡像
用戶可以通過docker push命令,把自己創(chuàng)建的鏡像上傳到倉(cāng)庫(kù)中共享。
docker push 鏡像名
15.保存鏡像到本地
docker save -o 保存的鏡像的名字 docker中鏡像的名字
16.將本地保存的鏡像導(dǎo)入到docker
①docker load --input 鏡像名
②docker load < 鏡像名
17.刪除鏡像
docker rmi image_id
docker rmi -f image_id 強(qiáng)制刪除
18.打印容器日志
docker logs 容器id
19.導(dǎo)出容器
docker export 容器id > 容器名
20.導(dǎo)入容器
cat centos.tar | docker import - my/centos:v1
還可以通過指定一個(gè)URL或者目錄來(lái)導(dǎo)入。
docker import http://..... 鏡像名
docker中可以使用docker load來(lái)導(dǎo)入鏡像,也可以使用docker import 來(lái)導(dǎo)入一個(gè)容器快照到docker鏡像。兩者的區(qū)別是容器快照將丟失所有的歷史記錄和元數(shù)據(jù)信息。而鏡像保存完整的記錄,因此也更大一些。
Docker公有倉(cāng)庫(kù) Docker Hub
倉(cāng)庫(kù)是集中存放鏡像的地方。容易混淆的是注冊(cè)服務(wù)器,它是管理倉(cāng)庫(kù)的服務(wù)器,每個(gè)服務(wù)器上可以有多個(gè)倉(cāng)庫(kù),每個(gè)倉(cāng)庫(kù)下可以有多個(gè)鏡像。因此倉(cāng)庫(kù)可以被認(rèn)為是一個(gè)具體的目錄。
例如,dl.dockerpool.com/centos來(lái)說,dl.dockerpool.com是注冊(cè)服務(wù)器地址,centos是一個(gè)倉(cāng)庫(kù)名字。
Docker官方目前維護(hù)著一個(gè)公共倉(cāng)庫(kù),我們要是用這個(gè)倉(cāng)庫(kù),需要登錄https://hub.docker.com網(wǎng)站,注冊(cè)一個(gè)賬號(hào)
在命令行中輸入docker login輸入用戶名密碼完成登錄。
成功后,本地用戶目錄的.docker目錄中將保留用戶的認(rèn)證信息。
要推送鏡像到Docker Hub,需要先登錄賬號(hào),然后使用docker push 鏡像名 推送鏡像
Docker 私有倉(cāng)庫(kù)
有時(shí)候,在公司內(nèi)部為了提高分享的速度,需要在公司內(nèi)部搭建一個(gè)本地倉(cāng)庫(kù),供個(gè)人使用。
docker官方提供了一個(gè)工具docker-registry,我們可以借助這個(gè)工具構(gòu)建私有鏡像倉(cāng)庫(kù)
a.首先,使用docker search命令查找registry
b.docker pull registry
c.運(yùn)行registry : docker run -d -p 5000:5000 -v /root/docker/registry:/tmp/registry registry
默認(rèn)情況下,倉(cāng)庫(kù)會(huì)創(chuàng)建在容器中的/tmp/registry目錄下,通過-v指定將鏡像文件存放在本地的目錄中。
d.搭建好了私有倉(cāng)庫(kù)后,就可以上傳、下載、搜索鏡像了。
e.查看本機(jī)ip地址:ifconfig 。將鏡像名字的前綴改成本機(jī)ip加端口 192.168.0.150:5000
f.docker push 192.168.0.150:5000/centos將鏡像推送到私有倉(cāng)庫(kù)。
g.局域網(wǎng)內(nèi)其他機(jī)器可以使用docker pull 鏡像名拉取鏡像。
# docker創(chuàng)建六個(gè)redis節(jié)點(diǎn)
docker create --name redis-node-1 --net host --privileged=true -v /data/redis/share/redis-node-1:/data redis:5.0.7 --cluster-enabled yes --appendonly yes --port 6379
docker create --name redis-node-2 --net host --privileged=true -v /data/redis/share/redis-node-2:/data redis:5.0.7 --cluster-enabled yes --appendonly yes --port 6380
docker create --name redis-node-3 --net host --privileged=true -v /data/redis/share/redis-node-3:/data redis:5.0.7 --cluster-enabled yes --appendonly yes --port 6381
docker create --name redis-node-4 --net host --privileged=true -v /data/redis/share/redis-node-4:/data redis:5.0.7 --cluster-enabled yes --appendonly yes --port 6382
docker create --name redis-node-5 --net host --privileged=true -v /data/redis/share/redis-node-5:/data redis:5.0.7 --cluster-enabled yes --appendonly yes --port 6383
docker create --name redis-node-6 --net host --privileged=true -v /data/redis/share/redis-node-6:/data redis:5.0.7 --cluster-enabled yes --appendonly yes --port 6384