Environnement Gradle dans un conteneur pour CentOS à l'aide de Docker Construire un environnement mysql dans le conteneur DB Autoriser Spring Boot à s'exécuter dans un environnement virtuel
récipient Conteneur CentOS: java8 / gradle / mysql Conteneur Mysql: Mysql
Démarrez Spring Boot dans le conteneur CentOS, accédez à la base de données du conteneur Mysql pour obtenir les données DB, puis affichez les données DB sur l'hôte via le port tomcat 8080.
docker-compose.yml centos Dockerfile gradle-project- [nom-projet] -gradle fichiers de projet dossier mysql-settings-empty -Sql-init.sql
docker-compose.yml: description de docker-compose pour créer un conteneur CentOS et Mysql
centos-> Dockerfile: Dockerfile pour démarrer le conteneur CentOS
gradle-project-> [project-name]: Fichiers de projet Gradle de l'application Spring Boot
mysql-> settings: volume (/ var / lib / mysql) pour la persistance des données DB de mysql -> sql-> init.sql: Script d'initialisation lors du démarrage du conteneur Mysql
docker-compose.yml
version: "3"
services:
centos:
build: ./centos #Paramètres de construction de centos Dockerfile(Voir ci-dessous)
container_name: boot-container #spécification du nom du conteneur centos
ports:
- "8080:8080" #Paramètre de transfert de port pour la communication entre les conteneurs OS hôtes
volumes:
- ./gradle-project:/gradle-project #gradle paramètres de persistance du projet
links:
- mysql # service[mysql]Permettre le traitement des communications inter-conteneurs
depends_on:
- mysql #Configuré pour créer un conteneur centos après le démarrage du conteneur mysql
privileged: true #Accorder des privilèges d'administrateur par opération centos(Juste au cas où, vous n'avez pas à vous soucier des opérations de commande.)
tty: true #Définir des centos pour continuer à fonctionner après la création du conteneur
mysql:
image: mysql:5.7
container_name: boot-mysql
command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci #Spécification du code de caractère de la commande du démon mysql
volumes:
- ./mysql/sql:/docker-entrypoint-initdb.d #Placez le script d'initialisation dans le conteneur
- ./mysql/settings:/var/lib/mysql #Montez le répertoire qui stocke le groupe de données de base de données que vous souhaitez conserver
environment: #Chaque paramètre de mysql
MYSQL_DATABASE: bootdb
MYSQL_USER: boot
MYSQL_PASSWORD: boot
MYSQL_ROOT_PASSWORD: root
#Obtenir des centos7
FROM centos:7
#Acquisition du logiciel de commande effectuée dans le conteneur
RUN yum -y update
RUN yum -y install wget
RUN yum -y install unzip
# install mysql5.7
RUN yum localinstall -y https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
# setting for mysql version 5.6 # mysql5.Si vous souhaitez utiliser 6, décommentez ci-dessous
# RUN yum-config-manager --disable mysql57-community
# RUN yum-config-manager --enable mysql56-community
RUN yum install -y mysql mysql-server
# install java
RUN yum install -y java-1.8.0-openjdk
RUN yum install -y java-1.8.0-openjdk-devel
# install gradle
RUN wget https://services.gradle.org/distributions/gradle-6.4.1-bin.zip
RUN unzip -d /opt/gradle /gradle-6.4.1-bin.zip
RUN rm -rf /gradle-6.4.1-bin.zip
RUN ls /opt/gradle/
# setting path # gradle/Définissez à l'avance les variables d'environnement pour pouvoir utiliser les commandes java
ENV GRADLE_HOME /opt/gradle/gradle-6.4.1
ENV JAVA_HOME /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.262.b10-0.el7_8.x86_64
ENV PATH ${JAVA_HOME}/bin:${GRADLE_HOME}/bin:${PATH}
gradle-project -> [project-name]:
Placez le fichier de projet Gradle dans le répertoire [project-name] Sortie de Spring Initilizer et fichiers de projet Eclipse Gradle Placez-le dans ce répertoire tel quel
Étant donné que le paramètre de persistance est défini, les opérations sur les fichiers de l'ordinateur hôte et du conteneur sont effectuées conjointement. Par conséquent, vous pouvez poursuivre le développement avec Eclipse, etc. et effectuer des opérations d'exécution de build / jar sur le conteneur tel quel.
mysql -> settings:
Stocke les fichiers qui stockent les données de la base de données MySQL Avant de créer le conteneur, c'est un répertoire vide Les fichiers de données, etc. sont ajoutés selon l'opération mysql après la création du conteneur
Les fichiers de données créés à l'intérieur du conteneur peuvent être conservés le volume est défini
mysql -> sql -> init.sql
Définir le script d'initialisation lors du démarrage du conteneur Cette fois, récupérez le contenu de l'enregistrement de données suivant à partir de Spring Boot, J'écris du code à afficher
CREATE DATABASE IF NOT EXISTS bootdb;
CREATE TABLE IF NOT EXISTS test(
id int(11) PRIMARY KEY,
data varchar(255) NOT NULL
);
INSERT INTO test (id, data) VALUES (1, 'welcome to spring boot with docker');
cd ./*docker-compose.Déplacer vers le répertoire courant de yml
#Démarrez le conteneur en arrière-plan
docker-compose up -d
Creating boot-mysql ... done
Creating boot-container ... done
#Confirmation de démarrage du conteneur
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
74f3771fef53 boot_with_docker_centos "/bin/bash" 4 minutes ago Up 4 minutes 0.0.0.0:8080->8080/tcp boot-container
5448c1a111c0 mysql:5.7 "docker-entrypoint.s…" 4 minutes ago Up 4 minutes 3306/tcp, 33060/tcp boot-mysql
#Construire un projet avec Gradle
docker exec -w /gradle-project/docker-app boot-container gradle build
#Confirmez que le fichier jar a été créé
docker exec -w /gradle-project/docker-app/build/libs boot-container ls
docker-app-0.0.1-SNAPSHOT.jar
#démarrage de démarrage
docker exec -w /gradle-project/docker-app/build/libs boot-container java -jar docker-app-0.0.1-SNAPSHOT.jar --spring.profiles.active=docker
* application.Le préfixe docker yml est utilisé pour séparer le traitement de démarrage dans l'environnement local et l'environnement du conteneur.
#Contrôle de fonctionnement
curl http://localhost:8080/docker/test
résultat[welcome to spring boot with docker]
#Conteneur vers le bas
docker-compose down
mysql empêche l'accès direct depuis le système d'exploitation hôte. Conteneur CentOS (serveur) comme tremplin (liens) Il fonctionne comme un réseau privé pour accéder au conteneur Mysql (serveur) à partir du conteneur CentOS.
Par conséquent, si vous souhaitez exploiter des données sur Mysql, vous devez accéder à Mysql depuis CentOS. Par conséquent, comme décrit dans le Dockerfile CentOS, mysql est également installé du côté centos.
Ci-dessous un exemple d'accès Mysql
#Démarrer le processus bash du conteneur CentOS
docker exec -it boot-container /bin/bash
#Connexion MySQL
mysql -u boot -p -h mysql
#Confirmation des données
mysql> use bootdb
mysql> select * from test;
+----+------------------------------------+
| id | data |
+----+------------------------------------+
| 1 | welcome to spring boot with docker |
+----+------------------------------------+
1 row in set (0.00 sec)
Lors du développement de liens de base de données tels que Spring Boot et Mysql Il est nécessaire d'installer chaque logiciel dans l'environnement local, Si vous gérez des conteneurs avec Docker, vous pouvez facilement créer un environnement de développement. J'ai également envisagé d'utiliser Docker pour le développement personnel.
Utilisez la fonction Volume de Docker pour conserver les données de la base de données Il est recommandé car il simplifie également la complexité de la gestion des projets Spring.
Si vous souhaitez vérifier les paramètres de Spring Boot, veuillez vous référer à github. github
Reference
https://blog.tiqwab.com/2017/03/21/docker-java.html [Manuel Docker pour les programmeurs](https://www.amazon.co.jp/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83% 9E% E3% 81% AE% E3% 81% 9F% E3% 82% 81% E3% 81% AEDocker% E6% 95% 99% E7% A7% 91% E6% 9B% B8-% E3% 82% A4 % E3% 83% B3% E3% 83% 95% E3% 83% A9% E3% 81% AE% E5% 9F% BA% E7% A4% 8E% E7% 9F% A5% E8% AD% 98% EF % BC% 86% E3% 82% B3% E3% 83% BC% E3% 83% 89% E3% 81% AB% E3% 82% 88% E3% 82% 8B% E7% 92% B0% E5% A2 % 83% E6% A7% 8B% E7% AF% 89% E3% 81% AE% E8% 87% AA% E5% 8B% 95% E5% 8C% 96-WINGS% E3% 83% 97% E3% 83 % AD% E3% 82% B8% E3% 82% A7% E3% 82% AF% E3% 83% 88% E9% 98% BF% E4% BD% 90% E5% BF% 97% E4% BF% 9D -ebook / dp / B017UGA7NG / ref = sr_1_2? __mk_ja_JP =% E3% 82% AB% E3% 82% BF% E3% 82% AB% E3% 83% 8A & crid = USOWDBYOQ865 & dchild = 1 & keywords =% E3% 83% 97% E3 % 83% AD% E3% 82% B0% E3% 83% A9% E3% 83% 9E% E3% 81% AE% E3% 81% 9F% E3% 82% 81% E3% 81% AEdocker% E6% 95 % 99% E7% A7% 91% E6% 9B% B8 & qid = 1601222075 & sprefix =% E3% 83% 97% E3% 83% AD% E3% 82% B0% E3% 83% A9% E3% 83% 9E% E3% 81% AE% E3% 81% 9F% E3% 82% 81% E3% 81% AEDocker% 2Caps% 2C250 & sr = 8-2)