Docker創建鏡像以及私有倉庫

Docker的安裝及鏡像、容器的基本操作詳見博客http://blog.51cto.com/11134648/2160257
下面介紹Docker創建鏡像和創建私有倉庫的方法,詳細如下:

創建鏡像

創建鏡像的方法有三種,分別是基於已有鏡像創建、基於本地鏡像模板創建以及基於Dockfile創建。下面介紹這三種鏡像的方法

1.基於已有鏡像創建

實質就是把一個容器裏面運行的程序以及該程序的運行環境打包起來生成新的鏡像。

命令格式:docker commit [選項] 容器ID/名稱 倉庫名稱:標籤

(1)首先需要查看啓動已有鏡像的容器的ID號

docker ps -a

Docker創建鏡像以及私有倉庫
(2)之後使用docker commit命令創建一個新鏡像

命令格式:docker commit [選項] 容器ID/名稱 倉庫名稱:標籤

常用選項: -m 說明信息
                   -a 作者信息
                   -p 生成過程中停止容器的運行

Docker創建鏡像以及私有倉庫
(3)創建完成後會返回新創建鏡像的ID號

docker images | grep daoke

Docker創建鏡像以及私有倉庫

2.基於本地模板創建

通過導入操作系統模板文件可以生成鏡像,模板文件可以從OPENVZ開源項目下載,下載地址爲http://download.openvz.org/template/precreated。

(1)下載模板文件

wget http://download.openvz.org/template/precreated/debian-7.0-x86-minimal.tar.gz

Docker創建鏡像以及私有倉庫
(2)使用docker導入命令導入爲本地鏡像

cat debian-7.0-x86-minimal.tar.gz | docker import - daoke:new

Docker創建鏡像以及私有倉庫
(3)導入完成後會返回生成鏡像的ID信息

docker images | grep new

Docker創建鏡像以及私有倉庫

3.基於Dockerfile創建

  • Dockfile是由一組指令組成的文件,其中每條指令對應Linux中的一條命令,Docker程序將讀取Dockfile中的指令生成指定鏡像。

  • Dockfile結構大致分爲四部分:基礎鏡像信息、維護者信息、鏡像操作指令和容器啓動時執行指令。
  • Dockfile每行支持一條指令,每條指令可攜帶多個參數,支持使用”#“號開頭的註釋。

Dockerfile有十幾條命令可用於構建鏡像,其中常見的指令如下:

指令 含義
FROM 鏡像 指定所創建鏡像的基礎鏡像
MAINTAINER 名字 指定維護者信息
RUN 命令 在所基於鏡像上執行命令
CMD ["要運行的程序",“參數1”,“參數2”] 指定啓動容器時默認執行的命令
LABEL 指定生成鏡像的元數據標籤信息
EXPOSE 端口號 指定新鏡像加載到Docker時要開啓的端口
ENV 環境變量 變量值 設置一個環境變量的值,會被後面的RUN使用
ADD < src > <dest> 賦值指定的< src > 路徑下的內容到容器中的<dest>路徑下,<src>可以爲URL;,<src>要與Dockerfile位於相同目錄;如果爲tar文件,會自動解壓到<dest>路徑下
COPY < src > <dest> 複製本地主機的<src>路徑下的內容到鏡像中的<dest>路徑下;一般情況下推薦使用COPY,而不是ADD
ENTRYPOINT 指定鏡像的默認入口
VOLUME ["目錄"] 在容器中創建數據卷掛載點
USER 用戶名/UID 指定運行容器時的用戶名或UID
WORKDIR 路徑 爲後續的RUN、CMD、ENTRYPOINT指定工作目錄
ARG 指定鏡像內使用的參數(例如版本號信息等)
ONBUILD 命令 配置當前所創建的鏡像作爲其他鏡像的基礎鏡像時,所執行的創建操作指令
STOPSIGNAL 容器退出的信號值
HEALTHCHECK 如何進行健康檢查
SHELL 指定使用shell時默認shell類型

例如基於Dockerfile創建httpd鏡像,步驟如下:

(1)建立目錄,作爲生成鏡像的工作目錄

mkdir  apache
cd  apache

(2)創建並編寫Dockerfile文件

vim Dockerfile

#基於的基礎鏡像
FROM centos
#維護鏡像的用戶信息
MAINTAINER The porject <[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"]

(3)編寫執行腳本內容

vim run.sh

#!/bin/bash
rm -rf /run/httpd/*   #清理httpd緩存
exec /usr/sbin/apachectl -D FOREGROUND  #啓動apache服務

(4)創建測試頁面

echo "web test" > index.html

需要注意的是Dockerfile文件、需要運行的腳本文件以及要複製到容器中的文件都必須在工作目錄下同一級。

Docker創建鏡像以及私有倉庫
(5)使用Dockfile生成鏡像

命令格式:docker build [選項] 路徑
常用選項: -t 指定鏡像的標籤信息
docker build -t httpd:centos .   #注意別忘了末尾有"."

Docker創建鏡像以及私有倉庫
(6)使用新的鏡像運行容器

docker run -d -p 1216:80 httpd:centos   #其中-p選項實現從本地端口1216到容器中的80端口的映射

Docker創建鏡像以及私有倉庫
可以看到該鏡像已在容器中加載運行

本機的ip地址是192.168.100.138,訪問容器中的Apache服務。

firefox http://192.168.100.138:1216

Docker創建鏡像以及私有倉庫

創建私有倉庫

使用registry鏡像來搭建本地私有倉庫。

1.下載registry鏡像

docker pull registry

Docker創建鏡像以及私有倉庫

2.在/etc/docker/目錄下創建一個json文件,定義私有倉庫地址

vim /etc/docker/daemon.json
{ "insecure-registries":["192.168.100.138:5000"]}

3.重啓docker服務

systemctl start daemon-reload
systemctl restart docker.service

4.使用下載好的registry鏡像啓動一個容器

  • 默認情況下倉庫存放於容器內的/tmp/registry目錄下。
  • -v選項可以將本地目錄掛載到容器內的/tmp/registry下使用,這樣就不會容器被刪除後鏡像也會隨之消失。
    docker run -d -p 5000:5000 -v /data/registry:/tmp/registry registry

    Docker創建鏡像以及私有倉庫

    5.將上傳的鏡像標記

    docker tag httpd:centos 192.168.100.138:5000/httpd

6.上傳做標記的鏡像

docker push 192.168.100.138:5000/httpd

Docker創建鏡像以及私有倉庫

7.獲取私有倉庫列表

curl -XGET http://192.168.100.138:5000/v2/_catalog
curl -XGET http://192.168.100.138:5000/v2/httpd/tags/list

Docker創建鏡像以及私有倉庫

8.刪除做標記的鏡像

docker rmi 192.168.100.138:5000/httpd
docker images

Docker創建鏡像以及私有倉庫

9.從私有倉庫下載標記的鏡像

docker pull 192.168.100.138:5000/httpd

Docker創建鏡像以及私有倉庫
可以看出下載速度明顯很快

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