Linux Study Lab !

当前位置:   网站首页 >> Linux 应用实践

制作基本的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 镜像。


后续进阶参考:

使用Docker File的方式制作新镜像

Docker技术入门


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



发表我的评论

Hi,您需要填写昵称和邮箱!

  • 必填项