镜像是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