製作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
第五步:測試服務,這裡ssh服務在登陸時已經測試完了。如果是其他映象,比如mysql:那麼這一步就是進入映象測試MySQL服務了,不同服務用不同方法測試。