Skip to content

Instantly share code, notes, and snippets.

@VictorJSV
Created August 29, 2018 22:59
Show Gist options
  • Save VictorJSV/3424023adc4d5f015d2136841c9e1830 to your computer and use it in GitHub Desktop.
Save VictorJSV/3424023adc4d5f015d2136841c9e1830 to your computer and use it in GitHub Desktop.

Ejercicio Git, Docker, Bash

Paso 1

1. Instalar git y docker en la PC

Luego de instalar, comprobar las versiones de git y docker.

Preguntas: ¿Qué es y para qué sirve GIT? ¿Cómo se instala?

2. Configurar Git

Configurar nombre e email con el usuario de la maquina.

3. Crear un repositorio en github

El nombre del repo debe ser capacitacion-problema1 En caso de que uno del equipo no tenga una cuenta en github, entonces crearla.

Preguntas: ¿Que es Github o bitbucket?

4. Clonar repositorio creado (configurar ssh)

Al clonar un repositorio de git o bitbucket posiblemente pida un permiso y si no se ha configurado puede que salga este error:

$ git clone [email protected]:VictorJSV/capacitacion-problema1.git
Cloning into 'capacitacion-problema1'...
The authenticity of host 'github.com (192.30.253.113)' can't be established.

Por lo tanto se debe Generar la llave SSH $ ssh-keygen Luego de configurar la llave SSH en Github, clonar el proyecto.

Preguntas: ¿Qué es y para qué sirve el SSH? ¿Cómo genero una llave SSH? ¿Cómo agrego la llave a la cuenta de Github o bitbucket? ¿Que pasa si cambio de PC? ¿Tendré que generar el SSH nuevamente?

5. Crear un archivo README.md

Su contenido será:

# Ejercicio 1
Capacitación: Git, bash y docker
Integrantes:
- [Nombre del primer miembro]
- [Nombre del segundo miembro]

Preguntas: ¿Qué es markdown? ¿Donde puedo encontrar una guia para crear un markdown?

6. Crear un commit (new feature) con el estandar de Angular

El nombre del commit es segun a su criterio. Guia del estandar de angular

7. Integrar los cambios al repositorio remoto

Verificar que en el repositorio de Github esté el commit y el archivo README.md


Comandos aplicados:

$ comandos de instalacion de git y docker
$ git -v
$ docker -v
$ ssh-keygen
$ git clone
$ git status
$ git add .
$ git commit -m ""
$ git push

Paso 2

Ubicarte 2 commits atras en le tiempo e imprimir pantalla del arbol de git Agrega documentacion de como correr la imagen de docker en el Readme.md Hacer pull en el repositorio (Si sale error, no mesclar los cambios) Hacer stash de los cambio pendientes Volver al estado actual de la rama (pull) Aplicar los cambios pendientes Integrar los cambios a la rama remota como un nuevio feature

Paso 3

1. Crear una cuenta en docker Hub en caso de no tenerla

Es necesario, ya que la imagen creada se subirá a dockerhub

2. Crear una imagen Docker en base a alpine:latest

  • La imagen está almacenada en Docker Hub y debe ser la oficial.
  • Al construir la imagen se debe llamar [nombre-del-usuario]/alpine-capacitacion-problema1 y su respectiva versión 0.0.1
  • Verificar que la imagen alpine y alpine-capacitacion-problema1 esté en el listado de imagenes locales.

Preguntas: ¿Qué es y para qué sirve docker? ¿Qué es alpine? ¿Porqué debo anteponer el nombre de usuario en una imagen docker nueva? ¿Que pasa si no especifico la versión 0.0.1, cómo se crea?

3. Subir la imagen de docker al dockerhub

  • Para esto se debe identificar el nombre de usuario.
  • Si al hacer push sale un error como denied: requested access to the resource is denied, quiere decir de que no te has logueado con tu usuario y contraseña.
  • Verificar que el dockerhub de tu cuenta esté la imagen que acabas de subir.

Preguntas: ¿Que pasa si no tengo internet y quiero subir a dockerhub? ¿Es necesario loguearse cada vez que subo una imagen a dockerhub?

4. Crear una copia de la imagen con el tag 0.0.2 usando docker tag

  • Una vez creado, se debe subir al dockerhub.
  • Verificar que en la pestaña Tags en dockerhub esten las dos versiones (0.0.1 y 0.0.2).

5. Subir los cambios a github y crear un tag de git con la version de tu proyecto

  • Para esto es recomendable usar el estandar de versionado
  • Verificar que el tag se muestre en github.

Preguntas: ¿Qué de importancia tiene los tags en un proyecto? ¿Cuál es la diferencia entre un tag normal y un tag anotado? ¿Cómo se lista todos los tag en un proyecto? ¿Cómo se sube todos los tags que tengo en mi local?


Comandos aplicados:

$ docker build -t victorjsv/alpine-capacitacion-problema1:0.0.1 .
$ docker images
$ docker login ...
$ docker push ...
$ docker tag ...
$ git tag <tagname>
$ git tag
$ git push origin <tag>
$ git push origin --tags

Crear git tag (stackoverflow)

Paso 4

