Docker--構建鏡像、私有倉庫registry、數據卷、端口映射

Docker入門之構建鏡像、私有倉庫registry、數據卷、端口映射

一、構建自定義鏡像的方式

1.Dockerfile(基於源鏡像修改配置,用Dockerfile生成自己需要的鏡像),用於新的業務

2.基於已有的鏡像容器進行創建,常用在業務升級上面。

3.基於本地模塊進行構建(不常用)

1.1、Dockerfile 文件

1.1.1、鏡像的分層

Dockerfile中的每個指令都會創建一個新的鏡像層。

鏡像層將被緩存和複用。

當Dockerfile的指令修改了,複製的文件變化了,或者構建鏡像時指定的變量不同 了,對應的鏡像層緩存就 會失效。

某一層的鏡像緩存失效之後,它之後的鏡像層緩存都會失效。

鏡像層是不可變的,如果在某一層中添加一個文件,然後在下一層中刪除它,則鏡 像中依然會包含該文件

所以在Dockerfile創建鏡像過程中會產生臨時容器緩存數據,但是創建完成後臨時 容器都會被刪除。

1.1.2、文件的結構

Dockerfile文件是由一組指令組成的,文件結構有四部分:

基礎鏡像信息

維護者信息

鏡像操作指令

容器啓動時執行指令

操作命令的詳解:

Docker--構建鏡像、私有倉庫registry、數據卷、端口映射

1.1.3、創建步驟

1.在虛擬機新建目錄,編寫Dockerfile文件(下面對文件格式舉例介紹,可以參考)

// 我是在opt下面創建的目錄,進目錄裏在編寫Dockerfile
mkdir apache
cd papche

// 注意:這裏的文件名一定要是Dockerfile,不可以自定義
vim Dockerfile

//基於基礎鏡像
FROM centos:7    
// 維護鏡像的用戶信息
MAINTAINER this is apache
// 鏡像操作指令安裝apache軟件
RUN yum -y update
RUN yum -y install httpd
// 開啓80端口
EXPOSE 80
// 複製網站首頁文件
ADD index.html /var/www/html/index.html      // 稍後編寫index.html文件放在同一目錄下
// 將執行腳本複製到鏡像中
ADD run.sh /run.sh      // 啓動腳本放在同一目錄下
RUN chmod 775 /run.sh
// 啓動容器時執行腳本
CMD ["/run.sh"]

2.在Dockerfile文件裏使用不了 systemctl、service 等命令啓動服務,可以編寫一個run.sh腳本

vim run.sh   #啓動腳本
#!/bin/bash
rm -rf /run/httpd/*        #清理httpd的緩存
exec /usr/sbin/apachectl -D FOREGROUND     #啓動apache進程

3.複製網站首頁文件

echo "this is web" > index.html

Docker--構建鏡像、私有倉庫registry、數據卷、端口映射

4.生成新鏡像

docker build -t httpd:centos .    (注意別忘了末尾一定要有 空格".")

Docker--構建鏡像、私有倉庫registry、數據卷、端口映射

5.鏡像生成好後運行容器

​ 格式:docker run -d --name 名字 -p 端口:源端口 倉庫名稱:[標籤]

docker run -d --name wl -p 1216:80 httpd:centos 

Docker--構建鏡像、私有倉庫registry、數據卷、端口映射

6.測試:用瀏覽器訪問 虛擬機IP地址:1216(我的IP是192.168.66.138)

Docker--構建鏡像、私有倉庫registry、數據卷、端口映射

1.2、基於已有鏡像容器進行創建

將容器裏面運行的程序及環境打包成新的鏡像

docker commit [選項] 容器ID/名稱 倉庫名稱:[標籤]
選項:  -m:說明信息
       -a:作者信息

//創建容器
docker run -it centos:7 /bin/bash

docker commit -m "new" -a "daoke" 容器ID daoke:centos

Docker--構建鏡像、私有倉庫registry、數據卷、端口映射

二、私有倉庫registry建立(簡易版)

1、下載倉庫鏡像
docker pull registry

2、在客戶終端中設置,指定私有倉庫位置
vim /etc/docker/daemon.json
{
"insecure-registries": ["192.168.66.138:5000"],  #添加虛擬機的IP地址和端口
 . . . 
}
systemctl restart docker

3、生成registry容器,開放5000端口
//宿主機的/data/registry自動創建掛載容器中的/tmp/registry
docker run -d -p 5000:5000 -v /data/registry:/tmp/registry registry
在這裏-v 指定外部存儲時會自動創建此目錄。

#因爲docker重啓,容器關閉,需要重啓
docker ps -a   #查看倉庫ID號
docker start 倉庫ID

4、鏡像打標籤docker tag 原鏡像名 倉庫IP:端口/鏡像名
docker pull nginx

docker tag nginx:latest 192.168.66.138:5000/nginx  (必須修改)
格式:docker tag nginx:latest 私有倉庫節點:端口/鏡像名稱

5、上傳鏡像
格式:docker push 倉庫IP:端口/鏡像名
docker push 192.168.66.138:5000/nginx

Docker--構建鏡像、私有倉庫registry、數據卷、端口映射

Docker--構建鏡像、私有倉庫registry、數據卷、端口映射

驗證:

//獲取私有倉庫列表
[root@localhost ~]# curl -XGET http://192.168.66.138:5000/v2/_catalog
{"repositories":["nginx"]}      #顯示上傳成功

//刪除原有的,測試私有倉庫是否下載OK
docker pull 192.168.66.138:5000/nginx

Docker--構建鏡像、私有倉庫registry、數據卷、端口映射

Docker--構建鏡像、私有倉庫registry、數據卷、端口映射

三、Docker 數據卷和數據卷容器

數據卷:掛載宿主系統的存儲空間

數據卷容器:掛載容器的存儲空間

Docker 數據卷創建

# Docker 數據卷創建
docker pull centos
#宿主機目錄/var/www 掛載容器中的/data1
格式:docker run -it --name 名字 -v 宿主機目錄:容器內目錄 倉庫名稱 /bin/bash
docker run -v /var/www:/data1 --name web2 -it centos /bin/bash 

命令執行後自動進入容器裏了
[root@202dd484fd62 /]# ls   #可以看見/data1目錄
[root@202dd484fd62 /]# cd /data1
[root@202dd484fd62 data1]# touch test123

另開一個終端窗口查看是否有/var/www/test123文件。

Docker--構建鏡像、私有倉庫registry、數據卷、端口映射

Docker--構建鏡像、私有倉庫registry、數據卷、端口映射

數據卷容器創建

1、現在容器裏創建一個目錄
docker run --name web3 -v /data1 -v /data2 -it centos /bin/bash

2、另開一個終端,新容器掛載數據卷容器web3
docker run -it --volumes-from web3 --name db1 centos /bin/bash

Docker--構建鏡像、私有倉庫registry、數據卷、端口映射

Docker--構建鏡像、私有倉庫registry、數據卷、端口映射

四、端口映射

-p:隨機生成端口映射

-P(大寫):指定端口映射

docker run -d -P httpd:latest 
docker run -d -p 1234:80 httpd:latest 

Docker--構建鏡像、私有倉庫registry、數據卷、端口映射

Docker--構建鏡像、私有倉庫registry、數據卷、端口映射

五、容器互聯(centos鏡像)

1、創建並運行容器取名web1,端口號自動映射
docker run -itd -P --name web1 centos /bin/bash 

2、創建並運行容器取名web2,鏈接到web1和其通信
docker run -itd -P --name web2 --link web1:web1 centos /bin/bash 

3、進入web2容器 
docker exec -it ID號 /bin/bash
ping web1   #可以互相通信

Docker--構建鏡像、私有倉庫registry、數據卷、端口映射

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章