0x00 教程內(nèi)容
- Docker的安裝
- Docker的簡單操作
- Docker數(shù)據(jù)卷與數(shù)據(jù)卷容器
- Docker網(wǎng)絡配置
- Docker鏡像的打包與載入
0x01 Docker的安裝
0. 安裝前提
a.kernel版本需大于3.10:
uname -r

b.能上外網(wǎng)
ping baidu.com

c.本文是基于Centos7(6或ubuntu需改代碼)
1. 安裝Docker
a.切換成root用戶權限(執(zhí)行后輸入自己的root密碼):
su root

b.安裝軟件包(目的是為了c.步):
yum install -y yum-utils device-mapper-persistent-data lvm2
c.設置yum源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

d.安裝指定版本(18.03.0.ce)
yum install -y docker-ce-18.03.0.ce

2. 開啟Docker服務并校驗
a.開啟服務
systemctl start docker.service
b.校驗
docker version
3. 配置自啟動與國內(nèi)鏡像
a.設置Docker開機自啟
systemctl enable docker.service

b.配置國內(nèi)鏡像(使下載鏡像更快)
vi /etc/docker/daemon.json
{
"registry-mirrors": ["https://registry.docker-cn.com"]
}
c.重啟Docker:
systemctl daemon-reload
systemctl restart docker
0x02 Docker的簡單操作
1. 查找鏡像
docker search mysql --filter=stars=100
“--filter=stars=100”:顯示STARS數(shù)不小于100的鏡像
2. 拉取與查看鏡像
docker pull mysql:5.5
(docker pull mysql為拉取最新版本,5.5為指定版本)
docker images
3. 運行鏡像(會實例化出容器,并進入容器)
docker run -t -i mysql:5.5 /bin/bash

4. 查看容器
a.查看運行中容器(執(zhí)行后,切換終端查看)
su root
docker ps

b.查看所有的容器
docker ps -a
5. 退出容器
exit
(ps:注意本實驗多出省略此語句,請注意看截圖判斷是在容器內(nèi)執(zhí)行還是centos里執(zhí)行)
6. 在原有鏡像基礎上創(chuàng)建新鏡像
a.新拉取一個centos鏡像,并添加新的內(nèi)容
docker pull centos
docker run -t -i centos /bin/bash
touch shaonaiyi.txt
echo wechat:shaonaiyi888 >> shaonaiyi.txt

b.復制主機名be6d5355a518,退出鏡像
exitc.生成新的鏡像
docker commit -m "add wechat" -a "New Container" be6d5355a518 shaonaiyi/centos:v1.0.0d.查看鏡像
docker images
7. 給鏡像打標簽
docker tag 75835a67d134 shaonaiyi/centos:v1.0.1
docker images

0x03 Docker數(shù)據(jù)卷與數(shù)據(jù)卷容器
Docker的數(shù)據(jù)卷與Centos的mount類似,也跟電腦主機插CD光盤一樣。
1. 數(shù)據(jù)卷(了解即可,可不操作)
a.創(chuàng)建名為app1的并帶有數(shù)據(jù)卷mount的容器(-d指后臺執(zhí)行)
docker run -d -P -it --name app1 -v /mount centos /bin/bash

b.進入app1容器并中查看數(shù)據(jù)卷為空
docker attach app1


c. 先退出容器,然后查看掛載情況(指定顯示:Mounts)
exitdocker inspect -f {{.Mounts}} app1
d.進入app1容器
docker start app1docker attach app1
e.然后切換終端2在默認的路徑新建文件,切回終端1可查看到結果
touch /var/lib/docker/volumes/8b4354560f97f16b2b875499dde06fd8bb874687ee95d049ed2bdaec17a9dfd3/_data/hello

f.同樣,在app1里面新建文件,在默認文件夾也可同步
g.查看并刪除數(shù)據(jù)卷
docker volume ls
docker rm -v移除容器的同時也會移除數(shù)據(jù)卷
docker run --rm在容器退出時清除數(shù)據(jù)
ps:只能刪除沒有容器掛載的Volume。如果有容器正在掛載的數(shù)據(jù)卷則不會被刪除。
h.刪除容器(自行創(chuàng)幾個來刪除或者知道就可以了,-f為強行刪除,無論是否在運行都刪除)
docker rm -f be6d5355a518

docker volume prune刪除無用的數(shù)據(jù)卷(強行刪除了一些容器后執(zhí)行的結果)
2. 數(shù)據(jù)卷(簡易操作版)
a.創(chuàng)建指定文件夾(-p指創(chuàng)建多級文件夾,即/docker沒有也會創(chuàng)建)
mkdir -p /docker/datas
touch /docker/datas/hello.txt

b.執(zhí)行容器,掛載/docker/datas到docker容器的/datas(發(fā)現(xiàn)centos的hello.txt文件可在容器中查看到)
docker run -d -P -it --name web1 -v /docker/datas:/datas centos /bin/bash
c.設置容器中的/datas為只讀模式(:ro)
docker run -d -P -it --name web1 -v /docker/datas:/datas:ro centos /bin/bashd.亦可以掛載單個文件
docker run -d -P -it --name web2 -v ~/.bash_history:/.bash_history centos /bin/bashdocker attach web2ll -a查看以“.”開頭的隱藏文件
3.數(shù)據(jù)卷容器
a.創(chuàng)建一個專門用于掛載的容器(掛載目錄為/database,echo database表示創(chuàng)建后執(zhí)行后的命令行)
docker run -d -v /database --name db centos echo database
b.查看執(zhí)行后的結果
docker logs db

