一、前言
最近公司要求對一批GPU服務器安裝操作系統,之前同事一直采用cobbler安裝系統,一旦服務器設置為pxe優先啟動,會出現重復安裝系統的問題,並且如果線上服務器忘記修改第一啟動項為硬盤啟動,可能還會出現線上服務器計划外重裝系統,造成數據丟失的風險。因為上一家我們一直采用foreman來安裝系統,foreman可以很好避免這個問題。當然,foreman的強大不止於此,但也存在部署繁瑣的問題,因此,研究了一下如何將foreman容器化,從而達到一鍵快速部署foreman的目的。
二、部署
以下是我的操作步驟:
1、環境介紹
[root@foreman foreman-1.0]# rpm -qa | grep docker docker-ce-cli-18.09.0-3.el7.x86_64 docker-ce-18.09.0-3.el7.x86_64 [root@foreman foreman-1.0]# cat /etc/redhat-release CentOS Linux release 7.3.1611 (Core) [root@foreman foreman-1.0]#
2、安裝docker
參考docker官方部署文檔:https://docs.docker.com/install/linux/docker-ce/centos/#os-requirements
yum install -y yum-utils device-mapper-persistent-data lvm2 yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo yum install docker-ce systemctl start docker && systemctl enable docker
3、制作基礎鏡像
[root@foreman ~]# mkdir base && cd base && cat Dockerfile FROM centos:latest MAINTAINER eden RUN yum -y install systemd systemd-libs RUN yum clean all; \ (cd /lib/systemd/system/sysinit.target.wants/; for i in *; \ do [ $i == systemd-tmpfiles-setup.service ] || rm -f $i; done); \ rm -f /lib/systemd/system/multi-user.target.wants/*;\ rm -f /etc/systemd/system/*.wants/*;\ rm -f /lib/systemd/system/local-fs.target.wants/*; \ rm -f /lib/systemd/system/sockets.target.wants/*udev*; \ rm -f /lib/systemd/system/sockets.target.wants/*initctl*; \ rm -f /lib/systemd/system/basic.target.wants/*;\ rm -f /lib/systemd/system/anaconda.target.wants/*; VOLUME [ "/sys/fs/cgroup" ] CMD ["/usr/sbin/init"]
[root@foreman base]# docker build --rm -t centos:systemd .
4、制作foreman base鏡像
[root@foreman ~]# mkdir foreman && cd foreman && cat Dockerfile FROM centos:systemd MAINTAINER eden RUN yum -y --nogpgcheck install epel-release RUN yum -y --nogpgcheck install https://yum.puppetlabs.com/puppet5/puppet5-release-el-7.noarch.rpm RUN yum -y --nogpgcheck install https://yum.theforeman.org/releases/1.20/el7/x86_64/foreman-release.rpm RUN yum -y --nogpgcheck install foreman-installer #RUN foreman-installer
[root@foreman foreman]# docker build --rm -t foreman:base .
5、基於base鏡像安裝foreman
[root@foreman ~]# docker run --privileged -d -v /sys/fs/cgroup:/sys/fs/cgroup:ro -h foreman.tuputech.ai --add-host foreman.tuputech.ai:127.0.0.1 --name foreman-base -t foreman:base [root@foreman ~]# docker exec -it foreman-base bash [root@foreman-base /]# foreman-installer
6、將安裝好foreman的容器commit為鏡像
# docker commit -m "2018-12-19 20:00" 035bdb3afa25 foreman:v1.0
7、最后封裝
[root@foreman ~]# mkdir foreman-1.1 && cd foreman-1.1 && cat Dockerfile FROM foreman:v1.0 MAINTAINER eden CMD ["/usr/sbin/init"] [root@foreman foreman-1.1]# docker build --rm -t foreman:v1.1 .
8、啟動foreman
docker run --privileged -d -v /sys/fs/cgroup:/sys/fs/cgroup:ro -h foreman.tuputech.ai --name foreman --add-host foreman.tuputech.ai:127.0.0.1 --restart=always --network=host -t foreman:v1.1