动手制作自己的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 <
[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
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
然后就可以使用自己创建的镜像运行容器了。