製作Docker鏡像

三種方式:

一、在基礎鏡像之上做了更改之後,用docker commit提交製作鏡像;
二、藉助febootstrap工具,指定要安裝的包、操作系統版本以及軟件倉庫路徑製作鏡像文件的目錄,然後用導入(import)的方式生成docker鏡像;
三、通過Dockerfile製作鏡像。


製作基礎docker鏡像:
        第一步:設置docker鏡像源

        yum install -y yum-priorities && rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm && rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6  

        第二步:安裝 docker-io febootstrap,用來製作centos鏡像,到時候會生成個centos的鏡像。
        yum -y install docker-io;如果沒有安裝docker,則需要先安裝docker  
        service docker start ;啓動docker  
        yum -y install febootstrap;製作docker鏡像工具  

        第三步:作CentOS鏡像文件centos6-image目錄
        febootstrap -i bash -i wget -i yum -i iputils -i iproute -i man -i vim -i openssh-server -i openssh-clients -i tar -i gzip centos6 centos6-image http://mirrors.aliyun.com/centos/6/os/x86_64/  

       上一步執行後會生成一個centos6-image文件目錄,上面命令中參數 -i 後面的都是基礎鏡像中安裝的一些服務。如果你不想要這麼多服務(因爲把所有服務安裝後鏡像會變的非常大)可以只安裝一些基本的,必不可少的服務。centos6是指版本,centos6-image是生成的目錄名稱。

        第四步:這時root目錄下沒有任何文件,也不沒有隱藏的點文件,如:.bash_logout  .bash_profile  .bashrc如果這時製作出來的鏡像使用ssh登錄,會直接進入根目錄下,而一般鏡像都是進入root目錄下的,所以可以在centos6-image目錄的root目錄把.bash_logout  .bash_profile  .bashrc這三個文件設置一下。

       cd centos6-image && cp etc/skel/.bash* root/

       第五步:生成最基礎的base鏡像
       cd centos6-image && tar -c .|docker import - centos6-base  

       第六步:查看鏡像,也可以直接進入centos6-base查看
      docker images  ;這個是查看所有生成的鏡像  
      docker run -i -t centos:centos6 /bin/bash;進終端(沒有ssh服務),-i 分配終端,-t表示在前臺執行,-d表示在後臺運行  

       
 根據基礎鏡像製作ssh的docker鏡像:

        製作ssh登錄鏡像,最主要的就是Dockerfile(當然這裏說的就是Dockerfile這種方法),在某個目錄中新建一個Dockerfile文件(命名一定要爲Dockerfile)。

       下面來分析下Dockerfile文件:


    #Dockerfile    
    FROM centos6-base  #表示把某個鏡像作爲基礎鏡像,相當於面嚮對象語言中繼承,表示生成的鏡像裏面包含了基礎鏡像的一些服務  
    MAINTAINER yzh #這是個鏡像作者信息  
    RUN ssh-keygen -q -N "" -t dsa -f /etc/ssh/ssh_host_dsa_key  
    RUN ssh-keygen -q -N "" -t rsa -f /etc/ssh/ssh_host_rsa_key  
    RUN sed -ri 's/session    required     pam_loginuid.so/#session    required     pam_loginuid.so/g' /etc/pam.d/sshd  
    RUN mkdir -p /root/.ssh && chown root.root /root && chmod 700 /root/.ssh  
    #上面幾行都是配置ssh登錄目錄和登錄驗證的,而ssh的安裝是在基礎鏡像centos6-base中完成的(-i openssh-server -i openssh-clients)  
    EXPOSE 22  #表示開啓哪個端口號,22號端口是給ssh服務使用的;如果不需要端口號可以註釋掉這行  
    RUN echo 'root:redhat' | chpasswd  #這是修改root密碼,其實這種方法不是很好,因爲這是設置root密碼,不是更改  
    RUN yum install -y yum-priorities && rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm && rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6  
    RUN yum install tar gzip gcc vim wget -y  
    #上面是安裝些工具和源  
    ENV LANG en_US.UTF-8  
    ENV LC_ALL en_US.UTF-8  #設置環境  
    CMD /usr/sbin/sshd -D  #設置開啓的服務,每個鏡像只能有一個CMD有效  
    #End  

        根據Dockerfile文件生成鏡像:docker build -t 生成鏡像名稱  Dockerfile位置;假設:鏡像名爲centos6-ssh,Dockerfile在/home/yzh/ssh裏面

        cd centos6-images;docker build -t centos6-ssh  /home/yzh/ssh #就可以生成一個centos6-ssh鏡像了  

        用docker images查看下所有鏡像,你會看到兩個鏡像:centos6-base和centos6-ssh。這樣centos6-ssh就是ssh登錄的docker鏡像了。


鏡像的測試步驟命令:
        當製作完一個鏡像後緊接着就要測試下這個鏡像是否正確,裏面的一些服務是否可用。我目前沒有用到數據存儲及遷移備份,所以就用簡單的步驟測試下:
        第一步:查看鏡像信息,可以看到有鏡像名稱和鏡像的id以及生成的時間。
        docker images
        第二步:用測試鏡像生成一個容器,可以根據鏡像名稱或者鏡像id來生成。最後會得到一連串數字和字母組成的信息,就是容器標識ID。
        docker run -d xxx(鏡像名或者id)
        第三步:利用上一步生成的容器ID,來查看測試鏡像生成的容器信息。這一步會得到有關容器的詳細信息,其中包括iP地址。
        docker inspect xxxx(容器id)
        第四步:利用上一步中得到的ip地址,ssh登陸。
        ssh root@xxxx(容器ip)
        第五步:測試服務,這裏ssh服務在登陸時已經測試完了。如果是其他鏡像,比如mysql:那麼這一步就是進入鏡像測試MySQL服務了,不同服務用不同方法測試。


       

發佈了46 篇原創文章 · 獲贊 5 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章