Docker建立鏡像以及私有倉庫

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

建立鏡像

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

1.基於已有鏡像建立

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

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

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

docker ps -a

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

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

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

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

docker images | grep daoke

Docker建立鏡像以及私有倉庫

2.基於本地模板建立

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

(1)下載模板文件centos

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信息bash

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 <cloud-ops@centos.org>
#鏡像操做指令安裝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建立鏡像以及私有倉庫能夠看出下載速度明顯很快

相關文章
相關標籤/搜索