CentOS6下 Docker的镜像管理

     2015年01月08日       江南兔子哥       运维笔记->系统管理       docker images 

镜像是Docker的灵魂

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 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 #可以看到镜像了

将Container直接commit成镜像

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

参考文档