安裝在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來創(chuàng)建鏡像,使用docker commit 雖然很容易拓展鏡像谜喊,但不便于團(tuán)隊(duì)分享鲸沮,我們可以使用docker build來創(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來進(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 命令來啟動(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è)窗口命令阻塞,其他窗口都無法執(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或者目錄來導(dǎo)入。
docker import http://..... 鏡像名
docker中可以使用docker load來導(dǎo)入鏡像,也可以使用docker import 來導(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來說,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