一、前言
最近公司要求对一批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