1. 程式人生 > >Docker數據管理與網絡通信

Docker數據管理與網絡通信

新的 uil ffd RoCE pre 變量 標簽 cee strong

一、Docker鏡像的創建方法

1、基於現有鏡像的創建
docker commit -m "shuoming" -a "zuozhe" 容器ID docker:apache
-m:說明信息
-a:作者信息
-p:生成過程中停止容器的運行
技術分享圖片
2、基於本地模板創建
從對應的網站下載centos模板,並上傳
技術分享圖片
3、基於Dockerfile創建
除了手動生成Docker鏡像之外,還可以用Dockerfile自動生成鏡像。Dockerfile是由一組指令組成的文件,其中每條指令對應Linux中的一條命令,Docker程序將讀取Dockerfile中的指定生成指定鏡像。
Dockerfile結構大致分為四個部分:基礎鏡像信息、維護者信息、鏡像操作指令和容器啟動時執行指令。Dockerfile每行支持一條指令,每條指令可攜帶多個參數,支持使用以“#”開頭的註釋。

(1)Dockerfile編寫規則
在編寫Dockerfile時,有嚴格的格式需要遵循:
1)第一行必須使用FROM指令指明所基於的鏡像名稱
2)之後使用MAINTAINER指令說明維護該鏡像的用戶信息
3)然後時鏡像操作相關指令,如RUN指令,每運行一條指令,都會給基礎鏡像添加新的一層
4)最後使用CMD指令,來指定啟動容器時需要運行的命令操作。

(2)Dockerfile操作指令
FROM 鏡像:指定新鏡像所基於的鏡像,第一條指令必須為FROM指令,每創建一個鏡像就需要一條FROM指令
MAINTAINER 名字:說明新鏡像的維護人信息
RUN 命令:在所基於的鏡像上執行命令,並提交到新的鏡像中
CMD["要運行的程序","參數1","參數2"]:指定啟動容器時要運行的命令或者腳本,Dockerfile只能有一條CMD命令,如果指多條則只有最後一條被執行

EXPOSE 端口號:指定新鏡像加載到Docker時要開啟的端口
ENV 環境變量 變量值:設置一個環境變量的值,會被後面的RUN使用
ADD 源文件/目錄 目標文件/目錄:將源文件復制到目標文件,源文件要與Dockerfile位於相同目錄中,或者是一個URL
COPY 源文件/目錄 目標文件/目錄:將本地主機上的源文件/目錄復制到目標地址點,源文件/目錄要與Dockerfile在相同的目錄中
VOLUME["目錄"]:在容器中創建一個掛載點
USER 用戶名/UID:指定運行容器時的用戶
WORKDIR 路徑:為後續的RUN、CMD、ENTRYPOINT指定工作目錄
ONBUILD 命令:指定所生成的鏡像作為一個基礎鏡像時所要運行的命令

(3)docker案例展示

mkdir apache        //建工作目錄
cd apache
vi Dockerfile   //編寫dockerfile

