├── .gitignore ├── Docker-Tutorial.pdf ├── LICENSE ├── README.md ├── chuletas ├── cheat-sheet-v2.pdf ├── docker-cheat-sheet.pdf └── docker_cheatsheet_r3v2.pdf ├── ejemplos ├── ejem01 │ ├── Dockerfile │ ├── run.sh │ └── src │ │ ├── index.html │ │ ├── otra.html │ │ └── prueba.php ├── ejem02 │ └── run.sh ├── ejem03 │ └── run.sh ├── ejem04 │ └── docker-compose.yaml ├── ejem05 │ └── src │ │ └── index.php ├── ejem06 │ ├── apache-php │ │ └── Dockerfile │ ├── docker-compose.yml │ ├── mariadb │ │ ├── Dockerfile │ │ └── sql │ │ │ └── init-db.sql │ └── src │ │ ├── index.php │ │ └── test.php ├── ejem07 │ ├── code │ │ └── myapp │ │ │ └── index.php │ ├── config │ │ ├── nginx │ │ │ └── myapp.conf │ │ └── php │ │ │ └── php.ini │ ├── docker │ │ ├── docker-compose.yml │ │ ├── mariadb │ │ │ └── mariadb.sh │ │ ├── nginx │ │ │ └── nginx.sh │ │ ├── php │ │ │ ├── Dockerfile │ │ │ └── php.sh │ │ ├── phpmyadmin │ │ │ └── phpmyadmin.sh │ │ └── run.sh │ └── mariadb │ │ └── sql │ │ └── init-db.sql ├── ejem08 │ ├── Dockerfile │ ├── run.sh │ └── src │ │ ├── index.html │ │ ├── otra.html │ │ └── prueba.php ├── ejem09 │ ├── docker-compose.yml │ ├── reverse │ │ ├── Dockerfile │ │ └── nginx.conf │ ├── site1 │ │ ├── Dockerfile │ │ └── src │ │ │ └── index.html │ └── site2 │ │ ├── Dockerfile │ │ └── src │ │ └── index.html ├── ejem10 │ ├── docker-compose.yml │ ├── site1 │ │ ├── Dockerfile │ │ └── src │ │ │ └── index.html │ └── site2 │ │ ├── Dockerfile │ │ └── src │ │ └── index.html ├── ejem11 │ └── gs-rest-service │ │ ├── .classpath │ │ ├── .dockerignore │ │ ├── .mvn │ │ └── wrapper │ │ │ ├── maven-wrapper.jar │ │ │ └── maven-wrapper.properties │ │ ├── .project │ │ ├── .settings │ │ ├── org.eclipse.core.resources.prefs │ │ ├── org.eclipse.jdt.apt.core.prefs │ │ ├── org.eclipse.jdt.core.prefs │ │ ├── org.eclipse.m2e.core.prefs │ │ └── org.springframework.ide.eclipse.prefs │ │ ├── Dockerfile │ │ ├── LICENSE.txt │ │ ├── LICENSE.writing.txt │ │ ├── README.md │ │ ├── manifest.yml │ │ ├── mvnw │ │ ├── mvnw.cmd │ │ ├── pom.xml │ │ └── src │ │ ├── main │ │ ├── java │ │ │ └── com │ │ │ │ └── example │ │ │ │ └── restservice │ │ │ │ ├── Greeting.java │ │ │ │ ├── GreetingController.java │ │ │ │ ├── RestServiceApplication.java │ │ │ │ └── config │ │ │ │ └── SpringFoxConfig.java │ │ └── resources │ │ │ └── static │ │ │ └── index.html │ │ └── test │ │ └── java │ │ └── com │ │ └── example │ │ └── restservice │ │ └── GreetingControllerTests.java ├── ejem12 │ └── dockervue │ │ ├── .browserslistrc │ │ ├── .editorconfig │ │ ├── .eslintrc.js │ │ ├── .gitignore │ │ ├── Dockerfile │ │ ├── README.md │ │ ├── babel.config.js │ │ ├── docker-compose.yml │ │ ├── package-lock.json │ │ ├── package.json │ │ ├── public │ │ ├── favicon.ico │ │ └── index.html │ │ ├── src │ │ ├── App.vue │ │ ├── assets │ │ │ ├── logo.png │ │ │ ├── vuedocker.jpg │ │ │ └── vuedocker.png │ │ ├── components │ │ │ └── HelloWorld.vue │ │ ├── main.ts │ │ └── shims-vue.d.ts │ │ └── tsconfig.json ├── ejem13 │ ├── docker-compose.yml │ └── ejem.txt ├── ejem14 │ └── docker-compose.yml └── ejem15 │ ├── Dockerfile │ └── firefox.sh └── updates ├── joseluisgs-03-2021.md ├── joseluisgs.md └── mamoreo.md /.gitignore: -------------------------------------------------------------------------------- 1 | *.pptx 2 | /libros/* 3 | /ejemplos/ejem02/wordpress/* 4 | /ejemplos/ejem03/wordpress/* 5 | /ejemplos/ejem04/wordpress/* 6 | /ejemplos/ejem07/mariadb/data/* 7 | /ejemplos/ejem07/logs/* 8 | -------------------------------------------------------------------------------- /Docker-Tutorial.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joseluisgs/docker-tutorial/20fad30f04c1797490d9ced1b9adefb91103647b/Docker-Tutorial.pdf -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 José Luis González 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # DOCKER Tutorial 2 | 3 | 2DAW Tutorial de Docker para el desarrollo avanzado de código. 4 | 5 |  6 | 7 |  8 | 9 | - [DOCKER Tutorial](#docker-tutorial) 10 | - [Acerca de](#acerca-de) 11 | - [Contenidos](#contenidos) 12 | - [Colaborar o nuevos contenidos o ejemplos](#colaborar-o-nuevos-contenidos-o-ejemplos) 13 | - [¿Cómo colaborar o corregir un cambio?](#cómo-colaborar-o-corregir-un-cambio) 14 | - [Autor](#autor) 15 | - [Contacto](#contacto) 16 | - [Licencia](#licencia) 17 | 18 | ## Acerca de 19 | 20 | Tutorial de Docker de supervivencia a 2DAW. Ejemplos usados en clase. 21 | Aprenderemos a manejar imagenes y contenedores y cómo aplicarlos para mejorar en el desarrollo de software. 22 | Siempre con el objetivo de poder crear un entorno que podamos comaprtir y facilitar el despliegue de nuestro proyecto. 23 | 24 | ## Contenidos 25 | - ¿Qué es Docker? 26 | - Instalación 27 | - Comandos básicos 28 | - Ejecutando contenedores 29 | - Dockerfile y nuestras imágenes 30 | - Persistencia de datos 31 | - Enlazando contenedores 32 | - Docker Compose 33 | - Docker Hub 34 | - Despliegue con Docker Hub y GitHub 35 | - Trucos y consejos 36 | - Optimización 37 | - Herramientas para Docker 38 | - Docker Swarm 39 | 40 | 41 | ## Colaborar o nuevos contenidos o ejemplos 42 | 43 | ### ¿Cómo colaborar o corregir un cambio? 44 | 45 | Para solicitar un cambio o ayudarme a pulir errores o a mejorar el contenido del curso y las transparencias lo podéis hacer de la siguiente manera: 46 | 47 | - Siempre debéis hacer un fork del proyecto para trabajar con él. 48 | - Lo primero es crear una rama con tu nombre de usuario de GitHub (vamos a ser ordenados) 49 | - En la carpeta updates de tu rama añadís un fichero con vuestro nombre de GitHub para que en dicho fichero vayáis actualizando con las cosas que queráis aportar. Este fichero debe estar redactado usando [markdown](https://www.markdownguide.org/basic-syntax/). 50 | - Indicáis el número de la página de la presentación (por ejemplo página 34). Indicáis el texto y remarcáis la palabra o error detectado. 51 | - De la misma manera si queréis incorporar un gráfico o figura lo indicáis en qué página, o si es nueva donde iría y subís ese recurso en la carpeta updates. 52 | - También podéis aportar referencias, herramientas y cosas útiles que os han servidor para dominar Git y GitHub. 53 | - Posteriormente hacéis un commit en vuestro repositorio y luego un pull request de los cambios indicados en tu rama y en la conversación me detallas algo de información y si el cambio se aprueba lo verás en la próxima versión Mira este [vídeo](https://www.youtube.com/watch?v=_M8oalUyz10) y este [otro](https://www.youtube.com/watch?v=QntLv5BjUr0). 54 | 55 | Gracias por colaborar y entre todos mejoramos usando GitHub. Espero vuestros pull requests :smile: 56 | 57 | ## Autor 58 | 59 | Codificado con :sparkling_heart: por [José Luis González Sánchez](https://twitter.com/joseluisgonsan) 60 | 61 | [](https://twitter.com/joseluisgonsan) 62 | [](https://github.com/joseluisgs) 63 | 64 | ### Contacto 65 |
66 | Cualquier cosa que necesites házmelo saber por si puedo ayudarte 💬. 67 |
68 |
69 |
70 |
72 |
73 |
74 |
76 |
77 |
78 |
80 |
81 |
82 |
84 |
85 |
Mi web ejecutada desde Docker :)
13 | 14 | 15 | -------------------------------------------------------------------------------- /ejemplos/ejem01/src/otra.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 |Otra web desde Docker :)
13 | 14 | 15 | -------------------------------------------------------------------------------- /ejemplos/ejem01/src/prueba.php: -------------------------------------------------------------------------------- 1 | Mi fichero PHP'); 3 | echo ('Mas info
'); 4 | echo ('Mas infoas
'); 5 | -------------------------------------------------------------------------------- /ejemplos/ejem02/run.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Creamos el contenedor para nuestra base de datos 4 | docker run -d --name wordpress-db \ 5 | --mount source=wordpress-db,target=/var/lib/mysql \ 6 | -e MYSQL_ROOT_PASSWORD=secret \ 7 | -e MYSQL_DATABASE=wordpress \ 8 | -e MYSQL_USER=manager \ 9 | -e MYSQL_PASSWORD=secret \ 10 | mariadb:10.3.9 11 | 12 | # Creamos el contenedor de WordPress 13 | docker run -d --name wordpress \ 14 | --link wordpress-db:mysql \ 15 | --mount type=bind,source="$(pwd)"/wordpress,target=/var/www/html \ 16 | -e WORDPRESS_DB_USER=manager \ 17 | -e WORDPRESS_DB_PASSWORD=secret \ 18 | -p 8080:80 \ 19 | wordpress:4.9.8 -------------------------------------------------------------------------------- /ejemplos/ejem03/run.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | mkdir wordpress 4 | 5 | # Creamos la red propia 6 | docker network create mi-network 7 | 8 | # Creamos el contenedor para nuestra base de datos 9 | docker run -d --name wordpress-db \ 10 | --net=mi-network \ 11 | --mount source=wordpress-db,target=/var/lib/mysql \ 12 | -e MYSQL_ROOT_PASSWORD=secret \ 13 | -e MYSQL_DATABASE=wordpress \ 14 | -e MYSQL_USER=manager \ 15 | -e MYSQL_PASSWORD=secret mariadb:10.3.9 16 | 17 | # Creamos el contenedor de WordPress 18 | docker run -d --name wordpress \ 19 | --net=mi-network \ 20 | --link wordpress-db:mysql \ 21 | --mount type=bind,source="$(pwd)"/wordpress,target=/var/www/html \ 22 | -e WORDPRESS_DB_USER=manager \ 23 | -e WORDPRESS_DB_PASSWORD=secret \ 24 | -p 8080:80 \ 25 | wordpress:4.9.8 26 | 27 | -------------------------------------------------------------------------------- /ejemplos/ejem04/docker-compose.yaml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | 3 | services: 4 | db: 5 | image: mariadb:10.3.9 6 | container_name: mariadb 7 | volumes: 8 | - data:/var/lib/mysql 9 | environment: 10 | - MYSQL_ROOT_PASSWORD=secret 11 | - MYSQL_DATABASE=wordpress 12 | - MYSQL_USER=manager 13 | - MYSQL_PASSWORD=secret 14 | web: 15 | image: wordpress:4.9.8 16 | container_name: wordpress 17 | depends_on: 18 | - db 19 | volumes: 20 | - ./wordpress:/var/www/html 21 | environment: 22 | - WORDPRESS_DB_USER=manager 23 | - WORDPRESS_DB_PASSWORD=secret 24 | - WORDPRESS_DB_HOST=db 25 | ports: 26 | - 8080:80 27 | 28 | volumes: 29 | data: 30 | -------------------------------------------------------------------------------- /ejemplos/ejem05/src/index.php: -------------------------------------------------------------------------------- 1 | Hola 2 DAW"; 3 | phpinfo(); 4 | -------------------------------------------------------------------------------- /ejemplos/ejem06/apache-php/Dockerfile: -------------------------------------------------------------------------------- 1 | # Apache + PHP + complementos 2 | FROM php:7.4-apache 3 | 4 | # Complementos, es importante que no nos pasemos con el run!! (cuanto más lineas peor, más lento) 5 | RUN docker-php-ext-install pdo pdo_mysql mysqli -------------------------------------------------------------------------------- /ejemplos/ejem06/docker-compose.yml: -------------------------------------------------------------------------------- 1 | # Indicamos la versión 2 | version: '3.7' 3 | 4 | # Iniciamos los servicios 5 | services: 6 | # Apache con PHP 7 | apache-php: 8 | build: ./apache-php 9 | container_name: apache-php-lamp 10 | ports: 11 | - 80:80 12 | volumes: 13 | - './src:/var/www/html' 14 | networks: 15 | - lamp-network 16 | 17 | # Maria DB 18 | mariadb: 19 | build: ./mariadb 20 | container_name: mariadb-lamp 21 | volumes: 22 | # - ./mariadb_data:/var/lib/mysql podríamos usar un directorio local llamado mariadb_data 23 | - mariadb-volume:/var/lib/mysql 24 | networks: 25 | - lamp-network 26 | 27 | # PHPMyAdmin 28 | phpmyadmin: 29 | image: phpmyadmin/phpmyadmin 30 | container_name: phpmyadmin-lamp 31 | links: 32 | - 'mariadb:db' 33 | ports: 34 | - 8081:80 35 | networks: 36 | - lamp-network 37 | 38 | volumes: 39 | mariadb-volume: 40 | 41 | networks: 42 | lamp-network: 43 | driver: bridge 44 | -------------------------------------------------------------------------------- /ejemplos/ejem06/mariadb/Dockerfile: -------------------------------------------------------------------------------- 1 | # MariaDB 2 | FROM mariadb:10.5 3 | 4 | # Configuramos BBDD 5 | ENV MYSQL_ROOT_PASSWORD 123 6 | ENV MYSQL_USER joseluis 7 | ENV MYSQL_PASSWORD 123 8 | ENV MYSQL_DATABASE testdb 9 | 10 | # Copiamos los ficheros sql para que se ejecuten 11 | COPY ./sql /docker-entrypoint-initdb.d/ -------------------------------------------------------------------------------- /ejemplos/ejem06/mariadb/sql/init-db.sql: -------------------------------------------------------------------------------- 1 | USE testdb; 2 | 3 | CREATE TABLE test ( 4 | nombre varchar(30), 5 | email varchar(50) 6 | ); 7 | 8 | INSERT INTO test (nombre, email) 9 | VALUES 10 | ('Jose Luis', 'joseluis@docker.com'), 11 | ('Soraya', 'soraya@docker.com'), 12 | ('Victor', 'victor@docker.com'); -------------------------------------------------------------------------------- /ejemplos/ejem06/src/index.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |Nombre | 19 |{$row['nombre']} | 39 |{$row['email']} | 40 | "; 41 | } 42 | 43 | mysqli_close($dbconn); 44 | ?> 45 | 46 | 47 |
---|