来自http://www.jianshu.com/p/029a1ed4fd64

背景

因为笔者是在vagrant转移到docker的玩家,所以对系统镜像情有独钟。如果你是windows、mac用户,那么你可能就需要一个干净的系统镜像,来使用docker(docker依赖于linux内核)。

而在linux下开发的话,则无需再安装任何系统镜像,直接使用docker即可。

在此背景下,那么一个干净的系统镜像,就有了必要的意义。笔者开始搜索有关docker打包Ubuntu镜像的资料,得到了一些思绪。

本文受 http://www.jb51.net/article/101509.htm 启发而做,笔者对linux不精通,只能依靠查阅的资料去实现,如有错误之处,请多多指教。

了解封装镜像的基本知识

因为容器本身是共享宿主操作系统内核,所以容器基础系统镜像包本身就是一个标准的 Linux rootfs + 用户自定义的工具。根据这个思路,我们就可以构建一个自己的容器基础系统镜像。

rootfs 根文件系统

构建标准的 Linux rootfs 的方式有很多种方法,Redhat、Debian、SUSE等主流的发行版都有提供相应的工具支持,在Ubuntu中笔者使用的时debootstrap工具。

大致流程:

  1. 构建基础的 rootfs
  2. 配置基础系统参数
  3. 部署用户自定义软件
  4. 清理系统
  5. 打包为容器镜像
  6. 测试镜像
  7. 发布仓库