添加以下內容(#為註釋)
#基於的基礎鏡像為centos
FROM centos
#維護該鏡像的用戶信息
MAINTAINER The Centos Project<[email protected]>
#鏡像操作指令安裝apache軟件包
#RUN yum -y update
RUN yum -y install httpd
#開啟80端口
EXPOSE 80
#復制網站首頁文件
ADD index.html /var/www/html/index.html
#將執行腳本復制到鏡像中
ADD run.sh /run.sh
RUN chmod 755 /run.sh
#啟動容器時執行腳本
CMD ["/run.sh"]

vi run.sh //編寫apache啟動腳本
添加以下內容
rm -rf /run/httpd/* //清理httpd的緩存
exec /usr/sbin/apachectl -D FOREGROUND //啟動apache服務

vi index.html //編寫測試頁
添加測試頁內容
this is test

docker build -t httpd1:centos7 . //生成鏡像 //使用Dockerfile生成鏡
-t:指定鏡像的標簽信息
技術分享圖片

註意:指定該命令註意要在Dockerfile所在的目錄下面執行,其中“.”為當前路徑
,如果不在dockfile目錄下面,後面要加dockfile的路徑如:docker build -t httpd1:centos7 /apche

docker run -d -p 80:80 ID //啟動鏡像並進行本地端口映射
技術分享圖片
網頁訪問192.168.80.100
技術分享圖片
4、構建私有倉庫並將鏡像上傳

docker pull registry        //下載私有倉庫的鏡像
vi /etc/docker/daemon.json  //創建json文件

添加以下內容
{ "insecure-registries":["192.168.80.100:5000"]}

systemctl daemon-reload //重啟加載json文件
systemctl restart docker        //重啟容器服務

技術分享圖片

docker tag http1:centos7 192.168.80.100:5000/apache //給dockfile生成的鏡像打標簽格式如上,否則無法上傳打私有倉庫
docker push 192.168.80.100:5000/apache  //上傳到私有倉庫

技術分享圖片
curl http://192.168.80.100:5000/v2/_catalog //獲取私有倉庫列表
技術分享圖片
打開另外一臺部署docker的虛擬機,對應的IP為:192.168.80.110保證網絡互通測試私有倉庫
vi /etc/docker/daemon.json //同樣創建json文件
添加私有倉庫的地址
{ "insecure-registries":["192.168.80.100:5000"]}

systemctl daemon-reload //重啟加載json文件
systemctl restart docker        //重啟容器服務

curl http://192.168.80.100:5000/v2/_catalog //查看倉庫列表
技術分享圖片
docker pull 192.168.80.100:5000/apache //從私有倉庫拉取上傳的鏡像
技術分享圖片

二、Docker的數據管理

在Docker中,為了方便查看容器內產生的數據或者將多個容器中的數據實現共享,就是涉及到容器的數據管理操作。主要有兩種方式:數據卷(Data Volumes)和數據卷容器(Data Volumes Containers)。
1、數據卷
數據卷是一個供容器使用的特殊目錄,位於容器中,可將宿主機的目錄掛載到數據卷上,對數據卷的修改操作立刻可見,並且更新數據不會影響鏡像,從而實現數據在宿主機與容器之間的遷移。數據卷的使用類似Linux下對目錄進行mount操作。
docker run -v /var/www:/data1 --name web1 -it centos /bin/bash //將宿主機目錄/var/www掛載容器中的/data1
技術分享圖片
-v:在容器內創建數據卷,多次使用-v選項可以創建讀個數據卷
--name:給容器創建一個友好的自定義名稱
註意:宿主機本地目錄的路徑必須使用絕對路徑,如果路徑不存在,Docker會自動創建相應的路徑
2、數據卷容器
如果需要在容器之間共享一些數據,最簡單的方法就是使用數據卷容器。數據卷容器就是一個普通的容器,專門提供數據卷給其他容器掛載使用。使用的方法如下:首先,需要創建一個容器作為數據卷容器,之後在其他容器創建時用 --volumes-from 掛載數據卷容器中的數據卷使用。

docker run -d --name web100 -v /data1 -v /data2 -it centos /bin/bash    //創建新的數據卷容器
docker run -it --volumes-from web100 --name db1 centos /bin/bash        //創建新的容器,並掛載到數據卷容器web100上

技術分享圖片

三、Docker網絡通信

1、端口映射
在啟動容器的時候,如果不指定對應的端口,在容器外將無法通過網絡來訪問容器內的服務。Docker提供端口映射機制來將容器內的服務提供給外部網絡訪問,實質上就是將宿主主機的端口映射到容器中,使得外部網絡訪問宿主機的端口便可訪問容器內的服務。
docker run -d -P httpd //端口的隨機映射
-P(大寫):實現端口的隨機映射
-p(小寫):指定要映射的端口
技術分享圖片
技術分享圖片
網頁訪問隨機映射端口32768
技術分享圖片
網頁訪問指定端口49280
技術分享圖片
2、容器互聯
容器互聯是通過容器的名稱在容器間建立一條專門的網絡通信隧道從而實現容器的互聯。簡單點說,就是會在源容器和接收容器之間建立一條隧道,接收容器可以看到源容器指定的信息。
在運行docker run命令時使用 --link選項可以實現容器之間的互聯通信。
格式為 --link name:alias,其中name是要連接的容器名稱,alias是這個連接的別名。

docker run -d -P --name web11 -it centos /bin/bash      //創建源容器並啟動
docker run -P --name web2 --link web11:web11 -it centos /bin/bash       //創建目標容器

技術分享圖片

Docker數據管理與網絡通信