天天看點

Docker 容器基礎系統鏡像打包

    因為容器本身是共享宿主作業系統核心,是以容器基礎系統鏡像包本身就是一個标準的 Linux rootfs + 使用者自定義的工具。根據這個思路,我們就可以建構一個自己的容器基礎系統鏡像。

    建構标準的 Linux rootfs 的方式有很多種方法,Redhat、Debian、SUSE等主流的發行版都有提供相應的工具支援。

    大概的流程如下:

        建構基礎的 rootfs —> 配置基礎系統參數 —> 部署使用者自定義軟體 —> 清理系統 —> 打包為容器鏡像 —> 測試鏡像 —> 釋出倉庫

以 Ubuntu 16.04.01 LTS 版為例,制作一個 Ubuntu 16.04 LTS 的 Docker 基礎系統鏡像:

1、安裝 Debootstrap :                  sudo apt install debootstrap

2、通過 Debootstrap 建構 Ubuntu 16.04 LTS 的 rootfs :

       1)、建立 rootfs 存放的位置,如我們把新的 rootfs 存放在 /opt/new_os:

                sudo mkdir -p /opt/new_os

        2)、建構基礎 Ubuntu 16.04 LTS 的 rootfs(Debootstrap 工具的參數使用 --help 檢視):

                sudo debootstrap --verbose --arch=amd64 xenial /opt/new_os http://mirrors.aliyun.com/ubuntu

        3)、配置基礎系統參數:

                a、切換到新 rootfs :                                                  sudo chroot /opt/new_os /bin/bash

                b、安裝基礎包(請根據實際需求安裝):

                        apt -y update && apt -y upgrade && apt -y install vim locales

                c、配置系統字元集(根據提示進行):

                        dpkg-reconfigure locales

                d、配置時區:

                        cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime     

                e、可選:配置第三方衍生系統版本資訊(如:UbuntuKylin)

                       tee /etc/ubuntukylin-release <<-‘EOF'                        DISTRIB_ID=Ubuntu Kylin                        DISTRIB_RELEASE=16.04                        DISTRIB_CODENAME=xenial                        DISTRIB_DESCRIPTION="Ubuntu Kylin 16.04"

                       EOF

                f、清理系統:

                        rm -Rf /tmp/*  && apt clean

                g、 退出目前 rootfs

                        exit

        4)、打包并建立 Docker 鏡像(前置條件:目前系統已經配置了 Docker 運作時環境):

                 sudo tar -C /opt/new_os/ -c . | sudo docker import - new_os

         5)、測試

                 sudo docker run new_os  cat /etc/lsb-release

3、釋出到倉庫(以釋出到官方倉庫為例,私有倉庫請自行上傳)

         sudo docker login [email protected]

         ……

         sudo docker tag new_os  shibingli/new_os

         sudo docker push shibingli/new_os

4、完成。

5、補充,如果要把目前的系統環境打包為容器基礎鏡像,主要是 rootfs 的處理,可以參考以下指令:

        1)、 tar --numeric-owner --exclude=/proc --exclude=/sys -cvf new_os.tar  /

        2)、 cat new_os.tar | docker import - new_os

    或

        sudo tar --numeric-owner --exclude=/proc --exclude=/sys -C / -c . | sudo docker import - new_os

上述步驟完成後,再次通過 docker 登陸到 new_os ,然後清理一下無用的引導和核心配置檔案即可。

繼續閱讀