Accéder à MySQL sur un conteneur Docker à partir d'un programme Java local (OS hôte)

introduction

Ma pile technologique semble trop héritée et pathétique Je veux rompre avec l'oncle hérité et recommencer en tant qu'ingénieur J'ai commencé à étudier. Merci & # x1f600;

J'ai donc décidé d'étudier d'abord Docker.

Quoi construire (cet objectif)

Pour le moment, cette fois depuis mon propre programme Java sur le système d'exploitation hôte Défi d'accéder à la base de données sur le conteneur.

Les travaux de construction

1. Créer un conteneur Docker

Préparé en organisant légèrement docker-compose.yml sur la page d'explication de MySQL sur Docker Hub. Page MySQL DockerHub


# Use root/example as user/password credentials
version: '3.1'

services:

  db:
    image: mysql:8.0.21 #Changement
    command: --default-authentication-plugin=mysql_native_password
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: hoge #ajouter à
      MYSQL_USER: hoge     #ajouter à
      MYSQL_PASSWORD: hoge #ajouter à
    ports:                 #ajouter à
      - 3306:3306          #ajouter à

  adminer:
    image: adminer:latest
    restart: always
    ports:
      - 8080:8080

La partie avec # est la partie arrangement. J'ai senti que la version de l'image MySQL changerait si je spécifiais la dernière, j'ai donc spécifié 8.0.21. Cette fois, il est accessible de l'extérieur du conteneur, donc Ajoutez une base de données appropriée et définissez le port 3306 pour qu'il soit exposé à l'extérieur.

Dans le même dossier que le fichier de configuration ci-dessus Commencez par la commande docker-compose.

docker-compose up

Puisqu'il s'exécute au premier plan, tout en regardant le journal apparaître Vérifiez s'il est sur une autre console

docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                               NAMES
0c5d267f22ee        mysql:8.0.21        "docker-entrypoint.s…"   26 seconds ago      Up 25 seconds       0.0.0.0:3306->3306/tcp, 33060/tcp   mysql_db_1
258f5885810d        adminer:latest      "entrypoint.sh docke…"   26 seconds ago      Up 25 seconds       0.0.0.0:8080->8080/tcp              mysql_adminer_1

(´ ・ ω ・ `) Oh

2. Créez des tableaux et des données avec Adminer

L'administrateur semble être un client Web capable d'exploiter des bases de données créées avec PHP. Avec les conteneurs MySQL et Adminer en cours d'exécution http://localhost:8080/ Lorsque vous accédez, l'écran suivant apparaîtra Entrez la base de données et les informations utilisateur décrites dans docker-compose.yml précédemment. スクリーンショット 2020-09-16 025707.png

Puis avec une table appropriée comme celle-ci スクリーンショット 2020-09-16 030143.png

Insérez un enregistrement approprié comme celui-ci et la base de données est terminée. スクリーンショット 2020-09-16 030441.png

3. Création de programme Java

Tout d'abord, décrivez les dépendances du pilote MySQL dans gradle.


apply plugin: 'java'
apply plugin: 'application'
apply plugin: 'eclipse'

repositories {
    mavenCentral()}

dependencies {
	compile group: 'mysql', name: 'mysql-connector-java', version: '8.0.21'
    testImplementation 'junit:junit:4.12'
}

Créez ensuite une classe qui lance une requête SQL vers MySQL et affiche le résultat.

public class DockerMySQLAccessor {

	public static void main(String[] args) {

		System.out.println("Accéder à MySQL dans le conteneur Docker");

		try(Connection con = DriverManager.getConnection(
			    "jdbc:mysql://localhost:3306/hoge?useSSL=false",
			    "hoge", // UserId
			    "hoge"  // Password
			  )) {

			PreparedStatement pstmt = con.prepareStatement("select * from TEST_TBL");
			ResultSet rs = pstmt.executeQuery();

			while (rs.next()) {
				System.out.printf("ID:%d, HOGE:%s \n", rs.getInt("ID"), rs.getString("HOGE"));
			}

		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
}

4. Exécuter

Exécutez le code Java à partir d'Eclipse. スクリーンショット 2020-09-16 032059.png Vous pouvez obtenir le disque que vous venez de mettre! Je l'ai fait. (´ ・ ω ・ `) v

Résumé

Pour le moment, configurez facilement un serveur DB virtuel à l'aide de Docker, Il pouvait être consulté à partir d'un programme local.

Cette fois, c'est une touche Docker J'ai utilisé le docker-compose soudainement parce que les paramètres étaient presque complètement copiés. En fonctionnement réel, créez-vous un Dockerfile pour chaque conteneur et créez-vous une image? En outre, je souhaite exécuter le programme sur le conteneur et communiquer entre les conteneurs. Cette fois encore ici.

Merci

C'était une excellente référence pour mettre Docker dans Win10. Merci <(_ _)> Introduction à Docker par Legacy Engineer

Recommended Posts

Accéder à MySQL sur un conteneur Docker à partir d'un programme Java local (OS hôte)
Essayez Hello World en utilisant Java brut sur le conteneur Docker
[Docker] Comment accéder à l'hôte depuis l'intérieur du conteneur. http: //host.docker.internal:
Comment créer un serveur Jenkins avec un conteneur Docker sur CentOS 7 de VirtualBox et accéder au serveur Jenkins à partir d'un PC local
Accéder à Teradata depuis une application Java
Exécuter PureScript sur un conteneur Docker
Installez le plugin memcached sur MySQL et accédez à partir de Java
[Docker] Copie des fichiers du conteneur Docker vers l'hôte
Exécutez des applications x11 dans un conteneur Docker (prend en charge l'accès réseau à partir du conteneur)
Connectez-vous à Aurora (MySQL) depuis une application Java
Comment obtenir un heapdump à partir d'un conteneur Docker
Copier les fichiers du conteneur Docker vers l'hôte (docker cp)
Comment déployer à partir d'une image Docker locale vers Heroku
Utilisation de la base de données (SQL Server 2014) à partir d'un programme Java 04/01/2018
[Note] Créez un environnement Java à partir de zéro avec docker
Appeler un programme écrit en Swift depuis Processing (Java)
Création d'un environnement Java léger qui s'exécute sur Docker
Accédez à API.AI depuis Java
Création d'un hôte Docker sur AWS à l'aide de Docker Machine (mémorandum personnel)
Exécuter R à partir d'un processus Java optimisé par Tomcat sur Amazon Linux
Oracle Java 8 sur Docker Ubuntu
Utilisation de Docker depuis Java Gradle
Accédez à la grille de données en mémoire Apache Ignite à partir d'un client Java