# ¿Qué es docker? Docker es una plataforma de software que le permite crear, probar e implementar aplicaciones rápidamente. **Docker empaqueta software en unidades estandarizadas llamadas contenedores que incluyen todo lo necesario para que el software se ejecute, incluidas bibliotecas, herramientas de sistema, código y tiempo de ejecución.** ![docker](imags/docker-engine-1.png) # Instalar docker La instalación de docker puede realizarse de forma sencilla descargando docker desktop en el sitio web de [docker](https://www.docker.com/products/docker-desktop/). Alternativamente puede instalar docker mediante línea de comandos con este tutorial de DigitalOcean: [link](https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-on-ubuntu-20-04) Una vez instalado docker asegurese de tener el docker-daemon corriendo en su sistema ya sea windows (ejecutar docker desktop) o linux (sudo systemctl start docker). Las siguientes secciones de la guía muestran varios de los comandos que pueden utilizar en docker, para lograr trabajar con liteX, los mismos también se ejemplifican en esta [video guia](https://estudianteccr-my.sharepoint.com/:v:/g/personal/dani1010_estudiantec_cr/Ebsn6RaObZ9Bq-B29HjKaKkBbvADmG1iqbCMvKupfrX2UA?e=K6fguD) la cual muestra como descargar y utilizar docker en windows con powershell. # Descargar la imagen con liteX instalado La imagen se encuentra en docker hub, esta puede ser descargada de forma sencilla con el comando `docker pull`. ```bash docker pull danielg1010/ubuntu-litex-1 ``` Una vez lo tenga puede verificar que tiene la imagen disponible en su repositorio local de docker con: ```bash docker images ``` # Correr la imagen de docker (contenedor) Al correr la imagen con `docker run` se genera una instancia de la imagen, la cual es un contenedor, esto es así ya que pueden haber muchas instancias de una misma imagen corriendo, y cada uno de esos es un contenedor. ```bash docker run -it danielg1010/ubuntu-litex-1 ``` ![images-containers](imags/docker_imagenes_contenedores.png) Una vez lo tenga corriendo la terminal luce así: ```bash root@6537107f37ce:/ ``` Puede usar `cd` para ir al directorio `root`, allí se encuentra una carpeta llamada `liteX`, la ruta de liteX es: `/root/litex`. El contenedor tiene instalado `vim` como editor de texto, puede instalar cualquier otro editor de su preferencia con `apt install`, sin embargo, todo lo que haga en el contenedor solo se mantiene para ese contenedor. # Corriendo un contenedor ya creado Cuando usted crea un contenedor a partir de una imagen esa instancia del contenedor aparece con el comando `docker ps` si está corriendo, si no, aparecerá en el historial con `dockerps -a` en este historial usted puede tomar el id del contenedor. Esta instancia guarda lo que usted haya hecho dentro del contenedor. Puede reactivar una instancia de un contenedor realizando los siguientes pasos: #### Tomar el `CONTAINER ID` con `docker ps -a` ```bash $ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6537107f37ce danielg1010/ubuntu-litex-1:v1 "/bin/bash" 7 days ago Exited (0) About a minute ago heuristic_euler ``` #### Iniciar el contenedor en el background con `docker start CONTAINER ID` y verificar con `docker ps` que el mismo está corriendo. ```bash $ docker start 6537107f37ce 6537107f37ce $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6537107f37ce danielg1010/ubuntu-litex-1 "/bin/bash" 7 days ago Up 8 seconds heuristic_euler ``` #### Conectarse a la terminal del contenedor con `docker attach CONTAINER ID` ```bash $ docker attach 6537107f37ce root@6537107f37ce:/# ``` # Como compartir archivos del sistema con un contenedor En este ejemplo con el flag `-v` vamos a compartir el directorio `/home/daniel/arqui/lab1` con el contenedor de docker como `/root/lab1`: ```bash $ docker run -it -v /home/daniel/arqui/lab1:/root/lab1 danielg1010/ubuntu-litex-1:v1 root@91e2c24e1916:/# cd root@91e2c24e1916:~# ls lab1 litex root@91e2c24e1916:~# ``` Los cambios que haga ya sea desde su sistema o desde el contenedor son compartidos.