1. 程式人生 > >Docker鏡像創建及建立私有倉庫

Docker鏡像創建及建立私有倉庫

tar.gz 分別是 system ffffff .tar.gz 通過 用戶 apache -o

Docker鏡像創建方法

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

?

基於已有鏡像創建

  • 首先將鏡像加載到容器,將容器裏面運行的程序及運行環境打包起來生成新的鏡像,需要記住該容器的ID號。
  • 命令格式: docker commit 【選項】 容器ID/名稱 倉庫名稱:【標簽】
  • 常用選項:
  • -m:說明信息 ?
  • -a:作者信息 ?
  • -p:生成過程中停止容器的運行
    # docker create -it nickistre/centos-lamp /bin/bash    //將lamp鏡像加載到容器
    # docker ps -a      //查看容器
    # docker commit -m "new" -a "zkc" 74f40e743fe3 lamp:test    //創建新的鏡像lamp:test
    # docker images   //查看鏡像

技術分享圖片

?

基於本地模板創建

  • 通過導入系統模板文件可以生成鏡像,模板可以從OPENVZ開源項目下載
  • 下載地址為:http://download.openvz.org/template/precreated
  • 下面以debian模板壓縮包導入為本地鏡像的例子。

    # wget http://download.openvz.org/template/precreated/debian-7.0-x86-minimal.tar.gz
    # cat debian-7.0-x86-minimal.tar.gz | docker import - daoke:new
    # docker images | grep new

技術分享圖片

?

基於Dockerfile創建

  • Dockerfile是由一組指令組成的文件,每條指令對應linux中一條命令,Docker程序將讀取Dockerfile中的指令生成指定鏡像。
  • Dockerfile大致結構:基礎鏡像信息、維護者信息、鏡像操作指令、容器啟動時執行指令。每行支持一條指令,每條指令可以攜帶多個參數,支持以 # 開頭的註釋。
  • Dockerfile操作指令:

FROM 鏡像 : 指定新的鏡像所基於的鏡像
MAINTAINER 名字 :說明新鏡像的維護人
RUN 命令 : 在所基於的鏡像上執行命令,並提交到新的鏡像中
CMD ["要運行的程序","參數1","參數2"] :

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

?

Dockerfile案例

# mkdir  apache
# cd  apache
# vim Dockerfile     //編寫Dokcerfile文件

#基於的基礎鏡像
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"]

# vim run.sh     //編寫執行腳本

#!/bin/bash
rm -rf /run/httpd/*
exec /usr/sbin/apachectl -D FOREGROUND

  • 使用docker buil生成鏡像 -t 指定鏡像的標簽信息

    # echo "web test" > index.html    //創建測試頁
    # docker build -t httpd:centos .      //生成鏡像 (註意別忘了末尾有".")

    技術分享圖片
    ?

  • 將新鏡像加載到容器中運行(5000端口自己指定)
  • -p :實現從本地端口5000到容器中80端口的映射。

    # docker run -d -p 5000:80 httpd:centos
  • 測試
  • 在瀏覽器輸入docker服務器IP和指定的端口: http://192.168.200.132:5000/

技術分享圖片

?
?

  • 私有倉庫建立

  • 在構建私有倉庫的服務器上下載registry鏡像

    # docker pull registry

    技術分享圖片

?

    # vim /etc/docker/daemon.json  
    { "insecure-registries":["192.168.200.132:5000"]}
    # systemctl restart docker.service 
    # docker create -it registry /bin/bash
    # docker ps -a
    # docker start f98557ba50af

    # docker run -d -p 5000:5000 -v /data/registry:/tmp/registry registry 
    為registry鏡像啟動一個容器
    - v :宿主機的/data/registry自動創建掛載容器中的/tmp/registry使用

    # docker tag nickistre/centos-lamp 192.168.200.132:5000/lamp
    更改要上傳鏡像的標記為192.168.200.132:5000/lamp

    # docker push 192.168.200.132:5000/lamp   //上傳

    獲取私有倉庫列表
    # curl -XGET http://192.168.200.132:5000/v2/_catalog

技術分享圖片
技術分享圖片

Docker鏡像創建及建立私有倉庫