Docker 制作镜像

容器本身是共享宿主操作系统内核,所以容器基础系统镜像包本身就是一个标准的 Linux rootfs + 用户自定义的工具。根据这个思路,就可以构建一个自己的容器基础系统镜像。构建标准的 Linux rootfs 的方式有很多种方法,Redhat、Debian、SUSE等主流的发行版都有提供相应的工具支持,在Ubuntu中可以使用debootstrap工具。

安装 Debootstrap

1
sudo apt install debootstrap

通过 Debootstrap 构建 Ubuntu 16.04 LTS 的 rootfs

1
2
3
4
5
6
7
8
9
10
#: 创建 rootfs 存放的位置,如我们把新的 rootfs 存放在 /data/my_os
sudo mkdir -p /data/my_os

#: 构建基础 Ubuntu 16.04 LTS 的 rootfs(Debootstrap 工具的参数使用 --help 查看)
sudo debootstrap --verbose --arch=amd64 xenial /data/my_os http://mirrors.aliyun.com/ubuntu

...
I: Configuring ureadahead...
I: Configuring resolvconf...
I: Base system installed successfully.

配置基础系统参数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#: 切换到新 rootfs
sudo chroot /data/my_os /bin/bash

#: 变更镜像源
cat <<'EOF' >> /etc/apt/sources.list
deb http://cn.archive.ubuntu.com/ubuntu/ xenial main restricted universe multiverse
deb http://cn.archive.ubuntu.com/ubuntu/ xenial-security main restricted universe multiverse
deb http://cn.archive.ubuntu.com/ubuntu/ xenial-updates main restricted universe multiverse
deb http://cn.archive.ubuntu.com/ubuntu/ xenial-backports main restricted universe multiverse
deb http://cn.archive.ubuntu.com/ubuntu/ xenial-proposed main restricted universe multiverse
deb-src http://cn.archive.ubuntu.com/ubuntu/ xenial main restricted universe multiverse
deb-src http://cn.archive.ubuntu.com/ubuntu/ xenial-security main restricted universe multiverse
deb-src http://cn.archive.ubuntu.com/ubuntu/ xenial-updates main restricted universe multiverse
deb-src http://cn.archive.ubuntu.com/ubuntu/ xenial-backports main restricted universe multiverse
deb-src http://cn.archive.ubuntu.com/ubuntu/ xenial-proposed main restricted universe multiverse
EOF

#: 按需安装基础包
apt -y update && apt -y upgrade && apt -y install locales

#: 配置系统字符集(根据提示进行)
dpkg-reconfigure locales

...
Generating locales (this might take a while)...
en_US.UTF-8... done
Generation complete.

#: 配置时区
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

清理系统

1
2
3
4
rm -Rf /tmp/* 
apt autoclean
apt clean
sudo rm -rf /var/lib/apt/lists/*

打包并创建镜像(需已配置docker 运行时环境)

1
2
3
sudo tar -C /data/my_os -c . | sudo docker import - nginx
[sudo] password for jack:
sha256:feaaa8bca4ea7389e7d778c6ca815c6ac22a6e2547c0c026ac6e4dd109612f93

发布到docker 仓库

1
2
3
4
sudo docker login itchenyi@gmail.com
……
sudo docker tag nginx itchenyi/nginx
sudo docker push itchenyi/nginx