c.創(chuàng)建一個掛載容器db的/database的容器db1
docker run -d -it --volumes-from db --name db1 centos /bin/bash
d.檢驗是否掛載成功
docker attach db1
ls

0x04 Docker網(wǎng)絡配置
0. 開啟Docker的端口轉發(fā)
a.解決Ipv4警告而已,可不操作,直接執(zhí)行下面1.先
echo net.ipv4.ip_forward=1 >> /usr/lib/sysctl.d/00-system.conf
more /usr/lib/sysctl.d/00-system.conf
b.執(zhí)行完發(fā)現(xiàn)/usr/lib/sysctl.d/00-system.conf里面多了net.ipv4.ip_forward=1,然后重啟網(wǎng)絡:
systemctl restart network && systemctl restart docker
如不執(zhí)行,在運行下面語句時會有警告:

1. 綁定centos端口與容器的端口
a.運行一個容器(-p 5000:5000 可替換成-P,則隨機分配端口)
docker run -d -p 5000:5000 training/webapp python app.py
b.查看運行中容器的端口映射情況
docker ps
c.退出容器,然后在centos查看情況(說明綁定成功)
curl 127.0.0.1:5000
d.綁定指定ip端口則在前面加指定ip(127.0.0.1可換成其他ip地址)
docker run -d -p 127.0.0.1:5000:5000 training/webapp python app.py
e.綁定指定ip隨機的端口(127.0.0.1可換成其他ip地址)
docker run -d -p 127.0.0.1::5000 training/webapp python app.py
f.綁定指定多端口映射(執(zhí)行后會用c.方式訪問發(fā)現(xiàn)都可以查看)
docker run -d -p 5010:5000 -p 5020:5000 training/webapp python app.py
g.還可以指定通信協(xié)議(/udp或/tcp)
docker run -d -p 5030:5000/udp training/webapp python app.py
h.查看端口映射(容器的端口或者NAMES都可以查看)
docker ps
docker port jolly_fermat

i.查看詳情(看到很多信息,可以跟0x03的c.的語句做對比)
docker inspect jolly_fermat
2. 容器互聯(lián)(子容器連接父容器)
a.創(chuàng)建一個db容器
docker run -it -d --name net0 centos
b.查看webapp1容器的環(huán)境變量(db:db<=>容器名:容器別名)
docker run -it --name webapp1 --link net0:net0 centos /bin/bash
c.執(zhí)行查看/etc/hosts,發(fā)現(xiàn)也加上了映射
cat /etc/hosts

d.查看發(fā)現(xiàn)webapp1能ping通net0容器
ping net0

0x05 Docker鏡像的打包與載入
0. 查看鏡像
a.記住REPOSITORY
docker images
1. 打包
a.sny_centos.tar.gz為打包后的名字,shaonaiyi/centos為REPOSITORY
docker save -o sny_centos.tar.gz shaonaiyi/centos

2. 載入
a.執(zhí)行l(wèi)l,可查看到本地多了sny_centos.tar.gz文件
b.執(zhí)行后,發(fā)現(xiàn)導入了兩個鏡像
docker load --input sny_centos.tar.gz

3. 打包單個鏡像
a.添加上TAG即可
docker save -o sny_centos.tar.gz shaonaiyi/centos:v1.0.1

4. 刪除鏡像
a.-f指強制刪除,后面接IMAGE_ID,此處為刪除我的mysql
docker rmi -f d27424d4dcd4

5. 導入容器快照
a.下載或者拿到別人的鏡像,此處使用自己的鏡像,體現(xiàn)不出大小
cat sny_centos.tar.gz | docker import - sny_centos:v1.0.2
6.導入鏡像與導入容器快照的區(qū)別
a.容器快照可以重新定義名稱
b.容器快照不保存元數(shù)據(jù)和歷史數(shù)據(jù),所以體積更小
0xFF 總結
- 我會提供一個完整的大數(shù)據(jù)集群docker鏡像,小伙伴們只需安裝好Docker后載入即可使用(關注公眾號:邵奈一,或者加微信:shaonaiyi888獲取)。
- 鏡像類比面向對象語言里面的類,容器類比類實例化出來的對象。
- 具體操作實驗與解析自行搜尋資料了解
- 容器互聯(lián)部分有一些省略,后期補上或者自己搜資料了解
- 打包與載入鏡像章節(jié),在自己主機可能體現(xiàn)不出來,拿到我提供的鏡像后可實際操作一遍
- 常用命令擴展
Centos操作:
yum list docker-ce --showduplicates | sort -r查看yum里docker的版本
yum install -y docker-ce安裝最新版本的docker
作者簡介:邵奈一
大學大數(shù)據(jù)講師、大學市場洞察者、專欄編輯
公眾號、微博、CSDN:邵奈一
本系列課均為本人:邵奈一 原創(chuàng),如轉載請標明出處