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

Docker鏡像建立方法

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

基於已有鏡像建立

  • 首先將鏡像加載到容器,將容器裏面運行的程序及運行環境打包起來生成新的鏡像,須要記住該容器的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   //查看鏡像

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

基於本地模板建立

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

    # 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

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

基於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命令 : 指定所生成的鏡像做爲一個基礎鏡像時所要運行的命令。web

Dockerfile案例

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

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

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

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

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

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

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

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

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

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


  • 私有倉庫創建

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

    # docker pull registry

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

# 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鏡像建立及創建私有倉庫
Docker鏡像建立及創建私有倉庫

相關文章
相關標籤/搜索