Primers passos amb docker

De wikijoan
Salta a la navegació Salta a la cerca

Introducció

(TBD, curs GDS)

Instal·lació de docker a Linux

(TBD)

Ú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

Doker windows.png

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.

Instal·lo el Docker Descktop 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.


creat per Joan Quintana Compte, juny 2021