Skip to content

Instantly share code, notes, and snippets.

@warlock
Last active December 20, 2022 12:04
Show Gist options
  • Save warlock/68429eedb4dc877583cc7219b576cab8 to your computer and use it in GitHub Desktop.
Save warlock/68429eedb4dc877583cc7219b576cab8 to your computer and use it in GitHub Desktop.
Docker Swarm en Català

Docker

Daemon

Arrancar i parar

systemctl status docker
systemctl restart docker
docker info # Es veu si hi ha cluster

Neteja del cluster

docker system prune

Build

docker build -t nom_imatge .

Images

docker images
docker images -a # Tots
docker images -q # Quiet: ID de les imatges
docker pull ubuntu:trusty
docker rmi ID

Processos

docker ps
docker ps -a # Tots els contenidors
docker ps -n 4 # Ultims 4 contenidors
docker ps -a -q # Quiet: ID dels contenidors
docker ps -a -s # Size: Espai de contenidor consumit
docker ps -a -f "name=agitated_fermat"  # Filter
docker rm $(docker ps -a -q) # Eliminar tots els contenidors

Run

docker run -it ubuntu # Interactiu
docker run -d nginx:alpine # Detached
docker run -it --name meu_ubuntu ubuntu # Interactiu
docker run -rm -it ubuntu ls # Interactiu + Substitueix bash per ls + Al finalitzar el ls fa un "-rm" tancant el contenidor.
docker exec meu_ubuntu echo "hola"
docker exec -it meu_ubuntu bash
docker run --name web -d -p 8080:80 nginx:alpine
docker run --name web -d -p 8080:80 -e TEXT_ENV=hola nginx:alpine # Amb el -e es seteja el Env

Containers

docker container ls
docker container stats 40b5
docker container stop 40b5
docker container rm 40b5

Inspect

Obtenir la informacio que conte el contendior.

docker inspect 40b5

Logs

docker logs 40b5 -f # Llegir logs
docker logs --tail 10 -f

Kill

docker kill 40b5

Top

Permet veure el process que mes consumeix

docker top 40b5

Stats

Monitoring del contenidor

docker stats
docker system df # Disk
docker system info

Networks

Drivers:

  • bridge (default) : xarxes privades dins de la maquina que permeten conectarse al exterior
  • host : Els contenidors no es veuen entre ells. Nomes es veuen desde l'exterior.
  • none : Sense network.
  • overlay : Cluster swarme
docker network ls
docker inspect 5ced | grep IPAd
docker ps -f "network=bridge"
docker network create xarxa1
docker run --name web -d -p 8080:80 --network xarxa1 nginx:alpine
docker network connect xarxa2 web
docker network disconnect xarxa1 web
docker network rm xaxa1

Veure conexions amb network manager

nmcli con

Registry

docker pull imatge:versio
docker push imatge:versio

Peticions a la api:

curl -X GET https://myregistry:5000/v2/_catalog
curl -X GET https://myregistry:5000/v2/ubuntu/tags/list

Volumes

El directori encara que no existeixi, es crea

docker run -it -v /dades --name ubuntu ubuntu bash
docker run -it -v /dades:/carpeta_contenidor --name ubuntu ubuntu bash
docker run -it -v /dades:/carpeta_contenidor --name ubuntu ubuntu ls
docker volume ls
docker volume prune # Eliminar tots els volums no conectats
docker volume create volum1
docker volume rm volum1
docker volume inspect volum1
docker volume create -d local-persist -o mountpoint=/mnt/ --name=extra-addons
docker run -it --rm -p 80:80 --volumes-from c1 --name c2 imatge:v1 # volumes-from reutilitza el volum que esta usant el cont c1
/var/lib/docker/volumes

Utils:

docker cp archiu contenidor_id:/tmp

Dockerfile

FROM

Imatge que s'importa

RUN

Comandes que es volen exacutar

CMD (El ultim es el que s'executara)

Es la comanda que s'executa al arrancar el contenidor.

Aquesta versio executa una shell i llença la comanda:

CMD echo "Hello world" 

Amb corchetes s'executa com si fos un exec sense el bash:

CMD ["echo","Welcome this container"]

ENTRYPOINT

Sempre executa aquesta comanda. No permet substituir la comanda pero permet afegir comandes.

ENTRYPOINT ["echo","Welcome this container"]

WORKDIR

Determina el directori on s'executaran les comandes.

COPY

Copia el document al workdir

ADD

Desempaqueta els tar i descarrega archius d'internet.

ENV

Crea una variable d'entorn environment

ENV variable=valor 

ARG

Similar a ENV. No fa falta posarli un valor.

ARG variable

S'utilitza per pasarli el argument en el moment de la construccio arg amb --build-arg

docker build -t nom_imatge  --build-arg variable=valor .

Tambe es pot pasar amb el build-arg al env

ARG variable
ENV variable=$variable

EXPOSE

Permet exposar ports. No es publiquen, s'ha de seguir usant el -p. Simplemente es perque la persona que l'utilitzara pugui saber quin es el port del servei.

EXPOSE 80

VOLUME

Crea un volum.

ADD web /var/www/html
VOLUME [/var/www/html]

Cluster

  • Manager
  • worker

Recorda que les comandes de swarm no es poden llençar en els workers

docker swarm init # Iniciar un cluster
docker swarm init --advertise-addr 192.168.0.69 # Es per fixar una ip si disposes de varies
docker swarm join --token TOKEN # Perque un node participi al cluster
docker swarm join-token manager
docker swarm join-token worker
docker swarm leave # El node abandonara el cluster i pasara a estar down

Nodes

docker node ls
docker node inspect --pretty node2
docker node promote node2 # El node2 posarlo a Reachable perque pugui ser "Leader"
docker node demote node1 # Ara el node1 sera un worker i el node2 passara a ser el nou master
docker node update --availability drain node3 # Drenar un node per manteniment
docker node update --availability active node3 # Tornar a activar el node
docker node update --label-add grup1 node1 # Posar label a un node

Serveis

docker service create --replicas 1 servei1 alpine ping google.com
docker services ls
docker service ps servei1
docker service logs servei1
docker service inspect --pretty servei1
docker service scale servei1=2
docker service rm servei1
docker service update --image grafana/grafana:5.0.1 grafana
docker service ps grafana
docker service create \
  --name servei1 \
  --publish published=<PUBLISHED-PORT>,target=<CONTAINER-PORT> \
  nginx:alpine
docker service create --name dns-cache \
  --publish published=53,target=53 \
  --publish published=53,target=53,protocol=udp \
  dns-cache
docker service create \
  --mode global \ # El modo global llençara una instancia per cada contenidor
  --publish mode=host,target=80,published=8080 \
  --name=nginx \
  nginx:latest
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment