亞寵展、全球寵物產業風向標——亞洲寵物展覽會深度解析
702
2022-05-30
一、docker鏡像的創建方法
(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
#鏡像操作指令安裝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???????//創建目標容器
-------------------------------
本文轉自居思涵博客51CTO博客
Docker
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。