全球主机交流论坛

标题: 为国产龙芯mips架构Linux制作docker精简镜像 [打印本页]

作者: 摸鱼小熊猫    时间: 2018-4-27 10:00
标题: 为国产龙芯mips架构Linux制作docker精简镜像
我最近在做docker和kubernetes 本土化的工作

通过打包国产Linux关键系统文件,可以制作出能用的mips架构下的docker镜像
但是即使是最小安装的国产Linux,打包之后做成的docker镜像也有800MB+,这样太重了,传输什么的都很不方便

理想是像centos、debian官方那种,几十MB的镜像

现在的问题是,因为MIPS/X86架构的不同,docker hub上面的alpine,busybox镜像都不能用
也就是说我没办法 在dockerfile中
from alpine 类似这样基于现有的镜像去做

有没有大佬能指出一条明路,如何从零开始制作一份不超过100MB的docker镜像


作者: dabiantai    时间: 2018-4-27 10:00
本帖最后由 dabiantai 于 2018-5-1 09:42 编辑
摸鱼小熊猫 发表于 2018-5-1 00:38
谢谢老哥回复,tar打包docker镜像我知道,而且之前就是这么做的。但是打包的image太大了,要求是,在一百 ...


用openembedded吧,很方便的
https://www.openembedded.org/wiki/Getting_started

配合yocto https://www.yoctoproject.org/

oe的分支要选一个活跃一点的,不然以后会被坑一脸
作者: 达达大人    时间: 2018-4-27 10:03
战略性马克
作者: 万人迷    时间: 2018-4-27 10:05
这个是基本功了
熟悉底层的东西了吧

谁没事折腾这东西干什么呀,有好的不用非要用。。。。。
作者: 摸鱼小熊猫    时间: 2018-4-27 10:06
万人迷 发表于 2018-4-27 10:05
这个是基本功了
熟悉底层的东西了吧

没办法,为了国产系统的崛起而奋斗


作者: hosty    时间: 2018-4-27 10:14
支持大佬  mark一个
作者: 左手写爱    时间: 2018-4-27 10:20
摸鱼小熊猫 发表于 2018-4-27 10:06
没办法,为了国产系统的崛起而奋斗

国产系统没几十个亿怕是出不来
作者: ggeeii    时间: 2018-4-27 10:24
左手写爱 发表于 2018-4-27 10:20
国产系统没几十个亿怕是出不来

到现在何止烧了几十亿?
作者: zzr    时间: 2018-4-27 10:25
左手写爱 发表于 2018-4-27 10:20
国产系统没几十个亿怕是出不来

给你几百亿都不行,改个linux做个桌面几十万就够了。问题是生态,你给腾讯多少钱愿意给你开发维护?给阿里多少?给百度多少?

兼容exe不说技术上,除非闭关锁国否则这事恐怕做不了。。。。
作者: yujizmq    时间: 2018-4-27 10:33
这。。。只能精神上支持一下了
作者: 摸鱼小熊猫    时间: 2018-4-27 10:40
ggeeii 发表于 2018-4-27 10:24
到现在何止烧了几十亿?

国产芯片烧钱多,据我所知系统这块还真没烧多少钱

君不见,红旗Linux都破产了,也没见zf出来托底
作者: yidaomm    时间: 2018-4-27 10:42
支持大佬  mark一个
作者: 左手写爱    时间: 2018-4-27 10:43
zzr 发表于 2018-4-27 10:25
给你几百亿都不行,改个linux做个桌面几十万就够了。问题是生态,你给腾讯多少钱愿意给你开发维护?给阿 ...

我只是敲醒楼主

几十个亿真做的话,给各种人等的提成之类的怕就用了七八个亿

做过政府招投标的都懂
作者: FrozenAngels    时间: 2018-4-27 11:29
只能精神支持一下大佬了
作者: 摸鱼小熊猫    时间: 2018-4-27 11:32
找到解决方案了

目标国产系统核心包如下:
acl attr audit basesystem bash coreutils cpio cronie dhclient e2fsprogs filesystem glibc initscripts iproute iptables iptables-ipv6 iputils kbd ncurses openssh-server passwd policycoreutils procps rootfiles rpm rsyslog selinux-policy-targeted setup shadow-utils sudo usbtray util-linux-ng vim-minimal yum

