En este ejercicio se interactua con la BBDD.
- Crear un directorio para almacenar los archivos de MySQL:
mkdir mysql_data
- Ejecutar el siguiente comando para crear y ejecutar el contenedor de MySQL:
docker run -d \
--name my-mysql \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=123456 \
-v ./mysql_data:/var/lib/mysql \
mysql:latest
Explicación de las opciones utilizadas:
-d
ejecuta el contenedor en segundo plano.--name
asigna un nombre al contenedor, en este caso "mysql-container".-p
asigna el puerto del host al puerto del contenedor, en este caso el puerto 3306.-e
establece una variable de entorno, en este caso la contraseña de root de MySQL.-v
monta el directorio/ruta/a/tu/mysql_data
en el directorio/var/lib/mysql
dentro del contenedor.mysql:latest
especifica la imagen que se usará para crear el contenedor.
- Verificar que el contenedor se esté ejecutando correctamente:
docker ps
Deberías ver una salida similar a la siguiente:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
48a1af3d3c8e mysql:latest "docker-entrypoint.s…" 10 seconds ago Up 9 seconds 0.0.0.0:3306->3306/tcp mysql-container
Si ves la columna STATUS como "Up", significa que el contenedor se está ejecutando correctamente.
¡Listo! Ahora tienes un contenedor de MySQL en ejecución y listo para ser utilizado, el cual está montando un directorio para almacenar los archivos de datos y exponiendo el puerto 3306 al host.
- Para conectarte al contenedor de MySQL y crear la base de datos y las tablas, puedes seguir los siguientes pasos:
- Conéctate al contenedor utilizando el siguiente comando:
docker exec -it mysql-container mysql -u root -p
Esto iniciará una sesión interactiva en el contenedor y te pedirá la contraseña que especificaste al crear el contenedor (en este ejemplo, 123456
).
2. Crea la base de datos store
utilizando el siguiente comando:
CREATE DATABASE store;
- Selecciona la base de datos
store
:
USE store;
- Crea la tabla
book
con los siguientes atributos:
CREATE TABLE book (
book_id INT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
release_date DATE NOT NULL,
quantity INT NOT NULL,
price DECIMAL(10,2) NOT NULL
);
- Crea la tabla
author
con los siguientes atributos:
CREATE TABLE author (
author_id INT PRIMARY KEY,
first_name VARCHAR(255) NOT NULL,
last_name VARCHAR(255) NOT NULL,
birth_date DATE NOT NULL
);
- Crea la tabla
book_author
que relaciona la tablabook
y la tablaauthor
:
CREATE TABLE book_author (
book_id INT NOT NULL,
author_id INT NOT NULL,
PRIMARY KEY (book_id, author_id),
FOREIGN KEY (book_id) REFERENCES book(book_id),
FOREIGN KEY (author_id) REFERENCES author(author_id)
);
¡Listo! Ahora tienes una base de datos store
con tres tablas: book
, author
y book_author
.
Para llenar las tablas book
, author
y book_author
con algunos ejemplos, puedes seguir los siguientes pasos:
- Conéctate al contenedor utilizando el siguiente comando:
docker exec -it mysql-container mysql -u root -p
Esto iniciará una sesión interactiva en el contenedor y te pedirá la contraseña que especificaste al crear el contenedor (en este ejemplo, secretpassword
).
2. Selecciona la base de datos store
:
USE store;
- Inserta algunos datos en la tabla
book
. En este ejemplo, insertaremos 10 libros:
INSERT INTO book (book_id, name, release_date, quantity, price) VALUES
(1, 'The Catcher in the Rye', '1951-07-16', 5, 10.99),
(2, 'To Kill a Mockingbird', '1960-07-11', 8, 12.99),
(3, '1984', '1949-06-08', 3, 15.99),
(4, 'The Great Gatsby', '1925-04-10', 2, 9.99),
(5, 'One Hundred Years of Solitude', '1967-05-30', 6, 11.99),
(6, 'Beloved', '1987-09-02', 4, 14.99),
(7, 'Brave New World', '1932-06-18', 7, 13.99),
(8, 'Slaughterhouse-Five', '1969-03-31', 9, 12.99),
(9, 'The Grapes of Wrath', '1939-04-14', 3, 11.99),
(10, 'For Whom the Bell Tolls', '1940-10-21', 1, 17.99);
- Inserta algunos datos en la tabla
author
. En este ejemplo, insertaremos 6 autores:
INSERT INTO author (author_id, first_name, last_name, birth_date) VALUES
(1, 'J.D.', 'Salinger', '1919-01-01'),
(2, 'Harper', 'Lee', '1926-04-28'),
(3, 'George', 'Orwell', '1903-06-25'),
(4, 'F. Scott', 'Fitzgerald', '1896-09-24'),
(5, 'Gabriel', 'García Márquez', '1927-03-06'),
(6, 'Toni', 'Morrison', '1931-02-18');
- Inserta algunos datos en la tabla
book_author
. En este ejemplo, relacionaremos algunos autores con los libros insertados anteriormente:
INSERT INTO book_author (book_id, author_id) VALUES
(1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6), (7, 3), (8, 1), (9, 4), (10, 1),
(1, 2), (2, 3), (3, 1), (4, 1), (5, 6), (6, 5), (7, 4), (8, 2), (9, 5), (10, 4), (10, 2);
Con esto, hemos insertado algunos datos de ejemplo en las tablas book
, author
y book_author
para tener 10 libros con varios autores asociados. Ahora puedes verificar que los datos se hayan insertado correctamente ejecutando consultas SELECT en cada una de las tablas. Por ejemplo:
SELECT * FROM book;
Debería mostrar una salida similar a la siguiente:
+---------+---------------------------+--------------+----------+-------+
| book_id | name | release_date | quantity | price |
+---------+---------------------------+--------------+----------+-------+
| 1 | The Catcher in the Rye | 1951-07-16 | 5 | 10.99 |
| 2 | To Kill a Mockingbird | 1960-07-11 | 8 | 12.99 |
| 3 | 1984 | 1949-06-08 | 3 | 15.99 |
| 4 | The Great Gatsby | 1925-04-10 | 2 | 9.99 |
| 5 | One Hundred Years of Solitude | 1967-05-30 | 6 | 11.99 |
| 6 | Beloved | 1987-09-02 | 4 | 14.99 |
| 7 | Brave New World | 1932-06-18 | 7 | 13.99 |
| 8 | Slaughterhouse-Five | 1969-03-31 | 9 | 12.99 |
| 9 | The Grapes of Wrath | 1939-04-14 | 3 | 11.99 |
| 10 | For Whom the Bell Tolls | 1940-10-21 | 1 | 17.99 |
+---------+---------------------------+--------------+----------+-------+