Comment créer CloudStack à l'aide de Docker

introduction

J'ai construit CloudStack pour comprendre CloudStack, mais j'ai un peu trébuché à ce moment-là, alors j'ai décidé d'écrire cet article. Il existe différentes façons de créer CloudStack, mais cette fois, nous utiliserons Docker.

Environnement de développement

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

Qu'est-ce que CloudStack Simulator?

Le simulateur CloudStack est une image Docker officiellement fournie par CloudStack. Le simulateur s'exécute dans un conteneur à l'exception de la base de données de gestion. (Comme je ne suis pas familier avec CloudStack, je vous serais reconnaissant de bien vouloir signaler les erreurs.)

Puisque l'image du simulateur est enregistrée dans Docker Hub, nous l'utiliserons cette fois. https://hub.docker.com/r/cloudstack/simulator

Je l'ai déplacé

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

J'ai essayé de l'exécuter officiellement et j'ai essayé d'accéder à http: // localhost: 8080 / client, mais une erreur s'est produite, comme indiqué dans l'image ci-dessous. スクリーンショット 2020-10-22 2.55.40.png Je ne savais pas ce qui se passait simplement en regardant cela, alors j'ai décidé de vérifier quel type d'erreur se produisait.

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.

À première vue, il semble que vous ne puissiez pas vous connecter à MySQL? Ainsi, lorsque j'ai enquêté de diverses manières, problème concernant l'erreur ci-dessus a été mentionné.

Cependant, comme le problème était résolu, je pensais que l'image de Docker Hub était ancienne, j'ai donc décidé de la créer à partir de la dernière version.

Le sujet principal d'ici

Donc, je vais utiliser Dernière version du référentiel officiel. Les fichiers liés à Docker se trouvent sous tools / docker.

** Veuillez cloner tel quel car vous aurez besoin de fichiers autres que ceux liés à Docker au moment de la construction. ** **

Exécutez Docker-compose. Probablement, en exécutant cette commande, la base de données de gestion de CloudStack est démarrée.

docker-compose -f tools/docker/docker-compose.yml up -d

Ensuite, je vais créer l'image à partir du Dockerfile, mais s'il s'agit du Dcokerfile cloné, une erreur pip se produira, alors corrigez-la.

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

#Veuillez ajouter cette ligne
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"]

Pour rendre l'image plus facile à comprendre, spécifiez le même nom de balise que la version CloudStack et créez-le. Si vous pouvez lancer le conteneur à l'aide de l'image générée et accéder à http: // localhost: 8080 / client, l'opération réussit. Le démarrage prend beaucoup de temps, vous pouvez donc supprimer l'option -d si vous voulez vérifier si elle fonctionne correctement.

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

C'est l'écran où vous pouvez y accéder. スクリーンショット 2020-10-22 9.42.00.png

finalement

Bien qu'il soit brièvement présenté dans l'article, il y a eu beaucoup d'essais et d'erreurs car il y avait peu de références. J'espère que cet article aidera quelqu'un qui trébuche autant que moi.

Recommended Posts

Comment créer CloudStack à l'aide de Docker
Comment créer un environnement Rails 6 avec Docker
Comment installer Docker
Comment construire android-midi-lib
[Rails] Comment créer un environnement avec Docker
Construction de docker multi-projets à l'aide de jib
Comment autoriser à l'aide de graphql-ruby
[Road_node.js_1-1] La voie de la création de l'environnement Node.js Express MySQL à l'aide de Docker
Comment créer l'application Docker + Springboot (pour l'apprentissage de base)
Comment déterminer la quantité de disque utilisée par Docker
Comment créer un environnement Docker avec Gradle pour IntelliJ
Essayez de créer un environnement de développement Java à l'aide de Docker
Comment créer un environnement [TypeScript + Vue + Express + MySQL] avec Docker ~ Express ~
J'ai essayé de construire l'environnement petit à petit en utilisant docker
Comment démarrer Camunda avec Docker
Comment créer un environnement [TypeScript + Vue + Express + MySQL] avec Docker ~ MySQL ~
Comment créer un environnement Rails + Vue + MySQL avec Docker [dernière version 2020/09]
Comment créer un environnement [TypeScript + Vue + Express + MySQL] avec Docker ~ Sequelize ~
Comment exécuter un contrat avec web3j
Comment trier une liste à l'aide du comparateur
Comment partager des fichiers avec Docker Toolbox
[Rails] Comment télécharger des images à l'aide de Carrierwave
[Java] Comment calculer l'âge à l'aide de LocalDate
Comment utiliser Docker dans VSCode DevContainer
Comment créer SquashTM et comment prendre en charge le japonais
Créez un projet Maven à la hâte à l'aide du conteneur Docker de Maven
Créer un serveur proxy d'authentification à l'aide de Docker
La construction du conteneur Docker ne parvient pas à installer php-radis
[Swift5] Comment mettre en œuvre une animation à l'aide de "lottie-ios"
Comprendre en 5 minutes !! Comment utiliser Docker
Comment exécuter Blazor (C #) avec Docker
Comment insérer des icônes à l'aide de Font awesome
Comment créer un environnement pour n'importe quelle version de Ruby en utilisant rbenv
Comment créer un environnement de développement Ruby on Rails avec Docker (Rails 6.x)
Comment créer un environnement de développement Ruby on Rails avec Docker (Rails 5.x)
Comment sortir Excel et PDF avec Excella
Comment vérifier le journal dans le conteneur Docker
Comment exécuter une méthode et simuler avec JUnit
[Rails] Comment créer un graphique à l'aide de lazy_high_charts
Comment obtenir un heapdump à partir d'un conteneur Docker
Comment réduire l'image de Spring Boot Docker
Comment supprimer un contrôleur, etc. à l'aide d'une commande
Comment jouer de la voix ou de la musique en utilisant javascript
Créer une application Kotlin à l'aide du conteneur OpenJDK Docker
[Ethereum] Comment exécuter un contrat en utilisant web3j-Part 2-
Comment mettre en œuvre la fonction de chapelure avec Gretel
Comment mettre à jour un fichier prédéfini dans un conteneur Docker
Comment générer une clé primaire à l'aide de @GeneratedValue
Comment créer une API avec GraphQL et Rails
Comment créer des données de catégorie hiérarchique à l'aide de l'ascendance
Comment lier des images à l'aide de FactoryBot Active Storage