设为首页 收藏本站
查看: 1582|回复: 1

[经验分享] Docker容器引导完整CentOS

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2016-11-7 14:07:34 | 显示全部楼层 |阅读模式
因为现在的环境还在CentOS5下,但新的库只有在CentOS6下才能用。然后用Docker启动完整OS,这样相对于ESX省资源一点点。  目前的环境是宿主机是ubuntu 16.04, 然后容器就 centos5 和 centos6
  首先直接从官方下载相关底包
1
2
docker pull centos:5.11
docker pull centos:6.8



  然后直接在底包上组安装相关软件
1
yum groupinstall ...



上面直接组安装法对5.11没问题, 6.8就是没办法折腾。6.8上只要这样安装,再启动容器,发现会卡在
sulogin 这个进程上,然后就没反应了(另外,rc.sysinit 这个进程应该运行一下就消失的却一直都在)。查询了一下这个进程是单用户登录用的,然后只要有这个进程就没办法SSH了。
然后我是按下面的包顺序安装的。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 先安装的SSH,安装一个 commit 一次, 一行装一次
openssh-server
# 下面的是 Base 包里的
abrt-addon-ccpp abrt-addon-kerneloops abrt-addon-python abrt-cli acpid alsa-utils at authconfig b43-fwcutter bc
biosdevname blktrace bridge-utils centos-indexhtml cpuspeed crontabs cryptsetup-luks cyrus-sasl-plain dbus
fprintd-pam hunspell hunspell-en irqbalance ledmon libaio logrotate
lsof lvm2 man man-pages man-pages-overrides microcode_ctl mlocate mtr nano
ntp ntpdate ntsysv openssh-clients pam_passwdqc pciutils pcmciautils pinfo pm-utils
prelink psacct rdate readahead rfkill      
rng-tools rsync scl-utils
setserial
setuptool smartmontools sos strace sysstat system-config-firewall-tui system-config-network-tui systemtap-runtime tcpdump tcsh time tmpwatch traceroute unzip vconfig vim-enhanced virt-what wget words xz yum-plugin-security yum-utils zip bind-utils
# 下面的是开发工具组 直接 yum groupinstall ...
"Development tools"
# 下面这些是 Desktop, "X windows", 还有附加开发中的东西,
GConf2-devel NetworkManager NetworkManager-gnome alsa-lib-devel alsa-plugins-pulseaudio at-spi audit-libs-devel binutils-devel boost-devel bzip2-devel
control-center control-center-extra cyrus-sasl-devel dbus-glib-devel elfutils-devel elfutils-libelf-devel eog evolution-data-server-devel firstboot gdm
gdm-plugin-fingerprint gdm-user-switch-applet glx-utils gnome-applets gnome-desktop-devel gnome-keyring-devel gnome-media gnome-packagekit gnome-panel gnome-power-manager
java-1.6.0-openjdk-devel perl-devel mysql-devel python-devel perl-ExtUtils-MakeMaker sqlite-devel libcurl-devel
libacl-devel libattr-devel libcanberra-devel libcap-ng-devel libcgroup-devel  libgnome-devel libnotify-devel  librsvg2-devel libsoup-devel pygtk2-devel readline-devel tbb-devel vnc-server nscd pam_ldap vsftpd
xdg-user-dirs-gtk xorg-x11-drivers xorg-x11-server-Xorg xorg-x11-server-utils xorg-x11-utils xorg-x11-xauth xorg-x11-xinit xvattr yelp
polkit-devel gnome-terminal polkit-gnome spice-vdagent vino wacomexpresskeys wdaemon notification-daemon



最后还有下面这几这个包只要安装就会卡在 sulogin, 暂时不知道乍整
1
nautilus gok hmaccalc gvfs-devel gnome-vfs2-smb gvfs-archive gvfs-fuse gvfs-smb




引导完整系统官方是不推荐这样做的,毕竟Docker是轻量级的,这样违背了他的初衷了。
要引导完整系统run后面的参数就是 /sbin/init

  在安装好 autofs 后,想启动它发现提示:
1
2
Starting automount: automount: test mount forbidden or incorrect kernel protocol version, kernel protocol version 5.00 or above required.
                                                           [FAILED]



搜索后发现原来是权限不够。
直接在 run 时加上 --privileged 即可,如:
1
docker run --rm --privileged -p 3000:22 -v /root/centos6:/root centos6/d1103:D /sbin/init



  容器启动后,在宿主机发现 agetty 进程CPU占用100%,再次放狗,解决办法如下
1
2
3
4
systemctl list-units *getty*
systemctl stop getty@tty1.service  #主要是这个停止后就OK
systemctl stop system-getty.slice
systemctl stop getty.target




另外容器还要固定IP,然后用的macvlan办法,写了一个小脚本用来启动容器并设置IP
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
31
32
33
34
35
36
37
38
39
#!/bin/bash
# start container and setting container IP address

if [[ $# -ne 3 ]]
    then
    echo "./script.sh image_name ip_dev_name container_ip"
    echo ""
    echo "./script.sh centos5/new:A enp4s0 192.168.1.6/24"
    echo ""
    exit
fi

config=/local_home/docker/config

docker run -d --privileged -v $config/${1%/*}:/root $1 /sbin/init
docker_pid=$(docker inspect $(docker ps | awk -vt=$2 'NR>1&&$2==t{print $1}') 2>/dev/null | awk '$1~/Pid\"/{print +$2}')

if [[ -z "$docker_pid" ]]
    then
    echo "docker container name not found"
    exit
fi

if [[ `ip link | awk -vdev=$2 '$2==dev":"{a=1}END{print a}'` -ne 1 ]]
    then
    echo "ip dev name error"
    exit
fi

ip link add "$2".d link "$2" type macvlan mode bridge
ip link set netns "$docker_pid" "${2}.d"

nsenter -t "$docker_pid" -n ip link set "${2}.d" up
nsenter -t "$docker_pid" -n ip route del default
nsenter -t "$docker_pid" -n ip addr add "$3" dev "${2}.d"
nsenter -t "$docker_pid" -n ip route add default via `ip r | awk '/default/{print $3}'` dev "${2}.d"

# 进入容器
# nsenter --target=$docker_pid --net --mount --uts --pid






运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-296986-1-1.html 上篇帖子: Docker + redis + nginx + tomcat 下篇帖子: Docker 1.12 实战 (一)基本部署
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表