Docker的鏡像是Docker容器運行的基礎。學習Docker很重要的一點是鏡像的使用。
使用默認docker命令下載的鏡像是外部制作好的,而我希望從頭做一個鏡像,並自己管理。
本文在CentOS 6下使用Docker制作鏡像,對這個過程做詳細的記錄。
鏡像(image)和容器(container)是什麼關系?
查看鏡像
docker images
將鏡像保存為tar包
docker save centos6-mytest > centos6-mytest.tar
將導出的tar包加載為鏡像
docker load < centos6-mytest.tar
下載鏡像制作工具 febootstrap
yum -y install febootstrap
使用febootstrap制作鏡像(CentOS6的鏡像),完成後鏡像目錄是centos6-image。大概是335MB
#febootstrap 基本用法是febootstrap [--options] REPO TARGET [MIRROR] ,後面可根據實際情況安裝相應的包 -i 包名 febootstrap -i bash \ -i wget -i yum -i iputils -i iproute -i man -i vim-minimal \ -i openssh-server -i openssh-clients -i cronie-anacron -i crontabs -i rsyslog \ centos6 centos6-image http://mirrors.aliyun.com/centos/6/os/x86_64/
將鏡像導入到docker
cd centos6-image && tar -c . | docker import - centos6-base
驗證鏡像可用
docker images #可以看到剛才制作好的centos6-base docker run -t -i centos6-base /bin/bash #可創建容器,進入bash命令行
基礎鏡像只包含了基礎的系統,但是它沒有包含實際的應用程序,不能產生實際的作用。
我們需要在base系統上增加應用,並生成新的鏡像。有兩種方法,一種是Docker File的方式。
編寫Docker文件。vim Dockerfile
#Dockerfile FROM centos6-base MAINTAINER Yonghua 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 EXPOSE 22 RUN echo 'root:123456' | chpasswd ENV LANG en_US.UTF-8 ENV LC_ALL en_US.UTF-8 CMD /usr/sbin/sshd -D #End
使用docker build產生新鏡像
docker build -t centos6-ssh . #最後的.表示Dockerfile文件所在的路徑
好了,通過docker images 命令可以看到新制作好的鏡像centos6-ssh
docker images #可以看到鏡像了
DockerFile 使用定義的方式來創建鏡像,而有時候我們期望通過將Container轉化為鏡像的方式來獲得鏡像。
首先創建一個container,進入bash 進行我們的定制
docker run -t -i centos6-base /bin/bash
然後通過commit命令將container變成鏡像
#docker commit CONTAINER_ID IMAGE_NAME docker commit 83a9fb9eeefd centos6-mytest