1. Listar las carpetas que hay dentro de una imagen

  • Para esto es necesario crear un contenedor en base a la imagen [nombre-usuario]/alpine-capacitacion-problema1:0.0.2

Preguntas: ¿Cuál es la diferencia entre una imagen y un contenedor? ¿Cómo listo las imagenes que hay en mi computadora? ¿Cómo salgo de un contenedor de docker? ¿Se elimina el contenedor al salir de ella? ¿Cómo elimino un contenedor? ¿Para que es necesario el flag -i -t --rm?

Respuesta

$ docker run -it victorjsv/alpine-capacitacion-problema1:0.0.2 sh
## Dentro de la imagen
/ # ls
app    bin    dev    etc    home   lib    media  mnt    proc   root   run    sbin   srv    sys    tmp    usr    var

2. Revisar que el contenedor creado no esté en la lista de contenedores

  • En caso de que el contenedor esté, entonces aliminarlo.

Respuesta

$ docker ps
$ docker rm -f <CONTAINER_ID>
$ docker ps

3. Copiar el archivo README.md en la imagen

  • Usar la imagen [nombre-usuario]/alpine-capacitacion-problema1:0.0.2
  • Dentro de la imagen se debe crear una carpeta llamada app en la ruta base / y luego copiar el archivo README.md en dicha carpeta

Preguntas: ¿Para qué sirve el caracter ~, alias colita de chancho? ¿Cómo verifico que el archivo creado se encuentra en la imagen? ¿Cómo se comenta una linea de código en Dockerfile?

Respuesta

FROM alpine:latest
RUN mkdir /app
COPY README.md app/README.md
$ docker build -t victorjsv/alpine-capacitacion-problema1:0.0.2 .

4. Verificar que la carpeta exista en la imagen

  • Para esto es necesario verificar en un contenedor
  • El contenedor debe ser creado en modo interactivo y una vez que salgas del contenedor automaticamente se debe eliminar (no usar docker rm en consola)

Respuesta

$ docker run -it --rm victorjsv/alpine-capacitacion-problema1:0.0.2 sh
## Dentro de la imagen
/# ls
/# cd app/
/app# ls
README.md
/# exit

5. Subir los cambios como un nuevo feature

Respuesta

$ git add .
$ git commit -m "feat(app): se agrega readme.m a la imagen"
$ git push origin master

6. Al construir la imagen, listar los archivos del directorio /app

Respuesta

FROM alpine:latest
RUN mkdir /app
COPY README.md app/README.md
RUN ls /app
$ docker build -t victorjsv/alpine-capacitacion-problema1:0.0.2 .
$ docker build --no-cache -it --rm victorjsv/alpine-capacitacion-problema1:0.0.2 .

7. Adicionalmente, al construir la imagen, mostrar el contenido del archivo README.md

Respuesta

FROM alpine:latest
RUN mkdir /app
COPY README.md app/README.md
RUN ls /app
RUN cat app/README.md
$ docker build --no-cache -t victorjsv/alpine-capacitacion-problema1:0.0.2 .

8. Subir los cambios como un nuevo feature

Respuesta

$ git tag 0.1.0
$ git push origin 0.1.0
$ docker push victorjsv/alpine-capacitacion-problema1:0.1.0

Comandos aplicados:

$ docker run ...
$ docker build ...
$ cd ..
$ cd <ruta> 
$ ls
$ git add . && git commit -m "" && git push
$ cat ...

Paso 5

1. Reemplazar la imagen alpine por nginx:alpine y exponer el puerto 3010

Preguntas: ¿Qué es NGINX? ¿Cómo expongo puertos en docker?

Respuesta

FROM nginx:alpine
RUN mkdir /app
COPY README.md app/README.md
RUN ls /app
RUN cat app/README.md
EXPOSE 3010
$ docker build -t victorjsv/alpine-capacitacion-problema1:0.1.1 .

2. Correr la imagen exponiendo el puerto 3010

  • Una vez levantado el contenedor, tenemos que entrar a la ruta http://localhost:3010/
  • Si no muestra nada, entonces ¡No te asustes!
    • Lo que sucede es que el servidor ngnix corre con el puerto 80 y no con el puerto que hemos puesto (3010). Para solucionar este problema continuemos el siguiente paso.

Preguntas: ¿Cómo especifico los puertos al levantar un contenedor?

Respuesta

$ docker run -it --rm -p 3010:3010 victorjsv/alpine-capacitacion-problema1:0.1.1

3. Cambiar el puerto expuesto por el puerto 80

  • Al levantar el contenedor debemos enmascarar el puerto 80 como el puerto 1080
  • Una vez cambiado el puerto, tenemos que entrar a la ruta http://localhost:1080/ y veremos una pagina que nos dice: Welcome to nginx!

Preguntas: ¿Cómo enmascaro un puerto al levantar un contenedor?

Respuesta

$ docker run -it --rm -p 1080:80 victorjsv/alpine-capacitacion-problema1:0.1.1

4. Subir los cambios como una correccion (estandar angular)

Respuesta

$ git add .
$ git commit -m "fix(app): se modifica imagen base de docker"
$ git push origin master
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment