制作基本的docker底层镜像
本例中仍使用centos6版本作为范例,首先安装docker,考虑到主站在境外,我们使用境内加速服务提供商的安装脚本来安装docker。
curl -sSL https://get.daocloud.io/docker | sh chkconfig docker on service docker start
确认docker服务运行后,开始制作流程:
yum -y install febootstrap cd /tmp febootstrap -i bash -i wget -i yum -i iputils -i iproute centos67 centos67-docker http://mirrors.163.com/centos/6.7/os/x86_64/
制作和拉取基本源后进行封装
cd centos67-docker tar -c .|docker import - centos67
然后执行
docker images
可以看到镜像列表里新增了一个刚才添加的镜像文件
[root@localhost home]# docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE centos67 latest 1ecdf52bcd2d 8 minutes ago 310.7 MB
可以测试运行一下,看看可以进入bash么。注意如果要实用非root用户运行docker,请先将已有用户加入docker组
adduser [docker-run-username] usermod -a -G docker [docker-run-username]
然后切换到非root用户运行
su [docker-run-username] docker run -t -i centos67 /bin/bash
出现bash-4.1提示符即代表已在CONTAINER内运行了,使用ctrl+D快捷键可以退回原系统。如果要运行或进入请使用
docker start [CONTAINER ID] docker attach [CONTAINER ID]
如果不知道[CONTAINER ID]可以使用下面的命令查看容器清单
docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 80534fb4275a centos67-bash:latest "/bin/bash" 2 hours ago Exited (0) About an hour ago focused_stallman
最后要将镜像进行打包导出
docker save [IMAGENAME] | bzip2 -9 -c>img.tar.bz2
之后可以移动到别的机器上导入
bzip2 -d -c <img.tar.bz2 | docker load
当然,也可以push到docker hub,但是考虑到境外网速,可以push到境内服务提供商如:
docker tag 1ecdf52bcd2d daocloud.io/你的注册ID/centos6.7:v1 docker push daocloud.io/你的注册ID/centos6.7:v1
注意上面示例的这家供应商需要收费账号才能push上去,免费账号只能pull 镜像。
后续进阶参考:
2017年更新,CentOS 7制作方法。由于CentOS 7上的febootstrap已经改为supermin,故下面的示例全部使用新的命令。
本例中,将制作一个基本的CentOS 7 base镜像,首先安装软件包
yum install supremin* -y
然后运行命令
cd /tmp supermin5 -v --prepare bash coreutils -o supermin.d supermin5 -v --build --format chroot supermin.d -o appliance.d echo 7 > appliance.d/etc/yum/vars/releasever tar --numeric-owner -cpf centos-7.tar -C appliance.d . cat centos-7.tar | docker import - test/centos-7
启动docker查看镜像
systemctl start docker docker images
可以看到有一个叫test/centos-7的容器,使用命令测试容器
docker run -i -t kongxx/centos-7 /bin/bash cat /etc/redhat-release CentOS Linux release 7.3.1611 (Core)
鉴于CentOS 7下的docker版本现在已经到17.03-ce了,故与CentOS 6下的1.7~1.9版本相差较多,有时候通过docker info查看会发现有警告信息
WARNING docker bridge-nf-call-iptables is disabled WARNING docker bridge-nf-call-ip6tables is disabled WARNING IPv4 forwarding is disabled. Networking will not work
如果是此类问题,需要编辑一下宿主系统,也就是承载运行容器的系统的相关配置文件
vi /etc/sysctl.conf 添加 net.ipv4.ip_forward=1 net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 net.bridge.bridge-nf-call-arptables = 1 :wq systemctl restart network