开始制作Ubuntu16.04系统镜像

  1. 安装 Debootstrap

    sudo apt install debootstrap
  2. 通过 Debootstrap 构建 Ubuntu 16.04 LTS 的 rootfs
    • 创建 rootfs 存放的位置,如我们把新的 rootfs 存放在 /opt/new_os:

      sudo mkdir -p /opt/new_os
    • 构建基础 Ubuntu 16.04 LTS 的 rootfs(Debootstrap 工具的参数使用 --help 查看)
      sudo debootstrap --verbose --arch=amd64 xenial /opt/new_os http://mirrors.aliyun.com/ubuntu
  3. 配置基础系统参数

    切换到新 rootfs

    sudo chroot /opt/new_os /bin/bash

    安装基础包(请根据实际需求安装)

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

    配置系统字符集(根据提示进行)

    dpkg-reconfigure locales

    配置时区

    cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
  4. 可选:配置第三方衍生系统版本信息(如:UbuntuKylin)
    tee /etc/ubuntukylin-release <<-‘EOF'
    DISTRIB_ID=Ubuntu Kylin
    DISTRIB_RELEASE=16.04
    DISTRIB_CODENAME=xenial
    DISTRIB_DESCRIPTION="Ubuntu Kylin 16.04"
    EOF
  5. 清理系统
    rm -Rf /tmp/* && apt clean
  6. 退出当前 rootfs
    exit
  7. 打包并创建 Docker 镜像(前置条件:当前系统已经配置了 Docker 运行时环境)
    sudo tar -C /opt/new_os/ -c . | sudo docker import - new_os
  8. 测试
    sudo docker run new_os cat /etc/lsb-release
  9. 发布到仓库(以发布到官方仓库为例,私有仓库请自行上传)
    sudo docker login shibingli@yeah.net
    ……
    sudo docker tag new_os shibingli/new_os
    sudo docker push shibingli/new_os
  10. 完成

  11. 补充,如果要把当前的系统环境打包为容器基础镜像,主要是 rootfs 的处理,可以参考以下命令

    tar --numeric-owner --exclude=/proc --exclude=/sys -cvf new_os.tar /
    cat new_os.tar | docker import - new_os

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

制作ubuntu16.04的docker镜像的更多相关文章

  1. ubuntu16.04下docker安装和简单使用(转)

    ubuntu16.04下docker安装和简单使用   转自:https://www.cnblogs.com/hupeng1234/p/9773770.html 前提条件 操作系统 docker-ce ...

  2. Ubuntu16.04 添加 Docker用户组

    Ubuntu16.04 添加 Docker用户组 将用户添加到docker用户组就不用每次都 sudo了. ### 首先创建用户组 sudo groupadd docker 将用户加如组 sudo g ...

  3. Ubuntu16.04安装Docker、nvidia-docker

    Ubuntu16.04安装Docker.nvidia-docker Docker安装 1.更换国内软件源,推荐中国科技大学的源,稳定速度快(可选) sudo cp /etc/apt/sources.l ...

  4. 制作nginx+php的docker镜像方法

    制作nginx+php的docker镜像方法一.准备安装的工具工具:docker-17.06.0-ce.nginx-1.13.2.PHP-5.5.38 .supervisor配置思路:1.安装dock ...

  5. docker学习笔记(1)——ubuntu16.04安装docker(含如何彻底卸载docker,docker拉取镜像失败解决)

    参考博客: 1.官网教程:https://docs.docker.com/engine/install/   根据本机不同的信息选择不同的安装方式:  https://docs.docker.com/ ...

  6. ubuntu16.04下docker安装和简单使用

    前提条件 操作系统 docker-ce支持的ubuntu版本: Bionic 18.04 (LTS) Xenial 16.04 (LTS) Trusty 14.04 (LTS) 卸载旧版本docker ...

  7. Ubuntu16.04 下docker部署web项目

    概念性的请戳 第一步:更新apt-get update 第二步:安装环境 apt-get install \ apt-transport-https \ ca-certificates \ curl ...

  8. ubuntu16.04中docker安装curl拒绝连接问题

    在Ubuntu16.04中安装docker ce,安装步骤按照官网说明https://docs.docker.com/engine/installation/linux/docker-ce/ubunt ...

  9. ubuntu16.04安装docker CE

    如需开始在 Ubuntu 上使用 Docker CE,请确保您满足先决条件,然后再安装 Docker. 如需安装 Docker 企业版 (Docker EE),请转至获取适用于 Ubuntu 的 Do ...

随机推荐

  1. 【bzoj4146】[AMPPZ2014]Divisors 数论

    原文地址:http://www.cnblogs.com/GXZlegend/p/6801411.html 题目描述 给定一个序列a[1],a[2],...,a[n].求满足i!=j且a[i]|a[j] ...

  2. [HNOI2015][bzoj4009] 接水果 [整体二分+扫描线]

    题面 传送门 思路 本题其实有在线做法......但是太难写了,退而求其次写了离线 基本思路就是,考虑一个盘子以及它能接到的所有水果 可以发现,这个水果的端点一定在这个盘子两端的"子树&qu ...

  3. 51nod 1040 最大公约数之和 | 数论

    给出一个n,求1-n这n个数,同n的最大公约数的和 n<=1e9 考虑枚举每个因数,对答案贡献的就是个数*大小

  4. linux上的vim永久显示行号

    步骤1: cp /usr/share/vim/vimrc ~/.vimrc 先复制一份vim配置模板到个人目录下 注:redhat 改成 cp /etc/vimrc ~/.vimrc 步骤2: vi ...

  5. Angular1 基础知识 浅析(含锚点)

    1.angular:前端js框架  https://angularjs.org ① SPA单页应用程序 通过ajax从后台获取数据,动态渲染页面,不出现白屏,提高效率,节省流量 (1)锚点值 锚点:是 ...

  6. 控制属性为multiple的select

    需求:实现点击查询,搜索对应渠道已投放.未投放批次.如图: html: <div class="form-inline margin-top-20"> <div ...

  7. 【CF1017F】The Neutral Zone(Bitset,埃氏筛)

    题意: 思路:From https://blog.csdn.net/CSDNjiangshan/article/details/81536536 #include<cstdio> #inc ...

  8. Oracle 整理

    高效分页 select * from ( select rownum r,a from yourtable order by name ) --之所以没有把<=20放在最外面,也就是我一直用的写 ...

  9. 编程中的runtime_error问题

    前几天在编程中,代码如下: 头文件:ErrorHandlingModule.h //filename:ErrorHandlingModule.h #ifndef ErrorHandlingModule ...

  10. Nginx整合PHP原理

    安装Nginx        在网上,看到不少人装Nginx 时非常麻烦,配置时用了一大堆选项,请问你们真实现那么多功能么?害的我越看越郁闷.此次安装Nginx如果是按着上面笔者的步骤一步步走下来,安 ...