Docker를 이용한 CloudStack 구축 방법

소개



CloudStack을 이해하기 위해 CloudStack을 빌드했는데, 그 때 다소 집착했기 때문에이 기사를 작성하기로 결정했습니다.
CloudStack을 구축하는 방법에는 여러 가지가 있지만 이번에는 Docker를 사용합니다.

개발 환경



MacBook Pro (Mojave 10.14.6)
Docker (19.03.13)
docker-compose (1.27.4)

CloudStack 시뮬레이터란?



CloudStack 시뮬레이터는 CloudStack이 공식으로 제공하는 Docker 이미지입니다.
시뮬레이터는 관리 DB 이외가 하나의 컨테이너 내에서 동작하고 있습니다. (CloudStack에 대한 이해가 얕기 때문에 잘못된 경우 지적해 주시면 감사하겠습니다.)

시뮬레이터의 이미지는 Docker Hub에 등록되어 있기 때문에 이번에는 그것을 활용합니다.
htps : // 후 b. 도 c r. 이 m / r / c ぉ ds ck / shimu r

실제로 움직여 보았습니다.


docker pull cloudstack/simulator
docker run --name cloudstack -d -p 8080:8080 cloudstack/simulator

공식대로 이동해 보고 http://localhost:8080/client 에 액세스해 보았습니다만, 아래의 이미지와 같이 에러가 발생해 버렸습니다.

이것만 봐도 무슨 일이 일어나고 있는지 모르기 때문에, 어떠한 에러가 발생하고 있는지를 확인해 보기로 했습니다.
docker run --name cloudstack -p 8080:8080 cloudstack/simulator

ERROR [c.c.u.d.Merovingian2] (main:null) (logid:) Unable to get a new db connection
com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Could not create connection to database server. Attempted reconnect 3 times. Giving up.

확실히 보면 MySQL에 접속할 수 없는 것 같다? 그래서 여러가지 조사해 보면 위의 에러에 관한 issue 을 들 수 있었습니다.

다만, issue는 close되어 있었기 때문에, Docker Hub의 이미지가 낡다고 생각해, Latest release로부터 구축하기로 했습니다.

여기에서 본제



그렇다면 공식 리포지토리의 Latest release 을 이용합니다.
Docker에 대한 파일은 tools/docker 아래에 있습니다.

빌드시에 Docker에 관한 파일 이외도 필요하므로, 그대로 clone 해 주세요.

Docker-compose를 이동합니다.
아마도이 명령을 실행하여 CloudStack 관리 DB를 시작하는 것 같습니다.
docker-compose -f tools/docker/docker-compose.yml up -d

그런 다음 Dockerfile에서 이미지를 빌드하지만 clone 해온 Dcokerfile이면 pip 오류가 발생하기 때문에 수정합니다.

Dockerfile
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.
#
# CloudStack-simulator build

FROM ubuntu:16.04

MAINTAINER "Apache CloudStack" <[email protected]>
LABEL Vendor="Apache.org" License="ApacheV2" Version="4.13.1.0"

ARG DEBIAN_FRONTEND=noninteractive

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 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

COPY tools/docker/supervisord.conf /etc/supervisor/conf.d/supervisord.conf
COPY . ./root
WORKDIR /root
RUN ls

RUN mvn -Pdeveloper -Dsimulator -DskipTests clean install

# この行を追加してください
RUN pip install --upgrade pip

RUN find /var/lib/mysql -type f -exec touch {} \; && \
    (/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

VOLUME /var/lib/mysql

EXPOSE 8080 8096

CMD ["/usr/bin/supervisord"]

이미지를 더 쉽게 이해할 수 있도록 태그 이름을 CloudStack 버전과 동일한 이름으로 빌드합니다.
빌드한 이미지를 이용해 컨테이너를 시작해, http://localhost:8080/client 에 액세스 할 수 있으면 성공입니다.
일어나기까지 시간이 걸리므로 제대로 작동하는지 확인하려면 -d 옵션을 제거할 수 있습니다.
docker build -t cloudstack/simulator:4.13.1.0 . -f tools/docker/Dockerfile 
docker run --name cloudstack -d -p 8080:8080 cloudstack/simulator:4.13.1.0

액세스 할 수 있었을 때의 화면입니다.


마지막으로



기사에서는 간단하게 소개하고 있습니다만, 레퍼런스가 적었기 때문에 여러가지 시행착오하고 있었습니다.
이 기사가 나와 같이 집착하고 있는 분의 도움이 되면 다행입니다.

좋은 웹페이지 즐겨찾기