尘封网

让学习成为一种习惯!

动手制作自己的Docker镜像

动手制作自己的Docker镜像,网上很多镜像供我们选择,为什么还要自己制作镜像呢?说到底,别人做的我不喜欢【没安装我想要的包】

重要说明:制作镜像的系统要和你将制作的镜像系统要相符,比如:制作Centos6.5的镜像就是要Centos 6的系统内。如果在Centos6 上制作Centos7的镜像都会出错。提示:/usr/lib64/libc.so.6文件找不到。在7的系统上制作6的同样出错。

方法一:网络资源(网络稳定就好。)

当前系统:CentOS release 6.5 3.10.94-1.el6.elrepo.x86_64 【内核是升级了,要不然无法安装Docker】

首先要安装febootstrap工具:

先装个EPEL源:

rpm -ivh http://mirrors.yun-idc.com/epel/epel-release-latest-6.noarch.rpm

安装:febootstrap

yum install febootstrap -y

利用febootstrap制作镜像,它会自动下载我们想要的包到指定目录下:

febootstrap -i bash -i wget -i yum -i man -i vim -i openssh-server -i openssh-clients -i tar -i gzip  centos centos6.5 http://mirror.symnds.com/distributions/CentOS-vault/6.5/os/x86_64/

参数说明:

  • -i:后跟着的就是制作的基础镜像中已经包含的一些包,需要什么包可以在下面的地址中查找。
  • centos表示此镜像是Centos系统
  • centos6.5表示命令中所有的包安装到当前目录下的centos6.5的目录中,目录会自动创建。

复制当前系统中root用户的bash 基本环境到准备打包的目录下的root/目录下。正常情况下是没有文件的。

[root@Docker]# cp /etc/skel/.bash* root/

接下来就把刚才的目录导入到镜像中:

[root@Docker ]# cd centos6.5 && tar -c .|docker import - centos6.5
f67f40bb4a73f6fa3b33eeef313231267857388476c3c8f879a70c7a3075d731

看不到上面的字符相信都知道啦。
检查是否成功制作镜像;

方法二:利用本地光盘制作镜像

挂载系统光盘到/mnt目录下:

[root@Docker ~]# mount /dev/cdrom /mnt
[root@Docker ~]# ls /mnt/
CentOS_BuildTag  isolinux                  RPM-GPG-KEY-CentOS-Debug-6
EFI              Packages                  RPM-GPG-KEY-CentOS-Security-6
EULA             RELEASE-NOTES-en-US.html  RPM-GPG-KEY-CentOS-Testing-6
GPL              repodata                  TRANS.TBL
images           RPM-GPG-KEY-CentOS-6

建立本地源:

[root@Docker ~]# cd /etc/yum.repos.d/
[root@Docker yum.repos.d]# tar zcf yum.tar.gz .
[root@Docker yum.repos.d]# ll
total 32
-rw-r--r--. 1 root root 1926 Nov 27  2013 CentOS-Base.repo
-rw-r--r--. 1 root root  638 Nov 27  2013 CentOS-Debuginfo.repo
-rw-r--r--. 1 root root  630 Nov 27  2013 CentOS-Media.repo
-rw-r--r--. 1 root root 3664 Nov 27  2013 CentOS-Vault.repo
-rw-r--r--  1 root root 1190 Jan  8  2013 elrepo.repo
-rw-r--r--  1 root root  957 Nov  5  2012 epel.repo
-rw-r--r--  1 root root 1056 Nov  5  2012 epel-testing.repo
-rw-r--r--  1 root root 2016 Jan 12 15:51 yum.tar.gz

[root@Docker yum.repos.d]# rm -rf *.repo
[root@Docker yum.repos.d]# ls
yum.tar.gz

添加本地源文件:

[root@Docker yum.repos.d]# cat >/etc/yum.repos.d/cdrom.repo <<-EOF
[c6-media]
name=CentOS-Media
baseurl=file:///mnt
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
EOF

清除之前的yum缓存:

[root@Docker yum.repos.d]# yum clean all

接着安装apache:

yum install httpd -y

修改Apache配置文件,把网站根目录指向挂载光盘的目录:/mnt

把:292 行

DocumentRoot "/var/www/html"

修改为:

DocumentRoot "/mnt"

启动httpd服务:
service httpd start

执行如下命令:刷一下,很快这完整安装了。

febootstrap -i bash -i wget -i yum -i man -i vim -i openssh-server -i openssh-clients -i tar -i gzip  centos centos6.5-base http://127.0.0.1

进入目录:centos6.5-base

复制当前系统中root用户的bash 基本环境到准备打包的目录下的root/目录下。正常情况下是没有文件的。

[root@Docker centos6.5]# cp /etc/skel/.bash* root/

最后把目录打包到镜像中即可。

[root@Docker ~]# cd centos6.5-base && tar -c .|docker import - centos6.5
3005dc0c28c7c33dafc73370d1b2c069020387641069150bc41ffd4d7a45e966

查看本地镜像列表

[root@Docker centos6.5-base]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
centos6.5           latest              3005dc0c28c7        17 seconds ago      372 MB
<none>              <none>              f67f40bb4a73        31 minutes ago      372.9 MB
centos              centos7v1           92e2936b5246        24 hours ago        333.9 MB
centos              latest              60e65a8e4030        2 weeks ago         196.6 MB
centos              centos7.1.1503      fab4b1df8eb1        3 months ago        212.1 MB

这里特别注意:cd centos6.5-base && tar -c .|docker import - centos6.5
后面这个【centos6.5】是镜像名,不要跟已经存在的相同,或者直接在镜像名后再加个TAG标签:
由于我添加相同的,造成刚才利用网络资源制作的镜像名和TAG都变成NONE了。

加个TGA的情况就不同了。

[root@Docker ~]# cd centos6.5-base && tar -c .|docker import - centos6.5:v1
6c843268493d5a1cc45aff67a5b29ea4251ad85da2cf8de6cebab4a195086f71

[root@Docker centos6.5-base]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
centos6.5           v1                  6c843268493d        10 seconds ago      372 MB
centos6.5           latest              3005dc0c28c7        3 minutes ago       372 MB
centos              centos7v1           92e2936b5246        24 hours ago        333.9 MB
centos              latest              60e65a8e4030        2 weeks ago         196.6 MB
centos              centos7.1.1503      fab4b1df8eb1        3 months ago        212.1 MB

然后就可以使用自己创建的镜像运行容器了。

提醒:本文最后更新于 1168 天前,文中所描述的信息可能已发生改变,请谨慎使用。