Diferència entre revisions de la pàgina «Primers passos amb docker»

De wikijoan
Salta a la navegació Salta a la cerca
 
(Hi ha 8 revisions intermèdies del mateix usuari que no es mostren)
Línia 2: Línia 2:
 
(TBD, curs GDS)
 
(TBD, curs GDS)
 
=Instal·lació de docker a Linux=
 
=Instal·lació de docker a Linux=
(TBD)
+
*[[Curs_GDS_(Dani_Arribas)#Instal.C2.B7laci.C3.B3_Docker_per_seguir_el_curs_de_GDS]]
 +
*https://linuxhint.com/install_docker_linux_mint/
 +
<pre>
 +
$ sudo apt-get update
 +
 
 +
$ sudo apt-get install \
 +
apt-transport-https \
 +
ca-certificates \
 +
curl \
 +
gnupg-agent \
 +
software-properties-common
 +
</pre>
 +
<pre>
 +
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
 +
$ sudo apt-key fingerprint 0EBFCD88
 +
</pre>
 +
<pre>
 +
$ lsb_release -cs
 +
ulyana -> ulyana a linux mint és equivalent a focal a Ubuntu
 +
</pre>
 +
*https://download.docker.com/linux/ubuntu/dists/focal/pool/stable/amd64/
 +
Descarrego els debs necessaris:
 +
<pre>
 +
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 *
 +
</pre>
 +
<pre>
 +
$ 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.
 +
...
 +
---
 +
</pre>
 +
Poder executar sense sudo:
 +
<pre>
 +
$ sudo groupadd docker (ja existeix)
 +
$ sudo usermod -aG docker $USER
 +
</pre>
 +
(necessari tancar la sessió)
 +
 
 
=Ús bàsic de docker=
 
=Ús bàsic de docker=
 
<pre>
 
<pre>
Línia 162: Línia 210:
 
*https://www.simplilearn.com/tutorials/docker-tutorial/install-docker-on-windows
 
*https://www.simplilearn.com/tutorials/docker-tutorial/install-docker-on-windows
 
*https://docs.docker.com/docker-for-windows/install/
 
*https://docs.docker.com/docker-for-windows/install/
Instal·lo el Docker Descktop 3.5.2
+
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
 
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
Línia 198: Línia 246:
 
</pre>
 
</pre>
 
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''.
 
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=
 +
<pre>
 +
$ cd dockerprojects
 +
</pre>
 +
(repository name must be lowercase)
 +
 +
En el fitxer Dockerfile senzillament tinc:
 +
<pre>
 +
FROM ubuntu
 +
</pre>
 +
<pre>
 +
$ 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
 +
</pre>
 +
per tal de què funcioni:
 +
<pre>
 +
$ 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
 +
</pre>
 +
Per apagar-lo:
 +
<pre>
 +
$ sudo docker kill 6cc8158ec1c7
 +
</pre>
 +
De fet per apagar-lo millor fer '''stop''':
 +
<pre>
 +
$ sudo docker stop 6cc8158ec1c7
 +
</pre>
 +
Però així no l'eliminem. Per eliminar-lo:
 +
<pre>
 +
$ sudo docker rm 6cc8158ec1c7
 +
</pre>
 +
<pre>
 +
$ 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
 +
</pre>
 +
Per entrar dins del docker:
 +
<pre>
 +
$ sudo docker exec -t -i 8c7535c45e10 /bin/bash
 +
root@8c7535c45e10:/#
 +
</pre>
 +
i per sortir:
 +
<pre>
 +
root@8c7535c45e10:/# exit
 +
$
 +
</pre>
 +
I ara l'esborrem:
 +
<pre>
 +
sudo docker image rm 30287d899656
 +
</pre>
 +
La manera d'esborrar un repositori localment:
 +
<pre>
 +
$ docker rmi dam_m02_v0:latest (on latest és el TAG)
 +
Untagged: dam_m02_v0:latest
 +
</pre>
 +
En el fitxer Dockerfile senzillament tenia 'FROM ubuntu'. Ara puc fer coses més complicades.
 +
 +
=Fer córrer aplicacions GUI=
 +
[[Fitxer:Xclock.png | thumbnail]]
 +
*https://l10nn.medium.com/running-x11-applications-with-docker-75133178d090
 +
<pre>
 +
$ docker build -t gui -f ./Dockerfile3 .
 +
...
 +
Successfully built 63a55a09c233
 +
Successfully tagged gui:latest
 +
</pre>
 +
run the container:
 +
<pre>
 +
$ docker run -v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=$DISPLAY -h $HOSTNAME -v $HOME/.Xauthority:/home/joan/.Xauthority gui
 +
</pre>
 +
i efectivament, se m'obre el Mozilla Firefox (i el xclock en l'altra prova que he fet).
 +
<pre>
 +
$ docker image ls
 +
REPOSITORY              TAG      IMAGE ID      CREATED              SIZE
 +
gui                      latest    63a55a09c233  About a minute ago  464MB
 +
</pre>
 +
 +
script ''Dockerfile3'':
 +
<pre>
 +
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
 +
</pre>
 +
=Networking with standalone containers=
 +
*https://docs.docker.com/network/network-tutorial-standalone/
 +
He seguit el tutorial, i funciona correctament, és aclaridor.
  
{{Autor}}, juny 2021
+
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!
 +
*https://hub.docker.com/_/alpine
 +
És a dir, que va bé per fer proves.
 +
{{Autor}}, juny 2021, agost 2021

Revisió de 10:12, 17 març 2022

Introducció

(TBD, curs GDS)

Instal·lació de docker a Linux

$ 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

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 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

Xclock.png
$ 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