容器:簡單來說它就是對應用程序封裝和交付;它的技術核心有3個內核技術組成(NameSpace進程隔離:把一個進程放在獨立的內存空間裏,隔離進程。CGroups命名空間:內核級的資源管理控制器。SELinux)。容器和物理機是相通的,它是工作在物理機上。
Docker是一套完整容器管理系統,它提供了一系列命令可以讓用戶更方便直接的使用而不需要關心底層內核技術。
|---鏡像 相當於啓動一個實例用的文件,是啓動容器的核心,它是一個靜態的可以被用戶互相分享的文件
Docker -----|---容器 就是一個運行的實例,也可以理解爲鏡像的動態的狀態,我們通過它來操作和管理
|---倉庫 主要是存放鏡像的倉庫,Docker官方提供的公共鏡像倉庫叫(Registry)
鏡像採用分層設計,使用快照的COW技術(寫時複製)確保底層數據不丟失。使用聯合加載,聯合mount的技術掛載。前端具有讀寫功能,後端只讀。
Docker只能運行在Linux7以上或者CentOS6及以上版本,內核3.1.0以上,64位操作系統上
安裝Docker平臺所需要的軟件(如果鏡像沒有需要單獨下載)
– docker-engine
– docker-engine-selinux
Docker鏡像基本命令(後都跟名字:標籤)
– docker images //查看鏡像列表
– docker history //查看鏡像製作歷
– docker inspect //查看鏡像底層信息(瞭解鏡像環境變量、存儲卷、標籤等信息)
– docker pull //下載鏡像
– docker push //上傳鏡像
– docker rmi //刪除本地鏡像(啓動容器時刪除鏡像會提示錯誤)
– docker save //鏡像另存爲tar包
– docker load //使用tar包導入鏡像
– docker search //搜索鏡像
– docker tag //修改鏡像名稱和標籤
[root@KD ~]# docker images
鏡像倉庫名稱 標籤 鏡像ID號 創建時間 大小
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest 980e0e4c79ec 8 months ago 196.7 MB
• 保存本地鏡像另存爲tar文件,方便其他人使用tar包導入鏡像
[root@KD~]# docker save centos > centos.tar
• 使用tar包文件導入鏡像
[root@KD ~]# docker load < centos.tar
• 重命名鏡像名稱(相當於複製)
[root@KD ~]# docker tag centos:latest(源) test:v1(目標)
Docker容器基本命令(後都跟ID號)
– docker run //運行容器(常用的3參數:-i 交互式,-t終端,-d後臺進程 非交互式;it常一起用,d常單獨用)
– docker ps //查看容器列表(常用參數:-a顯示所有, -p顯示容器ID號)
– docker stop //關閉容器
– docker start //啓動容器
– docker restart //重啓容器
– docker attach|exec //進入容器
– docker inspect //查看容器底層信息
– docker top //查看容器進程列表
– docker rm //刪除容器
• 進入容器
– docker attach 進入容器,exit會導致容器關閉,按ctrl+p,然後鬆開p在按q,ctrl一直不鬆 可以退出容器不關閉
– docker exec -it 進入容器,退出時不會關閉容器
自定義鏡像和倉庫
在使用鏡像啓動容器後,在改鏡像的基礎上進行修改,然後在另存爲另一個鏡像。
docker commit 舊容器ID 新鏡像名:新標籤
使用Dockerfile文件自定義鏡像Dockerfile文件格式
– FROM:基礎鏡像
– MAINTAINER:鏡像創建者信息
– EXPOSE:開放的端口
– ENV:設置變量
– ADD:複製文件到鏡像(此文件是和Dockerflie在一個目錄裏的文件)
– RUN:製作鏡像時執行的命令,可以有多個
– WORKDIR:定義容器默認工作目錄
– CMD:容器啓動時執行的命令,僅可以有一條CMD
使用Dockerfile工作流程
– mkdir build
– cd build
– vim Dockerfile
– docker build -t imagename Dockerfile //imagename是新鏡像的名稱:新標籤
registry基本概念:共享鏡像的一臺服務器(鏡像化的一臺服務器)
流程:
1、docker pull registry //創建自定義私有倉庫
2、[root@KD]# vim /etc/docker/daemon.json //創建配置文件寫服務器的地址,讓它使用http傳輸,不用https傳輸,因爲默認會用https傳
{
"insecure-registries" : ["192.168.4.10:5000"]
}
3、systemctl restart docker //重啓docker服務
4、docker run -d -p 5000:5000 registry //後臺啓動自定義私有倉庫,並把容器5000端口綁定到物理機5000端口
5、docker tag mycentos:latset 192.168.4.10:5000/mycentos:latset //打標籤(相當於告訴它把那個鏡像傳到那裏去)
6、docker push 192.168.4.10:5000/mycentos:latset //上傳鏡像到自定義倉庫
測試:
1、[root@KD]# vim /etc/docker/daemon.json //創建daemon配置文件寫服務器的地址,讓它使用http傳輸,不用https傳輸,因爲默認會用https傳
{
"insecure-registries" : ["192.168.4.10:5000"]
}
2、systemctl restart docker //重啓docker服務
3、docker run -it 192.168.4.10:5000/mycentos:latset //用服務器上的鏡像啓動容器
查詢私有倉庫裏面的鏡像:
1、能ping同私有倉庫地址
2、curl http://私有倉庫IP地址:5000/v2/_catalog 查看私有倉庫裏面有那些鏡像(v2是版本)
3、curl http://私有倉庫IP地址:5000/v2/鏡像名稱/tags/list 查看私有倉庫鏡像有那些標籤(v2是版本)
持久化存儲
docker容器不保持任何數據
• 重要數據請使用外部卷存儲(數據持久化)
• 容器可以掛載真實機目錄或共享存儲爲卷
將真實機目錄掛載到容器中提供持久化存儲
[root@KD ~]# docker run -v /data:/data -it centos bash (-v 物理機文件加:容器裏文件夾)
備註:主機文件夾映射到容器文件夾會清空容器裏文件夾的數據,主機的文件【可以是掛載的其它服務的共享數據】
一臺共享存儲服務器可以提供給所有Docker主機使用
• 共享存儲服務器(NAS、SAN、DAS等)
• 如:
– 使用NFS創建共享存儲服務器
– 客戶端掛載NFS共享,並最終映射到容器中
Docker網絡架構
一臺docker服務器中的容器間是相通的因爲安裝docker後會有一個虛擬交換機,每個容器都連上了此虛擬交換機。
在docker服務器上安裝一個軟件包bridge-utils,這個是管理虛擬交換機的軟件。
brctl show //查看虛擬交換機上連接了那些網線,虛擬交換機默認名字是docker0
brctl delif docker0 網卡ID //拔掉虛擬交換機docker0上叫網卡ID的網線
brctl addif docker0 網卡ID //插上虛擬交換機docker0上叫網卡ID的網線
docker network list //查看虛擬交換機
自定義創建虛擬交換機名字爲docker1 使用192.168.4.0網段的地址
docker network create --subnet 192.168.4.0/24 -d bridge -o com.network.bridge.name=docker1 docker1
啓動容器指定使用那個虛擬交換機
docker run -it --network=docker1 docker自定義倉庫IP:5000/鏡像名:標籤
啓動容器進行端口綁定就是在防火牆iptables裏添加規則