这里以centos7 为例说明。
docker安装:
# step 1: 安装必要的一些系统工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# Step 2: 添加软件源信息
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# Step 3: 更新并安装 Docker-CE
sudo yum makecache fast
sudo yum -y install docker-ce
# Step 4: 开启Docker服务
sudo systemctl start docker && sudo systemctl enable docker
docker-compose安装:
sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
--------------------------------------------------------------------
文件目录结构:
docker-cobbler
Centos-7.repo
cobbler.env
docker-compose.yml
Dockerfile
start.sh
supervisord.d/conf.ini
------------------------------------------------------------------------
准备阿里云的yum源:
# CentOS-Base.repo
#
# The mirror system uses the connecting IP address of the client and the
# update status of each mirror to pick mirrors that are updated to and
# geographically close to the client. You should use this for CentOS updates
# unless you are manually picking other mirrors.
#
# If the mirrorlist= does not work for you, as a fall back you can try the
# remarked out baseurl= line instead.
#
#
[base]
name=CentOS-$releasever - Base - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/$releasever/os/$basearch/
http://mirrors.aliyuncs.com/centos/$releasever/os/$basearch/
http://mirrors.cloud.aliyuncs.com/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
#released updates
[updates]
name=CentOS-$releasever - Updates - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/$releasever/updates/$basearch/
http://mirrors.aliyuncs.com/centos/$releasever/updates/$basearch/
http://mirrors.cloud.aliyuncs.com/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
#additional packages that may be useful
[extras]
name=CentOS-$releasever - Extras - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/$releasever/extras/$basearch/
http://mirrors.aliyuncs.com/centos/$releasever/extras/$basearch/
http://mirrors.cloud.aliyuncs.com/centos/$releasever/extras/$basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
#additional packages that extend functionality of existing packages
[centosplus]
name=CentOS-$releasever - Plus - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/$releasever/centosplus/$basearch/
http://mirrors.aliyuncs.com/centos/$releasever/centosplus/$basearch/
http://mirrors.cloud.aliyuncs.com/centos/$releasever/centosplus/$basearch/
gpgcheck=1
enabled=0
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
#contrib - packages by Centos Users
[contrib]
name=CentOS-$releasever - Contrib - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/$releasever/contrib/$basearch/
http://mirrors.aliyuncs.com/centos/$releasever/contrib/$basearch/
http://mirrors.cloud.aliyuncs.com/centos/$releasever/contrib/$basearch/
gpgcheck=1
enabled=0
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
编写Dockerfile
FROM centos:7.6.1810
MAINTAINER 434754018@qq.com
ENV COBBLER_VERSION 2.8.4
RUN rm -rf /etc/yum.repos.d/*.repo
ADD Centos-7.repo /etc/yum.repos.d/
RUN yum makecache fast && yum -y install wget epel-release && \
wget -O /etc/yum.repos.d/cobbler28.repo http://download.opensuse.org/repositories/home:/libertas-ict:/cobbler28/CentOS_7/home:libertas-ict:cobbler28.repo && \
yum -y install cobbler tftp-server dhcp openssl cobbler-web supervisor debmirror pykickstart && \
yum -y update && \
yum clean all
ADD supervisord.d/conf.ini /etc/supervisord.d/conf.ini
ADD start.sh /start.sh
RUN chmod +x /start.sh
CMD ["/start.sh"]
编写脚本start.sh:
#!/bin/bash
set -ex
if [ ! $SERVER_IP ]
then
echo "Please use $SERVER_IP set the IP address of the need to monitor."
exit 1
elif [ ! $DHCP_RANGE ]
then
echo "Please use $DHCP_RANGE set up DHCP network segment."
exit 1
elif [ ! $ROOT_PASSWORD ]
then
echo "Please use $ROOT_PASSWORD set the root password."
exit 1
elif [ ! $DHCP_SUBNET ]
then
echo "Please use $DHCP_SUBNET set the dhcp subnet."
exit 1
elif [ ! $DHCP_ROUTER ]
then
echo "Please use $DHCP_ROUTER set the dhcp router."
exit 1
elif [ ! $DHCP_DNS ]
then
echo "Please use $DHCP_DNS set the dhcp dns."
exit 1
else
PASSWORD=`openssl passwd -1 -salt hLGoLIZR $ROOT_PASSWORD`
sed -i "s/^server: 127.0.0.1/server: $SERVER_IP/g" /etc/cobbler/settings
sed -i "s/^next_server: 127.0.0.1/next_server: $SERVER_IP/g" /etc/cobbler/settings
sed -i 's/pxe_just_once: 0/pxe_just_once: 1/g' /etc/cobbler/settings
sed -i 's/manage_dhcp: 0/manage_dhcp: 1/g' /etc/cobbler/settings
sed -i "s#^default_password.*#default_password_crypted: \"$PASSWORD\"#g" /etc/cobbler/settings
sed -i "s/192.168.1.0/$DHCP_SUBNET/" /etc/cobbler/dhcp.template
sed -i "s/192.168.1.5/$DHCP_ROUTER/" /etc/cobbler/dhcp.template
sed -i "s/192.168.1.1;/$DHCP_DNS;/" /etc/cobbler/dhcp.template
sed -i "s/192.168.1.100 192.168.1.254/$DHCP_RANGE/" /etc/cobbler/dhcp.template
sed -i "s/^#ServerName www.example.com:80/ServerName localhost:80/" /etc/httpd/conf/httpd.conf
sed -i "s/service %s restart/supervisorctl restart %s/g" /usr/lib/python2.7/site-packages/cobbler/modules/sync_post_restart_services.py
rm -rf /run/httpd/*
/usr/sbin/apachectl
/usr/bin/cobblerd
cobbler sync
cobbler get-loaders
pkill cobblerd
pkill httpd
rm -rf /run/httpd/*
exec supervisord -n -c /etc/supervisord.conf
fi
编写conf.ini:
[program:dhcpd]
;directory=/tmp
command=/usr/sbin/dhcpd -f -cf /etc/dhcp/dhcpd.conf -user dhcpd -group dhcpd --no-pid
priority=999
autostart=true
autorestart=unexpected
startsecs=1
startretries=3
user=root
redirect_stderr=true
stdout_logfile=/var/log/supervisor/%(program_name)s.log
[program:httpd]
;directory=/tmp
command=/usr/sbin/httpd -DFOREGROUND
priority=990
autostart=true
autorestart=unexpected
startsecs=1
startretries=3
;user=root
redirect_stderr=true
stdout_logfile=/var/log/supervisor/%(program_name)s.log
[program:cobblerd]
;directory=/tmp
command=/usr/bin/cobblerd -F
priority=991
autostart=true
autorestart=unexpected
startsecs=1
startretries=3
;user=root
redirect_stderr=true
stdout_logfile=/var/log/supervisor/%(program_name)s.log
[program:tftpd]
;directory=/tmp
command=/usr/sbin/in.tftpd -L -l -4 -a 0.0.0.0:69 -s /var/lib/tftpboot
priority=999
autostart=true
autorestart=unexpected
startsecs=1
startretries=3
;user=root
redirect_stderr=true
stdout_logfile=/var/log/supervisor/%(program_name)s.log
编写docker-compose.yml:
cobbler:
image: cobbler:2.8
volumes:
- /mnt:/mnt:ro
env_file: cobbler.env
net: "host"
编写cobbler.env环境变量文件:
#服务器IP地址
SERVER_IP=192.168.80.10
#装机后服务器的root密码
ROOT_PASSWORD=12345678
#指定批量装机需要获取的IP地址段
DHCP_RANGE=192.168.80.230 192.168.80.235
#指定DHCP的网段
DHCP_SUBNET=192.168.80.0
#指定DHCP的网关
DHCP_ROUTER=192.168.80.2
#指定DHCP的DNS地址
DHCP_DNS=223.5.5.5
------------------------------------------------------
1、首先更改`cobbler.env`变量文件里的变量信息
2、把系统镜像挂载到本机的`/mnt`目录下
3、运行cobbler容器:`docker-compose up -d`
4、进入cobbler容器,配置装机系统:`docker exec -it dockercobbler_cobbler_1 bash`
-------------------------------------------------------
注意:
1.需要关闭selinux
2.需要开放端口80、443
3.web访问:https://ip/cobbler_web username:cobbler password:cobbler