学校课程要搭建 Cloudstack 环境,虽然书上写得很详细,但是只能说书本的教程太麻烦不适合我这种懒人。那就自己想办法动手搭建咯。
一句话完事?
其实 Cloudstack 提供了一个模拟器,直接执行:
docker run --name simulator -p 8080:8080 -d cloudstack/simulator
等待几分钟,Cloudstack 就已经部署在本地了。好了,教程到此结束。
这样写估计是要被吐槽的,所以接下来看看刚才那句话执行之后到底发生了什么。
Xen、KVM 与 OpenVZ
在开始之前需要解释一下这三者的区别。
简单来说,KVM 内置于 Linux,是内核模块;Xen、OpenVZ 是 Linux 的一个应用。
相关解释这里挺详细的:https://www.yingsuo.tech/article/openvz-xen-kvm.html
本文使用的是 Xen 虚拟化技术。
看 Dockerfile 知原理
先上模拟器的 Dockerfile:
FROM ubuntu:16.04
MAINTAINER "Apache CloudStack" <dev@cloudstack.apache.org>
LABEL Vendor="Apache.org" License="ApacheV2" Version="4.10.0.0-SNAPSHOT"
RUN apt-get -y update && apt-get install -y \
genisoimage \
libffi-dev \
libssl-dev \
git \
sudo \
ipmitool \
maven \
openjdk-8-jdk \
python-dev \
python-setuptools \
python-pip \
python-mysql.connector \
supervisor
RUN echo 'mysql-server mysql-server/root_password password root' | debconf-set-selections; \
echo 'mysql-server mysql-server/root_password_again password root' | debconf-set-selections;
RUN apt-get install -qqy mysql-server && \
apt-get clean all && \
mkdir /var/run/mysqld; \
chown mysql /var/run/mysqld
RUN echo '''sql_mode ="STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"''' >> /etc/mysql/mysql.conf.d/mysqld.cnf
RUN (/usr/bin/mysqld_safe &); sleep 5; mysqladmin -u root -proot password ''
#RUN pip install --allow-external mysql-connector-python mysql-connector-python
COPY tools/docker/supervisord.conf /etc/supervisor/conf.d/supervisord.conf
COPY . ./root
WORKDIR /root
RUN mvn -Pdeveloper -Dsimulator -DskipTests clean install
RUN (/usr/bin/mysqld_safe &); \
sleep 5; \
mvn -Pdeveloper -pl developer -Ddeploydb; \
mvn -Pdeveloper -pl developer -Ddeploydb-simulator; \
MARVIN_FILE=`find /root/tools/marvin/dist/ -name "Marvin*.tar.gz"`; \
pip install $MARVIN_FILE
EXPOSE 8080 8096
CMD ["/usr/bin/supervisord"]
整个 Dockerfile 最关键的是第二句 COPY 命令,把整个仓库代码丢进了容器中。
所以部署数据中心也就很方便了:
docker exec -ti cloudstack python \
/root/tools/marvin/marvin/deployDataCenter.py -i /root/setup/dev/advanced.cfg
# or
docker exec -ti cloudstack python \
/root/tools/marvin/marvin/deployDataCenter.py -i /root/setup/dev/advancedsg.cfg
# or
docker exec -ti cloudstack python \
/root/tools/marvin/marvin/deployDataCenter.py -i /root/setup/dev/basic.cfg
部署 Cloudstack 管理节点(旧版)
运行数据库:
docker run --name cloudstack-mysql -e MYSQL_ROOT_PASSWORD=password -d mysql
运行管理节点:
docker run -ti --name cloudstack --link cloudstack-mysql:mysql -d -p 8080:8080 -p 8250:8250 cloudstack/management_centos6
本文源代码:
https://github.com/apache/cloudstack/tree/master/tools/docker