Primers passos amb docker
Contingut
Introducció
(TBD, curs GDS)
Instal·lació de docker a Linux
- Curs_GDS_(Dani_Arribas)#Instal.C2.B7laci.C3.B3_Docker_per_seguir_el_curs_de_GDS
- https://linuxhint.com/install_docker_linux_mint/
$ sudo apt-get update $ sudo apt-get install \ apt-transport-https \ ca-certificates \ curl \ gnupg-agent \ software-properties-common
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - $ sudo apt-key fingerprint 0EBFCD88
$ lsb_release -cs ulyana -> ulyana a linux mint és equivalent a focal a Ubuntu
Descarrego els debs necessaris:
containerd.io_1.4.9-1_amd64.deb docker-ce-cli_19.03.10~3-0~ubuntu-focal_amd64.deb docker-ce_19.03.10~3-0~ubuntu-focal_amd64.deb $ sudo dpkg -i *
$ sudo docker run hello-world Unable to find image 'hello-world:latest' locally latest: Pulling from library/hello-world 2db29710123e: Pull complete Digest: sha256:37a0b92b08d4919615c3ee023f7ddb068d12b8387475d64c622ac30f45c29c51 Status: Downloaded newer image for hello-world:latest Hello from Docker! This message shows that your installation appears to be working correctly. ... ---
Poder executar sense sudo:
$ sudo groupadd docker (ja existeix) $ sudo usermod -aG docker $USER
(necessari tancar la sessió)
Ús bàsic de docker
https://www.linux.com/training-tutorials/how-create-docker-image/ https://hub.docker.com/ ID: joanillo (fa el paper de username) joanqc@gmail.com / S*******44 $ sudo docker login You should just set your timezone BEFORE installing of tzdata: $ sudo docker build -t apache . triga molt de temps (es queda penjat) quan demana el timezone. Per saltar aquest pas: *https://askubuntu.com/questions/909277/avoiding-user-interaction-with-tzdata-when-installing-certbot-in-a-docker-contai # Set timezone: RUN ln -snf /usr/share/zoneinfo/$CONTAINER_TIMEZONE /etc/localtime && echo $CONTAINER_TIMEZONE > /etc/timezone ... ---> Running in d6db9c2de751 Removing intermediate container d6db9c2de751 ---> 551b4092b0be Successfully built 551b4092b0be Successfully tagged apache:latest Now let’s run the server: $ docker run -d apache a1cc4cd11320075a7ba280170a57c19ce9014a46b7d8cff2bbdabb2bd837f607 però no va bé perquè fa un exit automàtic $ sudo docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 953f000ee3b6 ea0cf22c184d "/usr/sbin/apache2 -…" 3 minutes ago Exited (1) 3 minutes ago happy_blackburn ... $ sudo docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE apache latest 551b4092b0be 3 minutes ago 186MB ... per tal de què funcioni: $ sudo docker run -t -i -d apache /bin/bash $ sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 90249591a657 apache "/bin/bash" 22 seconds ago Up 21 seconds 80/tcp musing_mestorf You can kill the container with the docker kill command: $ docker kill 90249591a657 Ara ja sé fer un docker amb Apache, però això no em serveix per servir pàgines web... *https://hub.docker.com/_/httpd $ mkdir apache_meu joan@HP:~/dockerprojects$ cd apache_meu/ $ sudo docker build -t apache_meu . $ sudo docker run -dit --name el_meu_apache -p 8080:80 -d apache_meu /bin/bash d8cf69bd6d17bb9cd87178724e323ebf01adc02a2aa02186848c5accb078b836 $ sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d8cf69bd6d17 apache_meu "/bin/bash" 18 seconds ago Up 17 seconds 0.0.0.0:8080->80/tcp el_meu_apache finalment el que sí ha funcionat és: *https://hub.docker.com/_/httpd (tot i que he hagut de comentar el COPY) $ docker build -t my-apache2 . $ docker run -dit --name my-running-app -p 8080:80 my-apache2
Pujar un docker a dockerhub
https://www.linuxnix.com/how-to-push-an-image-to-docker-hub/ $ sudo docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE apache latest 88cf71135dc2 30 minutes ago 186MB apache_meu latest 88cf71135dc2 30 minutes ago 186MB httpd 2.4 30287d899656 6 days ago 138MB my-apache2 latest 30287d899656 6 days ago 138MB dockp latest 9873176a8ff5 12 days ago 72.7MB ubuntu latest 9873176a8ff5 12 days ago 72.7MB hello-world latest d1165f221234 3 months ago 13.3kB darribas/gds 5.0 2d37947f8674 11 months ago 7.89GB sudo docker tag 30287d899656 joanillo/apache-server:v1 $ sudo docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE ... joanillo/apache-server v1 30287d899656 6 days ago 138MB ... $ sudo docker push joanillo/apache-server:v1 The push refers to repository [docker.io/joanillo/apache-server] dfd488a286c9: Mounted from library/httpd 15176fdb9a61: Mounted from library/httpd 61172cb5065c: Mounted from library/httpd 9fbbeddcc4e4: Mounted from library/httpd 764055ebc9a7: Mounted from library/httpd v1: digest: sha256:9d1304c0f9d348940fbc9f554e0b58ad6ef90ab6db474bb6ea1fe6991b354243 size: 1366 Ara que ja hem fet el push volem verificar si la imatge que tenim penjada la podem fer servir. primer de tot l'esborrem en local $ sudo docker image rm 30287d899656 $ sudo docker image ls ja no hi és $ sudo docker pull joanillo/apache-server:v1 v1: Pulling from joanillo/apache-server b4d181a07f80: Already exists 4b72f5187e6e: Already exists 12b2c44d04b2: Already exists ef481fc2a03a: Already exists d483d945fcab: Already exists Digest: sha256:9d1304c0f9d348940fbc9f554e0b58ad6ef90ab6db474bb6ea1fe6991b354243 Status: Downloaded newer image for joanillo/apache-server:v1 docker.io/joanillo/apache-server:v1 $ sudo docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE ... joanillo/apache-server v1 30287d899656 6 days ago 138MB ... i ara que ja me l'he descarregat, el puc arrecncar per fer-lo servir $ sudo docker run -dit --name my-running-app2 -p 8080:80 joanillo/apache-server:v1 a5b8a2cbc8fce8d053c4b88ad48ccea22e1df536afbe3110f3691046817b67cf $ sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a5b8a2cbc8fc joanillo/apache-server:v1 "httpd-foreground" 29 seconds ago Up 27 seconds 0.0.0.0:8080->80/tcp my-running-app2 i ho provo en el navegador: localhost:8080 si entro a https://hub.docker.com/ puc veure el meu docker: *https://hub.docker.com/r/joanillo/apache-server
Utilitzar el docker creat a Windows 10
Hem creat un docker molt simple (un servidor Apache pel port 8080 que només mostra It Works). L'hem creat des d'una màquina Linux, i hem penjat la imatge al núvol, al Hub. Ara volem utilitzar aquest docker des d'una màquina Windows.
- https://www.simplilearn.com/tutorials/docker-tutorial/install-docker-on-windows
- https://docs.docker.com/docker-for-windows/install/
Instal·lo el Docker Desktop 3.5.2
Hem de reiniciar l'ordinador. Arrenco el Docker Desktop, i protesta perquè la instal·lació de WSL2 és incompleta. Seguir les instruccions. Senzillament es tracta d'instal·lar el paquet d'actualització wsl_update_x64.msi
The Windows Subsystem for Linux (WSL) is a way to run a full Linux environment on your Windows machine, without having to install a "heavier" virtual machine, such as Virtual Box, VM Ware, or Hyper-V. WSL 2 also provides a mechanism for running Docker (with Linux containers) on your Windows machine. We'll install it as a prerequisite for Docker Desktop for Windows
A Windows obrim un terminal (és el cmd), i descarreguem el nostre docker que vam penjar:
C:\Users\rviap>docker pull joanillo/apache-server:v1 v1: Pulling from joanillo/apache-server b4d181a07f80: Pull complete 4b72f5187e6e: Pull complete 12b2c44d04b2: Pull complete ef481fc2a03a: Pull complete d483d945fcab: Pull complete Digest: sha256:9d1304c0f9d348940fbc9f554e0b58ad6ef90ab6db474bb6ea1fe6991b354243 Status: Downloaded newer image for joanillo/apache-server:v1 docker.io/joanillo/apache-server:v1
Si ara obrim el Docker Desktop ja el veuré, que està funcionant. Aquest docker el puc apagar, reiniciar, fins i tot esborrar. Aquestes accions les podré fer des de la línia de comandes, o des de la interfícies gràfica del Desktop.
Obrim un navegador web i http://localhost:8080 puc veure el meu Apache Server funcionant.
A partir d'aquí es poden fer coses més complicades.
Docker sense sudo
Use Docker as a non-privileged user, or install in rootless mode?
The installation script requires root or sudo privileges to install and use Docker. If you want to grant non-root users access to Docker, refer to the post-installation steps for Linux. Docker can also be installed without root privileges, or configured to run in rootless mode. For instructions on running Docker in rootless mode, refer to run the Docker daemon as a non-root user (rootless mode).
$ sudo groupadd docker (ja existeix) $ sudo usermod -aG docker $USER
Log out and log back in so that your group membership is re-evaluated (tancar la sessió X i tornar a entrar). Ara ja puc utilitzar docker sense sudo.
Docker bàsic, línia de comanda Linux
$ cd dockerprojects
(repository name must be lowercase)
En el fitxer Dockerfile senzillament tinc:
FROM ubuntu
$ sudo docker build -t dam_m02_v0 . Sending build context to Docker daemon 10.75kB Step 1/1 : FROM ubuntu ---> 9873176a8ff5 Successfully built 9873176a8ff5 Successfully tagged dam_m02_v0:latest $ docker run -d dam_m02_v0 $ sudo docker run -d dam_m02_v0 ed879fd2ea1a88e5fcfb7d44e816f9df803e7f379b1f4539c5716fa8a8d4122f $ sudo docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES ed879fd2ea1a dam_m02_v0 "bash" About a minute ago Exited (0) About a minute ago strange_varahamihira $ sudo docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE ... dam_m02_v0 latest 9873176a8ff5 5 weeks ago 72.7MB
per tal de què funcioni:
$ sudo docker run -t -i -d dam_m02_v0 /bin/bash $ sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6cc8158ec1c7 dam_m02_v0 "/bin/bash" 22 seconds ago Up 20 seconds charming_wescoff
Per apagar-lo:
$ sudo docker kill 6cc8158ec1c7
De fet per apagar-lo millor fer stop:
$ sudo docker stop 6cc8158ec1c7
Però així no l'eliminem. Per eliminar-lo:
$ sudo docker rm 6cc8158ec1c7
$ sudo docker run -dit -d dam_m02_v0 /bin/bash docker exec -it dam_m02_v0 bash docker exec -t -i dam_m02_v0 /bin/bash
Per entrar dins del docker:
$ sudo docker exec -t -i 8c7535c45e10 /bin/bash root@8c7535c45e10:/#
i per sortir:
root@8c7535c45e10:/# exit $
I ara l'esborrem:
sudo docker image rm 30287d899656
La manera d'esborrar un repositori localment:
$ docker rmi dam_m02_v0:latest (on latest és el TAG) Untagged: dam_m02_v0:latest
En el fitxer Dockerfile senzillament tenia 'FROM ubuntu'. Ara puc fer coses més complicades.
Fer córrer aplicacions GUI
$ docker build -t gui -f ./Dockerfile3 . ... Successfully built 63a55a09c233 Successfully tagged gui:latest
run the container:
$ docker run -v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=$DISPLAY -h $HOSTNAME -v $HOME/.Xauthority:/home/joan/.Xauthority gui
i efectivament, se m'obre el Mozilla Firefox (i el xclock en l'altra prova que he fet).
$ docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE gui latest 63a55a09c233 About a minute ago 464MB
script Dockerfile3:
FROM ubuntu:14.04 RUN apt-get update RUN apt-get install -y firefox #RUN apt-get install -y x11-apps RUN groupadd -g 1000 joan RUN useradd -d /home/joan -s /bin/bash -m joan -u 1000 -g 1000 USER joan ENV HOME /home/joan CMD /usr/bin/firefox #CMD /usr/bin/xclock
Networking with standalone containers
He seguit el tutorial, i funciona correctament, és aclaridor.
Fan servir la imatge de alpine. Què és alpine?: A minimal Docker image based on Alpine Linux with a complete package index and only 5 MB in size!
És a dir, que va bé per fer proves.
creat per Joan Quintana Compte, juny 2021, agost 2021