经过精简的核心包如下:
basesystem bash coreutils filesystem iputils passwd  procps rootfiles rpm shadow-utils vim-minimal yum

执行脚本:
bash <script_name> -g null -p basesystem bash coreutils filesystem iputils passwd  procps rootfiles rpm shadow-utils vim-minimal yum

制作镜像的脚本如下:


  1. #!/usr/bin/env bash

  2. set -e

  3. usage() {
  4.     cat <<EOOPTS
  5. $(basename $0) [OPTIONS] <name>
  6. OPTIONS:
  7.   -p "<packages>"  The list of packages to install in the container.
  8.                    The default is blank.
  9.   -g "<groups>"    The groups of packages to install in the container.
  10.                    The default is "Core".
  11.   -y <yumconf>     The path to the yum config to install packages from. The
  12.                    default is /etc/yum.conf for Centos/RHEL and /etc/dnf/dnf.conf for Fedora
  13. EOOPTS
  14.     exit 1
  15. }

  16. # option defaults
  17. yum_config=/etc/yum.conf
  18. if [ -f /etc/dnf/dnf.conf ] && command -v dnf &> /dev/null; then
  19.         yum_config=/etc/dnf/dnf.conf
  20.         alias yum=dnf
  21. fi
  22. install_groups="Core"
  23. while getopts ":y:p:g:h" opt; do
  24.     case $opt in
  25.         y)
  26.             yum_config=$OPTARG
  27.             ;;
  28.         h)
  29.             usage
  30.             ;;
  31.         p)
  32.             install_packages="$OPTARG"
  33.             ;;
  34.         g)
  35.             install_groups="$OPTARG"
  36.             ;;
  37.         \?)
  38.             echo "Invalid option: -$OPTARG"
  39.             usage
  40.             ;;
  41.     esac
  42. done
  43. shift $((OPTIND - 1))
  44. name=$1

  45. if [[ -z $name ]]; then
  46.     usage
  47. fi

  48. target=$(mktemp -d --tmpdir $(basename $0).XXXXXX)

  49. set -x

  50. mkdir -m 755 "$target"/dev
  51. mknod -m 600 "$target"/dev/console c 5 1
  52. mknod -m 600 "$target"/dev/initctl p
  53. mknod -m 666 "$target"/dev/full c 1 7
  54. mknod -m 666 "$target"/dev/null c 1 3
  55. mknod -m 666 "$target"/dev/ptmx c 5 2
  56. mknod -m 666 "$target"/dev/random c 1 8
  57. mknod -m 666 "$target"/dev/tty c 5 0
  58. mknod -m 666 "$target"/dev/tty0 c 4 0
  59. mknod -m 666 "$target"/dev/urandom c 1 9
  60. mknod -m 666 "$target"/dev/zero c 1 5

  61. # amazon linux yum will fail without vars set
  62. if [ -d /etc/yum/vars ]; then
  63.         mkdir -p -m 755 "$target"/etc/yum
  64.         cp -a /etc/yum/vars "$target"/etc/yum/
  65. fi

  66. if [[ -n "$install_groups" ]];
  67. then
  68.     yum -c "$yum_config" --installroot="$target" --releasever=/ --setopt=tsflags=nodocs \
  69.         --setopt=group_package_types=mandatory -y groupinstall "$install_groups"
  70. fi

  71. if [[ -n "$install_packages" ]];
  72. then
  73.     yum -c "$yum_config" --installroot="$target" --releasever=/ --setopt=tsflags=nodocs \
  74.         --setopt=group_package_types=mandatory -y install "$install_packages"
  75. fi

  76. yum -c "$yum_config" --installroot="$target" -y clean all

  77. cat > "$target"/etc/sysconfig/network <<EOF
  78. NETWORKING=yes
  79. HOSTNAME=localhost.localdomain
  80. EOF

  81. # effectively: febootstrap-minimize --keep-zoneinfo --keep-rpmdb --keep-services "$target".
  82. #  locales
  83. rm -rf "$target"/usr/{{lib,share}/locale,{lib,lib64}/gconv,bin/localedef,sbin/build-locale-archive}
  84. #  docs and man pages
  85. rm -rf "$target"/usr/share/{man,doc,info,gnome/help}
  86. #  cracklib
  87. rm -rf "$target"/usr/share/cracklib
  88. #  i18n
  89. rm -rf "$target"/usr/share/i18n
  90. #  yum cache
  91. rm -rf "$target"/var/cache/yum
  92. mkdir -p --mode=0755 "$target"/var/cache/yum
  93. #  sln
  94. rm -rf "$target"/sbin/sln
  95. #  ldconfig
  96. rm -rf "$target"/etc/ld.so.cache "$target"/var/cache/ldconfig
  97. mkdir -p --mode=0755 "$target"/var/cache/ldconfig

  98. version=
  99. for file in "$target"/etc/{redhat,system}-release
  100. do
  101.     if [ -r "$file" ]; then
  102.         version="$(sed 's/^[^0-9\]*\([0-9.]\+\).*$/\1/' "$file")"
  103.         break
  104.     fi
  105. done

  106. if [ -z "$version" ]; then
  107.     echo >&2 "warning: cannot autodetect OS version, using '$name' as tag"
  108.     version=$name
  109. fi

  110. tar --numeric-owner -c -C "$target" . | docker import - $name:$version

  111. docker run -i -t --rm $name:$version /bin/bash -c 'echo success'

  112. rm -rf "$target"
