- Git:
- Docker:
Luego de instalar, comprobar las versiones de git y docker.
Preguntas: ¿Qué es y para qué sirve GIT? ¿Cómo se instala?
Configurar nombre e email con el usuario de la maquina.
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?
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?
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?
El nombre del commit es segun a su criterio. Guia del estandar de angular
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
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
Es necesario, ya que la imagen creada se subirá a dockerhub
- 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ón0.0.1
- Verificar que la imagen
alpine
yalpine-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?
- 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?
- Una vez creado, se debe subir al dockerhub.
- Verificar que en la pestaña
Tags
endockerhub
esten las dos versiones (0.0.1
y0.0.2
).
- Para esto es recomendable usar el estandar de versionado
- Verificar que el
tag
se muestre engithub
.
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
- 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
- En caso de que el contenedor esté, entonces aliminarlo.
Respuesta
$ docker ps
$ docker rm -f <CONTAINER_ID>
$ docker ps
- 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 archivoREADME.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 .
- 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
Respuesta
$ git add .
$ git commit -m "feat(app): se agrega readme.m a la imagen"
$ git push origin master
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 .
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 .
- Se debe agregar tag de git y de imagen
- Aumentar una version al
minor version
versionado semantico
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 ...
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 .
- 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 puerto80
y no con el puerto que hemos puesto (3010
). Para solucionar este problema continuemos el siguiente paso.
- Lo que sucede es que el servidor
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
- Al levantar el contenedor debemos enmascarar el puerto
80
como el puerto1080
- 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
Respuesta
$ git add .
$ git commit -m "fix(app): se modifica imagen base de docker"
$ git push origin master