复制代码


作者: dream7758521    时间: 2018-4-27 11:48
提示: 作者被禁止或删除 内容自动屏蔽
作者: GeekDuanLian    时间: 2018-4-27 12:06
提示: 作者被禁止或删除 内容自动屏蔽
作者: dengdeng    时间: 2018-4-27 12:07
战略性马克!!!支持国产
作者: 斜阳晚暮    时间: 2018-4-27 12:22
那么,哪里能买到便宜的龙芯笔记本呢?
作者: 三思而后折腾    时间: 2018-4-27 12:33
我没记错的话,

docker 只支持 x64 架构,
作者: jpfree    时间: 2018-4-27 13:00
先说说你的龙芯是哪个cpu的
作者: fisher335    时间: 2018-4-27 13:08
政府短视,以前怕这怕那,结果现在人家真撕破脸了自己就慌了。哎
作者: PigRinpoche    时间: 2018-4-27 13:11
zzr 发表于 2018-4-27 10:25
给你几百亿都不行,改个linux做个桌面几十万就够了。问题是生态,你给腾讯多少钱愿意给你开发维护?给阿 ...

怎么可能兼容exe大哥,完全是两种东西。
作者: 摸鱼小熊猫    时间: 2018-4-27 13:13
GeekDuanLian 发表于 2018-4-27 12:06
有实体机吗 在哪测试

我司有龙芯的机器 各个型号都有
作者: 摸鱼小熊猫    时间: 2018-4-27 13:16
斜阳晚暮 发表于 2018-4-27 12:22
那么,哪里能买到便宜的龙芯笔记本呢?

我只看到过pc服务器,而且造价很贵
作者: huangchendz    时间: 2018-4-27 13:19
提示: 作者被禁止或删除 内容自动屏蔽
作者: zzr    时间: 2018-4-27 18:45
PigRinpoche 发表于 2018-4-27 13:11
怎么可能兼容exe大哥,完全是两种东西。

   这世界没有什么是不可能的,比如通过模拟器。但性能损失是肯定的
作者: 总有刁民想害朕    时间: 2018-4-27 18:56
没有一毫秒的兴趣。
作者: wsycqyz    时间: 2018-4-27 18:59
请参考:Linux From Scratch,自己编译Linux,只留自己想要的东西,Linux可以做得很小小小
没有权限了链接,请搜索上面三个单词
作者: 摸鱼小熊猫    时间: 2018-4-27 20:02
本帖最后由 摸鱼小熊猫 于 2018-4-27 20:05 编辑

..
作者: 摸鱼小熊猫    时间: 2018-4-27 20:05
wsycqyz 发表于 2018-4-27 18:59
请参考:Linux From Scratch,自己编译Linux,只留自己想要的东西,Linux可以做得很小小小
没有权限了链接 ...

完docker的我当然知道from scratch 想征求下建议 但是没有收到合适的 说实话这种笼统的一句话没什么帮助 ...不过还是谢谢老哥热心回答
作者: cg865    时间: 2018-4-27 20:08
重新来了,自已重新打包ubuntu的rootfs,  
应该可以控制在5G以内压力不大
作者: kougui    时间: 2018-4-27 20:35
太高端。不懂~
作者: okhost    时间: 2018-4-27 21:04
这种专业问题不是应该在专业群体里讨论么?
龙芯这种东西 很少有大众能接触到吧。

作者: 跳帧    时间: 2018-4-27 22:46
提示: 作者被禁止或删除 内容自动屏蔽
作者: yangxiaozhi    时间: 2018-4-27 22:57
提示: 作者被禁止或删除 内容自动屏蔽
作者: 秋随枫舞    时间: 2018-4-28 00:02
哇 大佬 同对这个感兴趣 求打酱油
作者: callmefeifei    时间: 2018-4-28 00:03
楼主哪买的 芯片
作者: 斜阳晚暮    时间: 2018-4-28 06:37
跳帧 发表于 2018-4-27 22:46
大佬,你资料库地址现在是啥,找不到了

什么资料库。你说的是这个http://down.xieyang.org ?
作者: 跳帧    时间: 2018-4-28 06:39
提示: 作者被禁止或删除 内容自动屏蔽
作者: 斜阳晚暮    时间: 2018-4-28 06:59
跳帧 发表于 2018-4-28 06:39
不是,那个 down.lc~~~~这个

内容不是一样的吗?
之前的域名都没有了。
作者: 跳帧    时间: 2018-4-28 07:06
提示: 作者被禁止或删除 内容自动屏蔽
作者: 寻找天下母鸡    时间: 2018-4-28 08:28
没有龙芯,有生之年可能也不用龙芯
作者: 摸鱼小熊猫    时间: 2018-4-28 10:10
callmefeifei 发表于 2018-4-28 00:03
楼主哪买的 芯片

买不起,公司有
作者: jpfree    时间: 2018-4-28 10:41
不说什么版本就是刷流氓啊,2F没啥意义,但其它的芯片又死贵,别在这哗众取宠了。
作者: eben    时间: 2018-4-28 10:46
系统还真没有投入资源,都是几个有情怀的研究生跟着导师搞来着
作者: PigRinpoche    时间: 2018-4-29 14:20
zzr 发表于 2018-4-27 18:45
这世界没有什么是不可能的,比如通过模拟器。但性能损失是肯定的

wine那算是linux吗?这事情不可能的事情多了。
作者: dabiantai    时间: 2018-4-29 14:39
本帖最后由 dabiantai 于 2018-4-29 14:45 编辑

1. 用LEDE
2. OpenEmbedded自己编译发行版,实测4核i5一下午就能完成从内核到各种应用的编译

撸完之后把/打包成tar,然后导入docker

https://docs.docker.com/engine/reference/commandline/import/
作者: 月の天使    时间: 2018-4-30 23:06
国产系统很好用啊
我指的是deepin
那些拿国家钱投资的就别想了
就是想着怎么赚国家钱坑钱的
反而第三方很给力
作者: atomcore    时间: 2018-4-30 23:22
有个在吃灰的3a3000开发板,mark一下有时间折腾
作者: 摸鱼小熊猫    时间: 2018-5-1 00:38
dabiantai 发表于 2018-4-29 14:39
1. 用LEDE
2. OpenEmbedded自己编译发行版,实测4核i5一下午就能完成从内核到各种应用的编译


谢谢老哥回复,tar打包docker镜像我知道,而且之前就是这么做的。但是打包的image太大了,要求是,在一百兆左右。
作者: 摸鱼小熊猫    时间: 2018-5-1 00:40
atomcore 发表于 2018-4-30 23:22
有个在吃灰的3a3000开发板,mark一下有时间折腾

我有3a1000 3b3000 老哥握个爪
作者: sunnyhu    时间: 2018-5-1 00:57
摸鱼小熊猫 发表于 2018-4-27 13:13
我司有龙芯的机器 各个型号都有

被迫买的?
作者: o0o    时间: 2018-5-1 01:15
虽然不懂,但是厉害了!!!
作者: 摸鱼小熊猫    时间: 2018-5-1 08:08
sunnyhu 发表于 2018-5-1 00:57
被迫买的?

也不是这样啦,适配国产芯片本来就是我们公司任务之一




欢迎光临 全球主机交流论坛 (https://www.91ai.net/) Powered by Discuz! X3.4